Grub Rescue修復方法

症狀:
開機顯示:GRUB loading

error:unknow filesystem

grub rescue>

緣由:
已經發現下面幾種操做會致使這種問題:
1,想刪除ubuntu,因而直接在windows下刪除/格式化了ubuntu所在的分區。
2,調整磁盤,利用工具合併/分割/調整/刪除分區,使磁盤分區數目發生了變化。
3,從新安裝系統,把linux安裝到了新分區,原有分區已經格式化,可是沒有從新安裝grub2。
4,用ubuntu備份工具/衍生版製造工具等,把主分區回覆成了8.X的老版本,結果老版本的grub是grub1,因而把grub2破壞掉了。

總歸,是因爲操做者不知道grub2分爲兩部分,一部分(通常狀況下)寫在了mbr上,另外一部分寫在了某個分區的/boot/grub目錄(若是/boot單獨分區,則直接寫在對應分區的/grub目錄)裏面。因爲上述操做,導致grub2的mbr裏面的那一部分找不到/grub目錄裏面的那一部分了(或者那一部分已經刪除了)。

思路:
方法1,完全刪除grub2,讓這個提示再也不出現:
適用於已經不想再使用ubuntu,要轉回windows的人。
這個很簡單,只要你有Windows啓動盤(非Ghost),用它啓動,至選擇安裝位置,不用真正安裝,退出重啓就能夠。
或者用它啓動到故障修復臺,運行fixboot或者fixmbr均可以。
win7命令行下,則是執行:BootRec.exe /fixmbr
(/fixmbr修復mbr, /FixBoot修復啓動扇區,/ScanOs檢測已安裝的win7,/RebuildBcd重建bcd。)

方法2,從新安裝、修復grub2
1. 先使用ls命令,找到Ubuntu的安裝在哪一個分區:
在 grub rescue>下輸入如下命令:linux


代碼:
ls

會羅列全部的磁盤分區信息,比方說:web


引用:
(hd0,1),(hd0,5),(hd0,3),(hd0,2)

2. 而後依次調用以下命令: X表示各個分區號碼
若是/boot沒有單獨分區,用如下命令:ubuntu


代碼:
ls (hd0,X)/boot/grub


www.2cto.comwindows

若是/boot單獨分區,則用下列命令:工具


代碼:
ls (hd0,X)/grub


正常狀況下,會列出來幾百個文件,不少文件的擴展名是.mod和.lst和.img,還有一個文件是grub.cfg。假設找到(hd0,5)時,顯示了文件夾中的文件,則表示Linux安裝在這個分區。

4,若是找到了正確的grub目錄,則設法臨時性將grub的兩部分關聯起來,方法以下:
如下是/boot沒有單獨分區的命令:測試


引用:
grub rescue>set root=(hd0,5)
grub rescue>set prefix=(hd0,5)/boot/grub
grub rescue>insmod /boot/grub/normal.mod


如下是/boot 單獨分區的命令:(這幾句有待驗證)ui


引用:
grub rescue>set root=(hd0,5)
grub rescue>set prefix=(hd0,5)/grub
grub rescue>insmod /grub/normal.mod


而後調用以下命令,就能夠顯示出丟失的grub菜單了。
grub rescue>normal
不過不要高興,若是這時重啓,問題依舊存在,咱們須要進入Linux中,對grub進行修復。
啓動起來,進入ubuntu以後,在終端執行:spa


代碼:
    sudo update-grub
    sudo grub-install /dev/sda

(sda是你的硬盤號碼,千萬不要指定分區號碼,例如sda1,sda5等都不對)
重啓測試是否已經恢復了grub的啓動菜單? 恭喜你恢復成功!
5,若是找不到正確的/grub目錄,好比第三、4種誤操做,則嘗試尋找是否有linux核心文件,則依次調用以下命令: X表示各個分區號碼:
grub rescue>下,輸入:
若是/boot沒有單獨分區:命令行


代碼:
ls (hd0,X)/boot


若是/boot單獨分區,則:code


代碼:
ls (hd0,X)

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

而後用live cd 或者 live usb啓動,在live cd的ubuntu的終端中依次輸入如下命令(sda5中的「5」必須改爲上面記錄下來數值)(這兩句須要驗證):
若是/boot沒有單獨分區:


代碼:
sudo mount /dev/sda5 /mnt
sudo grub-install --boot-directory=/mnt/boot /dev/sda

若是/boot單獨分區,則:


代碼:
sudo mount /dev/sda5 /mnt
sudo grub-install --boot-directory=/mnt /dev/sda


而後從新啓動便可。

(以上這兩句命令也能夠解決安裝ubuntu時grub安裝位置不對,沒有將grub安裝到/dev/sda,形成啓動時不出現ubuntu啓動項直接進入windows的問題,不過須要自行肯定sda5中的「5」改爲什麼數字。)
6,若是連linux核心文件都沒有,那麼,完全從新安裝吧

------------------------------------------------------------------------------------------------------------------------------------

因爲在rescue模式下,只有少許的基本命令可用,必須經過必定的操做才能加載正常模塊,而後進入正常模式。

rescue模式下可以使用的命令有:set,ls,insmod,root,prefix(設置啓動路徑)

先假設grub2的核心文件在(hd0,8)分區,再來看看怎樣從 rescue模式進入從(hd0,8)啓動的正常模式(normal)。

在 rescue模式下search命令不能用,對不清楚grub2文件處於哪一個分區的,能夠用ls命令查看,好比

ls (hd0,8)/ 查看(hd0,8)分區根目錄,看看有沒有boot文件夾

ls (hd0,8)/boot/ 查看(hd0,8)分區的/boot目錄下文件

ls (hd0,8)/boot/grub/ 查看(hd0,8)分區/boot/grub目錄下文件

經過文件查看,能夠肯定 grub2核心文件處於哪一個分區,接下來就能夠進行從rescue到normal的轉變更做:

先 ls 看看分區,根據分區列表,猜下 / 分區的編號再 ls (hd0,x)/ 看分區目錄下文件肯定找到 / 分區,不對的話繼續找。找到 / 分區的 (hd0,x) 繼續

grub rescue>root=(hd0,x)

grub rescue>prefix=/boot/grub

grub rescue>set root=(hd0,x)

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

grub rescue>insmod normal

rescue>normal -------->若出現啓動菜單,按c進入命令行模式

rescue>linux /boot/vmlinuz-xxx-xxx root=/dev/sdax

rescue>initrd /boot/initrd.img-xxx-xxx

rescue>boot

內核版本號 -xxx-xxx能夠按Tab鍵查看後再手動補全。
相關文章
相關標籤/搜索