师兄的电脑重装了Windows把Ubuntu 11.10的Grub破坏了,虽然知道这个可以找回来,但还是费了一点小周折。
网上介绍的修复Grub的方法貌似都是针对比较老的版本,记下来我这里的修复过程,以方便以后再遇到类似问题。
我手上刚好有一个刚做好的Ubuntu 13.04的USB启动盘,就拿它来修复吧。
-
第一个问题,比较新的Ubuntu镜像好像都没有修复模式,必须要先进入Live系统利用里面的终端才行。
-
然后,坑爹的是貌似镜像里没有自带grub程序,需要先apt-get安装一个grub。装好后敲
sudo grub进入grub模式。 -
然后是找到原来的root分区在哪儿,我这里图方便直接打开Live系统的文件管理器挨个点击挂载各个分区看了一下。在终端中敲
mount可以列出当前已经挂载的分区,然后找到root分区的路径,形如/media/abcd......神马的,最好到磁盘管理器里面去看一下这个分区的名字是什么(形如/dev/sda8)。 -
将原来root分区内的grub重新安装到整个磁盘(/dev/sda)的MBR记录中:
grub-install –root-directory=/media/abcd…. /dev/sda
-
照理来讲
reboot后就应该进入原来的Ubuntu,但是我却还是停在了Grub>这里。查了一下,先用命令find /boot/grub/stage1看一下/boot在哪个分区, 然后根据返回的结果(如(hd0,7))设置一下根目录root(hd0,7) setup(hd0)
我不是很确定这个步骤是否需要,姑且敲一下吧。
-
然后就是手动载入内核,根据前面得到的root分区的名字
/dev/sda8,敲入一下命令载入内核并启动:kernel /vmlinuz-[version] root=/dev/sda8 initrd /initrd-[version].img boot
那个版本神马的敲tab键就行了。
-
进入系统后记得更新一下grub以找到新装的Windows
sudo update-grub
步骤貌似比其他人的长一些,没办法,我也没想着去再试一下哪些步骤可以有可以没有。
PS.
-
如果开机后进入的是
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 -
如果安装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