如何修復GRUB2


如果你想進一步瞭解grub2方面的操作,請閱讀:GRUB2指南中文版

如果你不正確地編輯了系統所在分區(比如使用Windows下的分區工具)或者是新安裝了Windows,硬盤的分區表中的grub可能會破壞導致電腦無法開機。網上能搜到不少關於修復grub的文章,不過很多針對的是過時的grub1,而不是常見的grub2。我這兩天正好玩爆了兩臺電腦的grub2,修復之後就把方法記在這裏。

如何判斷電腦上使用的是grub1還是2?/boot/grub下如果有個grub.cfg那麼就是2了。如果有menu.lst就是1.

方法一(針對Ubuntu)、使用DVD。DVD啓動的時候有一個“修復損壞的系統”選項,跟着來就行。配置過程看起來有點像安裝的過程,不過不是重裝一遍。AlternateCD我沒有使用過,不知道是不是有這個功能。

方法二、使用LiveCD(或USB)

1. 使用LiveCD啓動電腦。任何裝有grub2的系統的LiveCD都可以。對於Ubuntu,9.10以及之後的版本使用的都是grub2,因此最好使用9.10或更新一些的光盤。對於使用軟盤的同學(現在還有嗎?)有一個同時適合軟盤、光盤、優盤的專門用來修復grub的鏡像:SuperGrubDisk,可以試試。

2. 打開終端。位置在應用程序(Applications)——附件(Accessories)——終端(Terminal)。也可以按Ctrl+Alt+F1進入字符終端。在字符界面下按Alt+F7可以回到圖形界面。

3. 判斷系統的標準分區

系統後,把原來的系統所在分區(假設在/dev/sda1)掛載

·········10········20········30········40········50········60········70········80········901.sudo mount /dev/sda1 /mnt

如果/boot單獨分了出來(我沒有單獨分。這裏假設在/dev/sda2吧),也要掛上

·········10········20········30········40········50········60········70········80········901.sudo mount /dev/sda2 /mnt/boot

另外

·········10········20········30········40········50········60········70········80········901.sudo mount --bind /dev /mnt/dev

然後使用chroot命令

·········10········20········30········40········50········60········70········80········901.sudo chroot /mnt

注意這裏往下是以以前的root運行以前的系統。

如果僅僅是grub.cfg不正確導致無法啓動,此處只要再次生成grub.cfg就可以了

·········10········20········30········40········50········60········70········80········901.update-grub

如果是mbr中的grub被破壞了,需要重新寫入,這裏假設你裝到第一個硬盤的mbr下頭去(/dev/sda,這是推薦的安裝位置)

·········10········20········30········40········50········60········70········80········901.grub-probe -t device /boot/grub·········10········20········30········40········50········60········70········80········901.grub-install /dev/sda·········10········20········30········40········50········60········70········80········901.grub-install --recheck /dev/sda

到這裏就算結束了。如果你的電腦上有裝有Windows的分區並且這時沒有掛載進去的話,啓動菜單裏是沒有Windows的。沒關係,你把系統正常啓動之後再運行一次sudo update-grub就搞定了。

方法三、grub-rescue

grub遭到破壞有可能會自動進入一個grub-rescue界面。先使用ls命令

·········10········20········30········40········50········60········70········80········901.grub rescue> ls

我的結果是(hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5)...

不知道爲什麼是從後向前。另外這裏的msdos並不是指分區文件系統格式,而是指hd0的分區表使用了mbr。

這時就需要記得自己/boot(沒有/boot的話就是/)在哪個分區了。不記得的話還是用Live系統看看吧。

我的在(hd0,msdos6)上。

·········10········20········30········40········50········60········70········80········901.grub rescue >set root=(hd0,msdos6)·········10········20········30········40········50········60········70········80········901.grub rescue >set prefix=(hd0,msdos6)/boot/grub·········10········20········30········40········50········60········70········80········901.grub rescue> insmod normal·········10········20········30········40········50········60········70········80········901.rescue grub> normal

就起來了。

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