一直在使用Windows与Ubuntu双系统(估计很多的linuxer都是这种情况)。前一段时间重装了Win7,然后启动后便会不选择系统而直接进入Windows。原因其实蛮好想的,就是因为Windows的引导程序覆盖了MBR,启动时不再使用grub引导。至于修复方法,下面是一些总结。
这个问题具体的解决方案很多,但总体的思路其实就两步:第一步、想尽一切办法进入linux;第二步、在linux环境下用grub重新覆盖MBR。
对于第一步,我采取的方法是使用grub4dos。
首先下载grub4dos,这个随便一搜就有,估计很多人最初安装linux是就用到过。
解压后把grub.exe,grldr复制到C盘的根目录。注意,win7的C盘中原有一个grldr,是一个隐藏着的系统文件。在复制时一定要将它备份好,以后还会用得到。网上的解决方案说还要复制menu.lst,其实这个不是必须的,没有它也可以解决问题。
然后重启系统。因为使用了grub4dos的grldr,所以会由grub.exe来引导启动。引导时它会自动搜索menu.lst,找不到就会进入命令行模式。然后就要在grub4dos的命令行中启动linux。这个就比较容易了
grub>root (hd0,x) (x表示/boot分区的编号)
grub>kernel /vmlinuz-x.xx.xx-xx-generic root=/dev/sdaY (xx表示kernel的版本,可以用ls命令看一下/boot下面这个文件的名字是什么;而最后面的Y是/分区的编号。需要注意的是,采用(hdo,x)的表示方法时,编号是从0开始的;采取/dev/sdaY表示方法时,编号是从1开始的)
grub>initrd /initrd-x.xx.xx-xx-generic (xx和上一条命令里的一样,都是kernel版本)
grub>boot
这时候应该就可以进入linux了。
第二步要用grub覆盖MBR
这一步就更简单了。首先更新一下grub,使它可以识别win7
sudo update-grub
更新之后,输入命令覆盖MBR。具体的命令因grub版本而异。我用的系统为ubuntu10.10,使用grub2。它需要的命令只有一句话
sudo grub-install /dev/sda
如果提示安装成功,那就大功告成了。重启计算机,就又看到熟悉的grub选择界面了。
对于grub1(ubuntu9.10之前的版本使用),需要先将/挂载到/mnt。如果有/boot分区,再将/boot挂载到 /mnt/boot。然后执行命令
sudo grub-install –root-directory=/mnt /dev/sda
grub1的方法我没有实际尝试过,仅仅列在这里而已。