1. 程式人生 > >關於error file: /boot/grub/i386-pc/normal.mod not found. Grub Rescue的修復問題

關於error file: /boot/grub/i386-pc/normal.mod not found. Grub Rescue的修復問題

造成該問題可能的原因是我update之後對系統造成了修改,結果導致了/boot/grub/i386-pc/normal.mod的丟失,normal.mod是ubuntu開機引導的必載入項,因而報出

/boot/grub/i386-pc/normal.mod not found. Grub Rescue>的問題。

在救援模式下,只有很少的命令可是使用:
  1. set 設定環境變數
  2. ls 檢視裝置
  3. insmod 載入模組
  4. root 指定用於啟動系統的分割槽
  5. prefix 設定grub啟動路徑
在救援模式下,先ls檢視下裝置,一般都有好多分割槽。這時候要手動找到linux分割槽,因為我們要載入正確的模組,先找到分割槽就是。
方法:ls (hd0,X)/ X為顯示的號碼,如果是msdos11可以直接用11代替。該命令為檢視分割槽下的檔案,如果root單獨分割槽了,就找到grub目錄,然後ls (hd0,x)/gurb會發現還有個i386-pc目錄,normal.mod檔案就在該目錄下。 另外ChinaUnix社群有篇帖子做了更詳細的說明:http://bbs.chinaunix.net/thread-3634395-1-1.html 在救援模式下只有很少的命令可以用: set  ,  ls , insmod , root , prefix (1)set  檢視環境變數,這裡可以檢視啟動路徑和分割槽。 (2)ls   檢視裝置 (3)insmod  載入模組 (4)root  指定用於啟動系統的分割槽,在救援模式下設定grub啟動分割槽 (5)prefix 設定grub啟動路徑 二、設定grub的啟動分割槽和路徑 set root=(hd0,msdos1)  #設定grub啟動分割槽 set prefix=(hd0,msdos1)/boot/grub/  #設定grub啟動路徑 檢視一下設定情況: grub rescue> set prefix=(hd0,msdos1)/boot/grub root=hd0,msdos1 三、載入基本模組 insmod /boot/grub/normal.mod  #載入基本模組 四、進入正常模式 normal  #進入正常模式,出現選單,如果載入grub.cfg(錯誤的)可能出現問題,按shift可以出現選單,之後按c鍵進入控制檯 進入正常模式後就會出現grub>這樣的提示符,在這裡支援的命令就非常多了。 五、引導系統 set root=(hd0,msdos1)  #設定正常啟動分割槽 linux /boot/vmlinuz ....  ro text root=/dev/sda1  #載入核心,進入控制檯模式 initrd  /boot/initrd ....  #載入initrd.img boot #引導 他的解決過程:

下面是具體步驟:

檢視分割槽

因為每個人的分割槽不一樣,所以我們要檢視分割槽,ls指令

grub rescue>ls

回車後,就會出現

(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)

grub rescue>

注:我用的是grub2,對於grub使用者,分割槽前沒有msdos字樣

上面是我的分割槽,每個人的不一樣。

grub rescue>set回車

prefix=(hd0,msdos9)/boot/grub

root=hd0,msdos9

從上面可以看出來現在我的系統是從(hd0,msdos9)

裡啟動的。

那麼怎麼知道ubuntu在哪個分割槽呢?進入第二步

尋找ubuntu所在分割槽

這一步我們要一個一個的試,

還是用ls指令

先試下在不在(hd0,msdos8)裡邊

grub rescue>ls (hd0,msdos8)

回車會發現,不是,還是unknown filesystem

接著來

。。。。。。。。。

當我試到

(hd0,msdos7)的時候,可以看到一下子多了很多字,這些就是我ubuntu主資料夾下的資料夾和檔案的名字。OK,找到分割槽了!

修改啟動分割槽

grub rescue>root=(hd0,msdos7)
grub rescue>prefix=/boot/grub //grub
路徑設定
grub rescue>set root=(hd0,msdos7)
grub rescue>set prefix=(hd0,msdos7)/boot/grub
grub rescue>insmod normal //
啟動normal啟動

grub rescue>normal

依次敲入上面的指令,是不是看到熟悉的啟動選單了?選win7後,一鍵Ghost就開始備份系統了。別高興太早,一切還都沒開始呢。如果你不是因為一鍵Ghost問題進入grub rescue,可以直接跳到第⑤步

再來一遍

當你等著一鍵Ghost備份完系統,重啟後,你發現還是

error:unknown filesystem

grub rescue>

彆著急,再把前三步進行一遍就可以了

進入命令列 啟動Ubuntu

進入系統啟動選項介面後,你發現,無論點那個還是進不去,這是因為你還沒有真正的修改grub,這個要到ubuntu裡修改

進入系統啟動項介面後,按C進入命令列模式

grub >set root=hd0,msdos7

grub >set prefix=(hd0,msdos7)/boot/grub

grub >linux /vmlinuz-xxx-xxx root=/dev/sda7 //裡邊的xxxx可以按Tab鍵,如果有acpi問題,在最後加一句acpi=off
grub >initrd /initrd.img-xxx-xxx
grub >boot

Ubuntu正常啟動了吧?

進入ubuntu修復grub

大功就要高成了

進入Ubuntu,修復grub

在終端裡執行

sudo update-grub

重建grub到第一硬碟mbr
sudo grub-install /dev/sda

以上內容很的好學習的關於開機引導的問題,but it doesn't work for me.

最終我的解決方案:

1.考慮使用UltraISO製作ubuntu14.04 U盤映象以啟動系統恢復

參考:http://jingyan.baidu.com/article/363872ec8b4f6a6e4ba16f2b.html

結果:失敗,由於燒錄映象時報出始終被佔用的問題,後來網上提示原因是UltraISO版本問題以及ubuntu14.04太新。。。。放棄

2.考慮使用Universal-USB-Installer製作ubuntu14.04 U盤以啟動系統恢復

參考:http://blog.csdn.net/liangcaiyun2013/article/details/10410797

結果:U盤啟動ubuntu成功,但是,進入ubuntu後無法修復原分割槽的系統。

參考:http://sourceforge.net/p/boot-repair-cd/home/Home/

結果,有詳細的教程,然後最後修復成功。

補充,由於我是在修復我的vmware中的ubuntu,因而還需要做一個vmware的u盤啟動,教程如下:

http://jingyan.baidu.com/article/b2c186c8eb3813c46ef6ffef.html

注意事項:教程中建立好新硬碟後,如果想要該盤的啟動順序排在前面,點右面詳細面板的高階,設定虛擬裝置節點,將想要先啟動的硬碟盤號往前排。