最近,在grub引導的Ubuntu+Win7雙系統上作業,用的是Ubuntu14.04.2。進行系統更新,更新到一般卡住了,恰好此時在進行grub相關文件的更新,我把機器重啟后進入了grub rescue模式,如下:
error: file '/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>
經過網絡一番查找和自身驗證,我匯總了三種解決方法。
1.制作Ubuntu的U盤啟動工具,選擇U盤啟動機器,進入Try Ubuntu,安裝boot-repair工具,用該工具回復損壞的grub.
a.在命令行下安裝boot-repair,首先鏈接源地址:$sudo add-apt-repository ppa:yannubuntu/boot-repair
$sudo apt-get update
$sudo apt-get install boot-repair
b.安裝成功后可以在dash中或終端里啟動boot-repair,開始修復系統。
c.系統修復可能需要幾分鍾,后關機拔掉U盤,再啟動。即可看到熟悉的grub引導界面了。
2.直接在grub rescue模式下選擇normal模式啟動,然后再修改更新grub。這種方法的關鍵點有三個,一是選擇好grub所在的分區目錄,二是找到root所在的分區,三是要有normal.mod文件。該模式下命令有限,常用的有ls set insmod,通過這三個命令,來找到上述文件目錄項后設置root和prefix,再選擇normal啟動模式。
a.grub rescue>set //該命令會列出boot目錄所在的分區,grub目錄所在的分區;
b.grub rescue>ls //列出所有分區,樣式如(hd0,msdosX);
c.grub rescue>ls (hd0,msdosX)/ //依次列出每個分區下的目錄,找出root在那個分區下,這里我們假設grub在(hd0,msdos6)/boot/grub,root在(hd0,msdos5)分區上;
d.grub rescue>set root=(hd0,msdos5)
grub rescue>set prefix=(hd0,msdos6)/boot/grub
grub rescue>insmod /boot/grub/normal.mod //若沒有normal.mod這個文件,請選擇第一種或第三種方法。
e.grub rescue>normal //顯示grub菜單
f.通過顯示的菜單進入系統后,在命令行對系統進行更新修復。
$sudo update-grub
$sudo grub-install /dev/sda //sda為硬盤號,不是分區號(sda1,sda2等等)
$sudo shutdown -r now //重新啟動機器
ps:可以在grub.cfg中修改grub菜單。
3.若第一和第二中方法無效,那么只能放棄所有從來再來,用做好的啟動工具重新做個Ubuntu系統,在更新修復grub -_*!。