我的三星上网本自带一个系统还原功能,安装grub的时候它所在的分区都会被检测到,并被显示为windows vista,不过比较悲剧的是一旦你在启动的时候选了这项,mbr就会被重写,然后就引导不了任何系统了,永远处于开机重启的死循环里。
装完系统后一直懒得去修改grub.cfg,这次去旅游带上了上网本,借给别人用的时候忘了叮嘱别人不要选那一项,结果悲剧发生了。
好在有强大的ubuntu livecd,让我本本不至于变成废铁,下面就记录一下我修复grub2的过程吧:
过程跟网上面9.10的方法基本一致,而8.10的方法已经不再适用了。首先用livecd启动,然后在终端下切换到root权限:(你不嫌麻烦的话可以跳过这一步,在一下的每一步前面加sudo)
sudo -i
接下来找一找你ubuntu10.04所在分区,用:
fdisk -l
我的部分输出如下:
Device Boot Start End Blocks Id System
/dev/sda1 1 914 7341673+ 12 Compaq diagnostics
/dev/sda2 * 915 4967 32554359 7 HPFS/NTFS
/dev/sda3 4968 8006 24410767+ 83 Linux
/dev/sda4 8007 19457 91980126+ 5 Extended
/dev/sda5 8007 14085 48829536 83 Linux
/dev/sda6 14086 14328 1951866 82 Linux swap / Solaris
/dev/sda7 14329 14344 128488+ 83 Linux
/dev/sda8 18485 19457 7815591 b W95 FAT32
/dev/sda9 14345 18308 31839232 83 Linux
/dev/sda10 18308 18484 1413120 82 Linux swap / Solaris
内容有点多,因为我是3系统- -!,而我ubuntu10.04根目录所在的分区就是/dev/sda9,如果你不确定的话就找id为83的吧。
下面挂载原系统的根目录:
mount /dev/sda9 /mnt
将/dev/sda9挂载到了/mnt下,当然你也可以选其他地方,这里注意如果你有单独为/boot分区的话,要单独挂载一次/boot,比如说如果你原来的/boot挂载到/dev/sda12上了,那个你这里要再输入mount /dev/sda12/mnt/boot。我这里没有把它单独分出来,所以就不需要了。
下面是最后一步了:
grub-install --root-directory=/mnt /dev/sda
这里我刚开始的时候自做主张的写成了grub-install –root-directory=/mnt /dev/sda9,同学们不要学我,- -!
如果看到
Installation finished.No Error Reported.
就表示已经成功啦!重启看看,熟悉的grub引导画面是不是又回来了?
最后赞一下强大的man,第一次修复grub,基本靠man就能解决了。
FIX:
今天同学装Win7把mbr给重写了,我用这个方法也无效,开机黑屏,后来在以上步骤的基础上再加上以下步骤才成功:
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
chroot /mnt update-grub
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
reboot
其实为了保险起见,我在重启前又grub-install了一下,不过这次不用跟–root-directory参数。
我也不确定update和install的正确顺序,不过能成功引导就是了,呵呵