怎样修复grub开机引导(grub rescue)

很多时候,特别是在linux调整分区后,开机重启时会出现
error : unknow filesystem
grub rescue>
的字样,系统就是进不去。这表示你的grub2的配置文件坏了……
由于分区调整或分区UUID改变造成grub2不能正常启动,从而进入修复模式了(grub rescue),也称救援模式。

    在救援模式下只有很少的命令可以用:set  ,  ls , insmod , root , prefix

    (1)set  查看环境变量,这里可以查看启动路径和分区。
    (2)ls   查看设备
    (3)insmod  加载模块
    (4)root  指定用于启动系统的分区,在救援模式下设置grub启动分区
    (5)prefix 设定grub启动路径

具体修复步骤如下:
1、查看分区:grub rescue> ls 回车
会出现如下字样:
(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1)
注:上面是我的分区设备,每个人可能不一样,但原理都是一样的。

   2、寻找ubuntu所在分区:
       (就是寻找你的Linux系统是装在以上哪个分区里)
         grub rescue> ls (hd0,msdos1)/
        若出现unknown filesystem字样,则尝试下一个
        ……
        若出现的是你的ubuntu主文件夹下的文件夹和文件的名字,那就是的要找的分区了。

    3、修改启动分区:
         (假如你找到的启动分区是hd0,msdos8)

     grub rescue>root=(hd0,msdos8)
     grub rescue>prefix=/boot/grub                         //grub路径设置
     grub rescue>set root=(hd0,msdos8)
     grub rescue>set prefix=(hd0,msdos8)/boot/grub
     grub rescue>insmod normal                            //启动normal启动

     grub rescue>normal

    之后你就会看到熟悉的启动菜单栏了

4、进入命令行启动ubuntu

     进入系统启动选项界面后还是进不去,

   因为你还没有真正的修改grub,这个要到ubuntu里修改

进入系统启动项界面后,按C进入命令行模式

    grub >set root=hd0,msdos8

    grub >set prefix=(hd0,msdos8)/boot/grub

    grub >linux /vmlinuz-xxx-xxx root=/dev/sda8 //里边的xxxx可以按Tab键,如果有acpi问题,在最后加一句acpi=off
    grub >initrd /initrd.img-xxx-xxx
    grub >boot

   这样就可以进入了


   5、进入ubuntu修复grub

在终端里运行 sudo update-grub

                                    sudo grub-install /dev/sda


   6、重启,搞定!!

注:我当时只是修改了1~3步骤,然后在菜单栏就可以进入系统了,且一切正常。

   可惜,在重启时,系统就只有一个光标在左上角不停的闪,咋也进不了系统。后来开机按F2,开机启动项改为硬盘启动就好了。

有遇到过这样安装不成功的,在GRUB2手册中有另外的重装grub2 到MBR 的方法,记录一下:

[html] view plain copy

此方案安裝會使用 chroot 指令來存取受損系統的檔案。  
一旦執行了 chroot 指令,LiveCD 會將損壞系統的 / (根目錄)當作是目前自己所使用的。  
在 chroot 環境中執行的指令會影響受損系統的檔案系統,而不是 LiveCD 的。  
1. 開機進入 LiveCD 桌面(Ubuntu 9.10 或更新版)。注意此 LiveCD 必須要與您現在欲修復系統的版本相同 - 無論 32-bit 或是 64-bit(否則 chroot 會失敗)。  
2. 開啟終端機 - 應用程式,附屬應用程式,終端機。  
3. 確認您的標準系統分割區 - (選項是小寫的「L」)  
sudo fdisk -l  
若您不確定,執行  
df -Th  
找到正確的磁碟容量及 ext3 或 ext4 格式。  
4. 掛載您的標準系統分割區  
用正確的分割區替換:sda1, sdb5 等等。  
sudo mount /dev/sdXX /mnt #範例:sudo mount /dev/sda1 /mnt  
5. 若您有獨立的 /boot 分割區:  
sdYY 是 /boot 分割區的位置(例如 sdb3)  
sudo mount /dev/sdYY /mnt/boot  
6. 掛載重要的虛擬檔案系統:  
sudo mount --bind /dev /mnt/dev  
sudo mount --bind /dev/pts /mnt/dev/pts  
sudo mount --bind /proc /mnt/proc  
sudo mount --bind /sys /mnt/sys  
7. Chroot 至您的標準系統裝置:  
sudo chroot /mnt  
8. 若系統中沒有 /boot/grub/grub.cfg 或其內容不正確,使用以下指令重建  
update-grub  
9. 重新安裝 GRUB 2:  
以正確裝置替換 - sda, sdb, 等等。不要指定分割區號碼。  
grub-install /dev/sdX  
10. 驗證安裝(使用正確的裝置,例如 sda。不要指定分割區):  
sudo grub-install --recheck /dev/sdX  
11. 退出 chroot:按下鍵盤之 CTRL-D  
12. 卸載虛擬檔案系統:  
  
sudo umount /mnt/dev/pts  
sudo umount /mnt/dev  
sudo umount /mnt/proc  
sudo umount /mnt/sys  
若您有掛載獨立的 /boot 分割區:  
sudo umount /mnt/boot  
13. 卸載 LiveCD 的 /usr 目錄:  
sudo umount /mnt/usr  
14. 卸載最後的裝置:  
sudo umount /mnt  
15. 重新開機。sudo reboot  

另外常用的就是,无法启动到grub界面,这个时候就需要另外的引导了,网上很多的方法是使用ubuntu的安装光盘,也就是livecd,

我常用的就是U盘,用老毛桃加载一个ubuntu 的iso 制作一个ubuntu启动U盘,然后bios选择U盘启动,

选择 try running ubuntu,不选 install 选项

这样就运行了我们制作在U盘上面的ubuntu系统,可以以这个为媒介来修改本机上其它的系统文件,像上面提到的 先mount 上那些分区:

sudo mount /dev/sdxx /mnt

可先使用 sudo fdisk -l 命令查看分区情况,选择对应的

如果要修改对应内容 使用 chroot 切换 完了之后 ctrl+d退出

我这边是13.04 , grub版本为:

[html] view plain copy

jscese@jscese-H61M-S2P:~$ grub-install -v  
grub-install (GRUB) 2.00-13ubuntu3  

在这个情况下可以使用如下命令将正确的grub 安装到 MBR:

[html] view plain copy

grub-install --root-directory=/mnt /dev/sda  

我这的sda 为第一块硬盘

症状:
开机显示:GRUB loading
error:unknow filesystem
grub rescue>

原因:

由于操作者不知道grub2分为两部分,一部分(一般情况下)写在了mbr上,另一部分写在了某个分区的/boot/grub目录(如果 /boot单独分区,则直接写在对应分区的/grub目录)里面。由于上述操作,致使grub2的mbr里面的那一部分找不到/grub目录里面的那一部 分了(或者那一部分已经删除了)。

你可能感兴趣的:(linux-disk)