天天看點

恢複Linux作業系統的GRUB引導程式

恢複Linux作業系統的GRUB引導程式

   本文使用的示例版本為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了。

   本文沒有直接寫出使用CD光牒上的控制台修複grub的原因是很多CD光牒發行版帶有的/dev/hdax的數目很小,我手裡的一個最大到/dev/hda8,這樣根本無法通路/dev/hda11,是以隻好放棄。另外即便是CD光牒發行版也是需要使用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會更加友善。