歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> FreeBSD引導扇區被Windows覆蓋的解決方案

FreeBSD引導扇區被Windows覆蓋的解決方案

日期:2017/2/28 11:19:33   编辑:關於Unix


  1、引言
  對於在一個硬盤上安裝多操作系統而言,經常面臨的一個問題就是當重新安裝了Windows後,引導分區將會被Windows覆蓋掉。無論是安裝Linux還是FreeBSD,當重新安裝Windows時,都會遇到這個問題。作者就在自己的機器上安裝了雙系統:Windows XP和FreeBSD 6.1。最近由於Windows出現被病毒感染的症狀,因此作者一怒之下將Windows重裝了,這下,世界徹底清淨了。但同時,也就無法啟動FreeBSD了。作者通過閱讀網絡上的相關文章,采用一種與通常的方式稍微不同的辦法來解決了這個問題。
  2、通常采用的方法
  作者在網上查找了相關的資料,發現大多數都是通過修改Windows的C:\boot.ini來實現NTLDR(Windows的引導程序)的多系統引導。這種解決方式的做法如下:
  1、 首先用FreeBSD的引導光盤(或軟盤)啟動FreeBSD,進入Fixit控制台;
  2、 通過mount_msdosfs命令掛載Windows系統所在的分區,通常是C:\,其在FreeBSD下的設備通常對應的是/dev/ad0s1。因此掛載(mount)命令如下:
  mount_msdosfs /dev/ad0s1 /mnt
  3、 通過dd命令將FreeBSD的引導扇區的內容轉儲到一個文件中,通常FreeBSD的根文件系統位於/dev/ad0s3a上——至少在作者的機器上是這樣的。這裡將轉儲的輸出文件命名為bootsect.bsd,同時這個文件應該位於Windows的C:\下,故具體的命令如下:
  dd bs=512 count=1 if=/dev/ad0s3 of=/mnt/bootsect.bsd
  4、 然後取出FreeBSD的引導光盤,啟動Windows,修改C:\bootsect.bsd文件,在其末尾添加下面一行:
  c:\bootsect.bsd=”FreeBSD 6.1”
  實際上,等號後面的字符串是NTLDR顯示操作系統列表的時候的字符串,因此可以寫成任何你喜歡的值——你甚至可以用你的寵物的名字來命名,比如RedDaemon(假設這是你養的一只貓的名字)。
  5、 然後,再次啟動Windows的時候,就會出現一個讓用戶選擇啟動哪個操作系統的提示,就好像Windows安全模式下那樣。
  以上就是作者在網上找到的被說明得最多的方法。然後作者試過之後,發現這種方法不能在作者的機器上工作。具體的原因並不清楚,於是作者試圖尋找另外一種做法。
  3、作者采用的方法
  實際上,在FreeBSD中有這樣一個工具:boot0cfg,其man手冊說這是一個boot managerinstallation/configuration utility,通過這個工具可以修改硬盤的MBR(也就是引導扇區)。這不就是我們所需要的麼?作者仔細閱讀了boot0cfg的man手冊,詳細了解了其各項參數的意義。最後給出了本文將要說明的這種修復MBR的方案:
  1、 通過FreeBSD引導光盤啟動FreeBSD的Fixit控制台,在這個控制台下可以使用各種系統工具——這些系統工具都位於引導光盤上,而引導光盤則被自動掛載到了/mnt2上,使用者也不需要修改PATH環境變量,因為PATH環境變量也被自動地做了修改,使得不用給出絕對路徑就可以使用各種系統工具,這其中自然也包括boot0cfg。
  2、 通過下列命令修復MBR(也即硬盤的引導扇區),關於boot0cfg的這幾個命令行選項,這裡僅做簡要說明,感興趣的讀者請參考[1]。以下命令需要root權限(這句是廢話,通過Fixit控制台進入系統自然就是root用戶):
  boot0cfg -B -v -o noupdate -t 185 ad0
  簡要的說明一下:
  -B選項:指明要在硬盤上安裝引導程序
  -v選項:給出詳細信息
  -o noupdate選項:避免在某些平台上出現問題(這些平台帶有反病毒硬件,不允許修改MBR)
  -t 185選項:啟動時暫停10秒(近似值),以允許用戶選擇要啟動的系統
  本來,像上面這樣用一個boot0cfg命令將MBR修復了工作也就完成了。但是在作者的系統上還遇到了下面這樣一個問題:內核啟動之後,要求手動加載/dev/ad0s4a根文件系統。但是卻無法加載——內核被鎖住了。經過一番搏斗之後,作者發現了問題的所在:原來,在重新安裝Windows的時候格式化了原來的C盤,這導致分區標號(label)發生了變化。原來的根文件系統是在/dev/ad0s4a上的,但是現在卻不在這個分區上了,而變成位於/dev/ad0s3a上了。作者是通過在Fixit控制台下面使用fdisk命令發現這一變化的。知道了這一點之後,事情就很好解決了。因為我們知道FreeBSD要加載的文件系統是在/etc/fstab中指定的。因此只需要把這個文件中的所有/dev/ad0s4*改成/dev/ad0s3*就可以了(這裡*表示下列字符之一:a、b、d、e、f,沒有c,因為/dev/ad0s*c通常被交換分區占用了)。具體說來,作者采用的詳細步驟如下:
  1、 通過FreeBSD引導光盤(或軟盤)啟動FreeBSD;
  2、 進入Fixit控制台;
  3、 通過下列命令掛載FreeBSD的根文件系統:
  mount /dev/ad0s3a /mnt
  4、 切換當前目錄到/mnt/etc下:
  cd /mnt/etc
  5、 通過vi編輯器修改fstab文件(不能使用vim),修改的方式如上所述:
  vi fstab
  這樣,就可以正常地啟動FreeBSD了。就好像什麼都沒有發生過一樣——盡管實際上有些地方已經變化了。
  4、結論
  在作者采用的這種解決方案中,修復文件系統表/etc/fstab實際上與修復MBR是沒有關系的。即便是采用第一種修改方式能夠啟動FreeBSD內核,也必須修復文件系統表/etc/fstab。因此,比較而言,真正的工作完全是通過boot0cfg來完成的,只需一個命令就可以了。而通常采用的修改Windows下的boot.ini的方法則要麻煩一些。
  最後,兩種方法更改的內容也不相同,第一種方法修改的並不是MBR(引導扇區),而是修改的NTLDR(也許可以把它稱作Windows的bootloader)的配置文件boot.ini,在硬盤的引導扇區中存在的仍然是Windows的引導程序。作者采用的方法則直接修改了硬盤的MBR。
Copyright © Linux教程網 All Rights Reserved