本文使用的示例版本為MagicLinux 1.2 final。因為重裝Windows等等誤操作常常導致安裝到MBR的GRUB引導程序無法再引導系統,也就最終導致了無法進入Linux系統。關於這個問題的解決辦法在網上有多種,但經筆者測試都行不通,最終結合網上多篇文章,在ML1.2的grub被WinXP覆蓋後成功的恢復了,寫下偶的實驗經歷,共勉。
筆者的ML1.2安裝在/dev/hda11,對應grub下的位置為(hd0,10),注意使用/dev/hdax的方式表示的分區號都是從1開始的,所以到了grub下時需要減去1來表示。grub安裝在MBR,在安裝WinXP後導致無法進入linux。本文雖然使用ML1.2做例子,但是對版本較新的grub具有通用性。MagicLinux 1.2 final使用的grub版本為0.95。
先使用一張修復盤進入grub,或者利用其他linux恢復盤等等進入linux系統,然後進入grub控制台。總之就是想盡辦法進入一個控制台就是了。然後准備引導進入硬盤上的Linux系統。如下:
grub> root (hd0,10)
grub> kernel /boot/vmlinuz-2.6.9 init 5 ro root=/dev/hda11
grub> initrd /boot/initrd-2.6.9.img
grub> boot
如上是利用修復盤進入grub後的修復方法,至於自己可以進入其他的控制台修復方法暫時略。如上的過程就可以進入硬盤上的linux系統了。然後開始修復過程。
# grub
grub> root (hd0,10)
grub> setup (hd0)
grub> quit
# grub-install hd0
如山的步驟將會把grub安裝到MBR,任何一個步驟都不可以缺少。如果缺少grub-install步驟則會安裝grub到MBR,但是不會顯示系統菜單。
另外,對於MagicLinux1.2final會在最後一步提示找不到grub。這是因為grub-install是一個shell腳本,使用絕對路徑尋找grub程序。默認的尋找grub路徑為/usr/sbin/grub,可是對ML1.2則是在/sbin/grub。所以只要執行如下語句,復制一下即可:
# cp /sbin/grub /usr/sbin/grub
這樣就可以正確的恢復grub到MBR了。
本文沒有直接寫出使用光盤上的控制台修復grub的原因是很多光盤發行版帶有的/dev/hdax的數目很小,我手裡的一個最大到/dev/hda8,這樣根本無法訪問/dev/hda11,所以只好放棄。另外即便是光盤發行版也是需要使用grub引導的,在它引導的時候按下"C"鍵即可進入grub控制台,輸入命令來進入硬盤上的Linux。
最後,推薦還是備份一下做好的MBR,在linux下使用如下命令:
# dd if=/dev/hda of=/root/linux.bin bs=512 count=1
這裡注意使用if=/dev/hda是備份MBR中的數據,如果grub安裝在具體的某個分區,則要自己選擇了。備份之後的linux.bin文件可以復制到Windows下,備份一份,另一份復制到C盤根目錄下。然後修改boot.ini文件,添加如下一行:
C:\linux.bin="Linux"
這樣就可以利用Windows的NT loader來引導linux系統了。以後恢復和修理linux會更加方便。