不久前,實驗室一個同學電腦上裝的本來是win7+fedora16雙系統,結果他不想用fedora16了, 就在windows上把fedora16所在的磁碟格式化了。重新啟動後win7和fedora16都進不去了。介面就一直停在grub輸入的地方。索性就進winPE了,PE進去重新安裝了一下C盤,不過是ghost安裝的,安裝好之後重啟結果還是不能進入win7,還是grub引導那裡。後來我就直接再進入PE,用裡面的修複啟動項軟體重寫了MBR,這下能進入win7了,並且在進入win7後開始自動重寫輸入表,驅動之類的。我想了下,下面是整個過程的解釋。
MBR上面有分區表(64位元組)和引導程式(446個位元組),grub就是裝在這個446位元組上的。grub功能很強大,grub是支援多系統啟動的,還有控制權轉交的功能。所有淡淡這麼點大小的儲存量是不夠的。所有在Boot Loader(這裡就說是grub了)載入的時候有兩個階段,Stage1,Stage2。Stage1階段主要是載入Boot Loader上的程式,就是說載入了grub,但這裡並沒有安裝Loader相關的設定檔。在Stage2階段就是通過gurb來讀取設定檔,比如/boot/grub/menu.lst或grubcon.fig,設定檔提供了很多資訊,一個比較直觀的資訊就是開機時候的系統選擇菜單(詳細設定檔再介紹)。這就可以理解上面的問題了,刪除了Linux後,Stage1中grub是載入好了,但是Stage2過程中去載入設定檔就沒了。也就不能發揮grub的系統引導功能和控制權轉交功能。
那麼為什麼ghost安裝後還是不能恢複引導呢?ghost開始就是複製硬碟上的資料的,也就是把鏡像的檔案重新寫了一遍win7上的C盤,C盤自己的Boot Loader是重寫了。但是MBR不屬於任何作業系統,MBR沒有寫額。所以就導致MBR上Boot Loader還是原來的grub程式,也還是會去讀取fedora16下的設定檔。
最後就是進入PE之後修複MBR後就OK了,這裡的解釋就是重寫MBR了,不過肯定不會再是grub了,是windows自己的引導程式了。
摘自 firefoxbug的專欄