Ubuntu啓動中Grub Rescue的修復方法

Grub的引導錯誤通常會有如下錯誤提示:
   error:unknow filesystem
   grub rescue>

故障原因分析:
已經發現下面幾種操作會導致這種問題:
1、想刪除ubuntu,於是直接在windows下刪除/格式化了ubuntu所在的分區。
2、調整磁盤,利用工具合併/分割/調整/刪除分區,使磁盤分區數目發生了變化。
3、重新安裝系統,把linux安裝到了新分區,原有分區已經格式化,但是沒有重新安裝grub2。
4、用ubuntu備份工具/衍生版製造工具等,把主分區回覆成了8.X的老版本,結果老版本的grub是grub1,於是把grub2破壞掉了。
5、提取ubuntu分區的前512字節生成的引導文件ubuntu.bin不正確,造成錯誤引導,此問題和本文無關,只需要重新提取生成bin文件即可解決故障。
 總歸,是由於操作者不知道grub2分爲兩部分,一部分(一般情況下)寫在了mbr上,另一部分寫在了某個分區的/boot/grub目錄(如果/boot單獨分區,則直接寫在對應分區的/grub目錄)裏面。由於上述操作,致使grub2的mbr裏面的那一部分找不到/grub目錄裏面的那一部分了(或者那部分已經刪除了)

如果要徹底刪除Grub引導菜單,可以在故障修復臺下Shift+F10,輸入命令
bootrec /fixmbr 和 bootrec /fixboot 或者用diskgenius軟件重建mbr記錄

在grub rescue下用到的命令解釋:
  set     查看環境變量,這裏可以查看啓動路徑和分區
  ls       查看設備
  insmod   加載模塊
  root    指定用於啓動系統的分區,可設定grub啓動分區
  prefix  設定grub啓動路徑


  以下方法是手動修復Grub2的方法
 
1.  先使用ls命令,找到Ubuntu的安裝在哪個分區:
     grub rescue>ls
     會羅列所有的磁盤分區信息,比方說:
     (hd0),(hd0,msdos5),(hd0,msdos3),(hd0,msdos2),(hd0,msdos1)

2. 然後依次調用如下命令: X表示各個分區號碼

     grub rescue>ls (hd0,X)/boot/grub

     如果都找不到的話,需要查一下是否因爲Linux版本差異,造成grub的路徑不對,例如直接ls(hd0,X)/grub等等。
     正常情況下,會列出來幾百個文件,很多文件的擴展名是.mod和.lst和.img,還有一個文件是grub.cfg。假設找到(hd0,5)時,顯示了文件夾中的文件,則表示Linux安裝在這個分區。
ls(hd0,X)/  則會列出所有根分區的文件夾和文件。

3. 輸入
     
grub rescue>set 
        這個命令查看當前的設置,正確的顯示如下。如果顯示正確,以下步驟4中的前2項命令可以不用輸入,直接輸入第3項命令加載模塊。

        root=hd0,msdos5
        prefix=(hd0,msdos5)/boot/grub

4. 調用如下命令:

    grub rescue>set root=(hd0,5)

    grub rescue>set prefix=(hd0,5)/boot/grub

    grub rescue>insmod /boot/grub/normal.mod  (或者用insmod normal命令)

5. 然後調用如下命令,就可以顯示出丟失的grub菜單了。

    grub rescue>normal

6. 不過不要高興,如果這時重啓,問題依舊存在,我們還需要對grub進行修復。

    進入Linux之後,在命令行執行:

    sudo update-grub

    sudo grub-install /dev/sda  (這是安裝grub在sda上,下面2個命令是安裝在指定根分區)

    如果需要安裝在指定根分區,需要採用一下方法
    sudo update-grub
     sudo mount /dev/sda5 /mnt
     sudo grub-install --force --root-director=/mnt /dev/sda5

   重啓測試是否已經恢復了grub的啓動菜單? 恭喜你恢復成功

 

以下步驟是對grub rescue故障的深度分析。
如果找不到正確的/grub目錄,則嘗試尋找是否有linux核心文件,則依次調用如下命令: 

grub rescue>ls (hd0,X)/boot     (X表示各個分區號碼)

找名字類似與vmlinuz-3.0.0-12-generic這樣的文件,這是linux核心文件,如果找到,記下(hd0,X)中的X值。假設找到(hd0,5)時,顯示了文件夾中的文件。

然後用live cd 或者 live usb啓動,在live cd的ubuntu的終端中依次輸入以下命令(sda5中的“5”必須改成上面記錄下來數值)
 sudo mount /dev/sda5 /mnt
sudo grub-install --boot-directory=/mnt/boot /dev/sda
然後重新啓動即可。
(以上這兩句命令也可以解決安裝ubuntu時grub安裝位置不對,沒有將grub安裝到/dev/sda,造成啓動時不出現ubuntu啓動項直接進入windows的問題,不過需要自行確定sda5中的“5”改成什麼數字。)
   如果連linux核心文件都沒有,那麼,徹底重新安裝吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章