grub修復引導

前言

如果grub開機出現如下現象:

GRUB loading
error:unknow filesystem
grub rescue>

則說明grub引導錯誤,不能正常開機。

原因:

目前已經發現以下幾種操作導致此種問題:
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命令,找到linux的安裝在哪個分區:
    在 grub rescue>下輸入以下命令:
ls

會羅列所有的磁盤分區信息,比方說:

(hd0,1),(hd0,5),(hd0,3),(hd0,2)
  1. 然後依次調用如下命令: X表示各個分區號碼
    如果/boot沒有單獨分區,用以下命令:
ls (hd0,X)/boot/grub

如果/boot單獨分區,則用下列命令:

ls (hd0,X)/grub

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

3,如果找到了正確的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 單獨分區的命令:(這幾句有待驗證)

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之後,在終端執行:

sudo update-grub
sudo grub-install /dev/sda
(sda是你的硬盤號碼,千萬不要指定分區號碼,例如sda1,sda5等都不對)

重啓測試是否已經恢復了grub的啓動菜單? 恭喜你恢復成功!
4,如果找不到正確的/grub目錄,比如第3、4種誤操作,則嘗試尋找是否有linux核心文件,則依次調用如下命令: X表示各個分區號碼:
grub rescue>下,輸入:
如果/boot沒有單獨分區:

ls (hd0,X)/boot

如果/boot單獨分區,則:

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

然後重新啓動即可。

(以上這兩句命令也可以解決安裝linux 時grub安裝位置不對,沒有將grub安裝到/dev/sda,造成啓動時不出現ubuntu啓動項直接進入windows的問題,不過需要自行確定sda5中的“5”改成什麼數字。)
5,如果連linux核心文件都沒有,那麼,徹底重新安裝吧。

方法3:重裝grub2

1.使用深度操作系統啓動盤引導電腦啓動,待進入安裝界面後,按下Ctrl+Alt+F1,執行以下命令:

sudo service lightdm stop  
startx

稍等片刻,進入Live CD模式。

2.進入Live CD系統後打開終端,掛載需要修復系統的 / 掛載到/mnt,可以利用Gparted或者sudo fdisk -l命令查看,例如需要修復系統的/分區爲/dev/sda1,那麼終端執行:

sudo mount /dev/sda1 /mnt

如果需要修復系統的/boot單獨分了出來(假設爲/dev/sda2),也要掛上,終端執行:

sudo mount /dev/sda2 /mnt/boot

另外,將Live CD系統的/dev目錄同時掛在/mnt下,終端執行:

sudo mount --bind /dev /mnt/dev

然後使用chroot命令,將Live CD的 / 設爲以前的/,終端執行:

sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

安裝並刷新GRUB設置(主板爲BIOS引導),請終端執行:

grub-probe -t device /boot/grub
sudo grub-install /dev/sda
sudo grub-install --recheck /dev/sda
sudo update-grub

安裝並刷新GRUB設置(主板爲UEFI引導),請終端執行:

grub-probe -t device /boot/grub
sudo grub-install --target=$(ls /usr/lib/grub/ | grep efi)
sudo grub-install --recheck /dev/sda
sudo update-grub

掛載efi分區到/boot/efi
安裝grub-efi這個包grub-install –target=x86_64-efi –efi-directory=/boot/efi –bootloader-id=Deepin
sudo grub-mkconfig -o /boot/grub/grub.cfg
至此,修復完成,重啓電腦生效。

參考鏈接:

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