天天看點

如何修複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或更新一些的CD光牒。對于使用軟碟的同學(現在還有嗎?)有一個同時适合軟碟、CD光牒、優盤的專門用來修複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

就起來了。

繼續閱讀