最近升級安裝了 debian 6,不料因為對 grub2 不太瞭解,一次操作失誤,致使 grub2 發生致命錯誤,無法引導系統。好在經過一番胡亂折騰,總算是修複了引導程式。現在記錄如下,以備後用。
簡單情況:250G 硬碟,分成3個主要磁碟分割,分別是
- /dev/sda1 (hd0,0),Windows C 系統硬碟
- /dev/sda2 (hd0,1),Windows D 資料盤
- /dev/sda3 (hd0,2),Windows E 資料盤
然後是5個邏輯分區。分別安裝了:
- /dev/sda5 (hd0,4),Ubuntu 10.10
- /dev/sda6 (hd0,5),Fedora 14
- /dev/sda7 (hd0,6),openSUSE 11.3
- /dev/sda8 (hd0,7),Debian 6
- /dev/sda9 (hd0,8),Swap 交換分區
原來一直是用 /dev/sda5 的 Ubuntu 10.10 的 grub2 作為引導程式,升級安裝 Debian 6 以後,覆蓋了原來的 grub2。Debian 6 也採用了最新的 grub2 引導技術,不過奇怪的是,在安裝 Debian 6 產生 grub2 菜單的時候,Debian 可以掃描出其它的全部系統,唯獨它派生的 Ubuntu 無法識別!只好在安裝完畢以後,自己手動修改 Debian 的 grub2 引導程式。結果這一修改出了毛病。
grub2 已經無法再通過直接修改 /boot/grub/menu.lst 檔案來修改啟動菜單了,/boot/grub/ 目錄下倒是有一個 grub.cfg 檔案可以直接修改,不過一般是不建議直接修改這個檔案的。需要修改的是 /etc/grub.d/ 目錄下的檔案。也怪自己事先沒查清楚資料,胡亂拿了一檔案開刀:/etc/grub.d/40_custom,在檔案後面添加了如下指令:
title Ubuntu 10.10
root (hd0,4)
linux /boot/grub/core.img
boot
用過 grub1 引導 grub2 系統的朋友估計對這幾句指令比較熟悉呵呵,確實是不倫不類,Debian 6 是用 grub2 引導的,第一條指令,title Ubuntu 10.10 就不對頭了,grub2 已經用 menuentry 代替了 title 指令。第二條指令 root (hd0,4) 也不正確,參考 Ubuntu 的啟動菜單,grub2 已經使用 (hd0,msdos5) 代換了 (hd0,4);第三,原來用 grub1 引導 grub2 系統的時候,kernel /boot/grub/core.img 這個指令是正確的,不過 grub2 已經使用 linux 代替了 kernel 這個指令,所以這裡用 linux /boot/grub/core.img 代替 linux /boot/grub/core.img 倒也不錯。
杯具的是運行完些命令以後:
update-grub
然後 reboot,完了,進了 initramfs 黑屏,完全沒有了啟動菜單,只有一些內建命令,我這種水平如何能對付的了。趕緊找安裝光碟片,光碟機啟動,重新修複 grub。偏偏光碟機罷工,凡是帶 grub2 系統的安裝光碟片全部讀不出來,原來當初買燒錄碟不慎,貪便宜,買到的全部是只能讀1-2次的光碟片!!這些死 JS!!我一邊劃個圈圈詛咒,一邊繼續嘗試其它的安裝光碟片。終於讀起了張 Fedora 13 的光碟片!內心一陣狂喜。好在還裝有 Fedora 14 和 openSUSE 這兩個作業系統,它們都是 grub1 引導,相對來說比較熟悉。修複其中的一個引導程式,然後再手工修改,引導其它系統吧。
進入 Fedora 13 的 LiveCD 案頭,趕緊開啟終端,立馬輸入期待已久的命令(嘿嘿):
su -
password<直接斷行符號>
grub
W E L C O M E ... (此處省略 N 位元組)
root (hd0,5)
setup (hd0)
quit
rebo ...
等會!不要重啟先。順便把錯誤修改 Debian 引導檔案也改回來了吧。
mount /dev/sda8 /mnt/
vi /mnt/etc/grub.d/40_custom
xxxxxxxxx
儲存退出,重啟,哈哈大功告成。原以為修改掉 Debian 下的 /etc/grub.d/ 檔案,就能直接從 Fedora 引導進 Debian,結果還是和原來的一樣黑屏。原來沒有在 Debian 系統下運行 update-grub 命令之前,對 grub 檔案做任何修改都沒用!
沒辦法還是只能手工敲命令吧:
在 grub 引導介面,敲入 c 鍵進入命令列模式:
root (hd0,7)
kerenl /boot/vmlinuz-2.6.32-5-686 root=/dev/sda8 ro quiet
initrd /boot/initrd.img-2.6.32-5-686
boot
好了,一切正常的話,可以進入 Debian 了,然後再運行 update-grub 修複受傷的 grub 引導程式吧。這次教訓是:一張安裝光碟片在手是不可或缺的,或許還應該考慮 USB 啟動器做備用,現在的光碟機和燒錄碟太不靠譜了。