關於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>的問題。

關於基本知識,孫斌斌的個人blog 做了部分總結:

在救援模式下,只有很少的命令可是使用:
  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後無法修復原分區的系統。

3.考慮使用Boot-Repair

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

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


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

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

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

發佈了196 篇原創文章 · 獲贊 196 · 訪問量 120萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章