修复Ubuntu Grub记

2013年08月23日

师兄的电脑重装了Windows把Ubuntu 11.10的Grub破坏了,虽然知道这个可以找回来,但还是费了一点小周折。

网上介绍的修复Grub的方法貌似都是针对比较老的版本,记下来我这里的修复过程,以方便以后再遇到类似问题。

我手上刚好有一个刚做好的Ubuntu 13.04的USB启动盘,就拿它来修复吧。

  1. 第一个问题,比较新的Ubuntu镜像好像都没有修复模式,必须要先进入Live系统利用里面的终端才行。

  2. 然后,坑爹的是貌似镜像里没有自带grub程序,需要先apt-get安装一个grub。装好后敲sudo grub进入grub模式。

  3. 然后是找到原来的root分区在哪儿,我这里图方便直接打开Live系统的文件管理器挨个点击挂载各个分区看了一下。在终端中敲mount 可以列出当前已经挂载的分区,然后找到root分区的路径,形如/media/abcd......神马的,最好到磁盘管理器里面去看一下这个分区的名字是什么(形如/dev/sda8)。

  4. 将原来root分区内的grub重新安装到整个磁盘(/dev/sda)的MBR记录中:

    grub-install –root-directory=/media/abcd…. /dev/sda

  5. 照理来讲reboot后就应该进入原来的Ubuntu,但是我却还是停在了Grub>这里。查了一下,先用命令find /boot/grub/stage1看一下/boot在哪个分区, 然后根据返回的结果(如(hd0,7))设置一下根目录

    root(hd0,7) setup(hd0)

我不是很确定这个步骤是否需要,姑且敲一下吧。
  1. 然后就是手动载入内核,根据前面得到的root分区的名字/dev/sda8,敲入一下命令载入内核并启动:

    kernel /vmlinuz-[version] root=/dev/sda8 initrd /initrd-[version].img boot

那个版本神马的敲tab键就行了。
  1. 进入系统后记得更新一下grub以找到新装的Windows

    sudo update-grub

步骤貌似比其他人的长一些,没办法,我也没想着去再试一下哪些步骤可以有可以没有。

PS.

  1. 如果开机后进入的是Grub rescue模式,那么不会有root命令,照如下方式手动引导系统

    ls set root=(hd0,8)/boot insmod linux
    linux (hd0,8)/boot/vmlinuz-xxx-generic
    initrd (hd0,8)/boot/initrd.img-xxx-generic
    boot

  2. 如果安装Grub时出现错误warn: Sector 32 is already in use by FlexNet; avoiding it. This software may cause boot or other problems in future. Please ask its authors not to store data in the boot track. Installation finished.可以考虑重写zero设备的头部

1.备份MBR

    sudo dd if=/dev/sda of=~/first_63_sectors bs=512 count=63

2.清空sector number 32

    sudo dd if=/dev/zero of=/dev/sda bs=512 count=1 seek=32

3.重装grub

    sudo mount /dev/sda* /media/sda*
    sudo mount --bind /dev /media/sda*/dev
    sudo mount --bind /proc /media/sda*/proc
    sudo mount --bind /sys /media/sda*/sys
    sudo chroot /media/sda*
    sudo update-grub