恢复被win7覆盖的Ubuntu Grub
情景:本本装有Ubuntu 12.04 + Win7 32。重装Win7 64后,Ubuntu启动菜单被覆盖。
恢复的方法有多种,思路都一样。第一步,进入Linux环境;第二步。修改Grub使其重新覆盖windows的MBR。
我使用的方法为easyBCD。
步骤:
在win7上安装easyBCD;打开该软件后如下图:
可以看到只有一个启动项。我们再加一个引导Linux的启动项,如下图:点击添加新条目->NeroGrub->安装。
安装成功后在C盘会看到以下NeoGrub文件和NST文件夹。
重启,选择NeoGrub,然后便能进入grub。
到这里之后,进行下一步操作之前,我们先要明白自己的硬盘分区是什么结构。以我的为例:
右击计算机->管理->磁盘管理,如下图:
(备注:以sd表示磁盘,磁盘0表示为sda,若有磁盘1,则表示为sdb,磁盘2表示为sdc……)
系统保留分区为sda1,C盘系统盘为sda2,DEF三个逻辑分区合起来为一个扩展分区,叫sda3,然后具体的D盘为sda4,E盘为sda5,F盘为sda6,Linux分区为sda7,linux交换空间为sda8。
但是在Ubuntu 下看到的跟这个略为不同:
用fdisk -l命令查看:
可以看见区别么?少了sda4。我在网上查资料,说是linux约定sda1~4为基本分区(主分区+扩展分区),所以不可能把sda4这个称呼给D盘,因为D盘是逻辑分区。
另一个区别是linux把自己的系统分区和交换空间也放在扩展分区里的。
好,说到这里,我们继续恢复Ubuntu Grub的步骤。
通过以上的铺垫,我们知道了Linux系统分区位于sda8。不知道也没关系,一个个分区试也能试出来。
grub> root(hd0,x) grub> ls 轮换使用上述两个命令,直到看到了linux系统下的文件夹(如lost+found,etc等等),此时的(hd0,x)即是linux分区。另一个区别是linux文件系统格式为ext2(或者ext3、ext4)。windows分区为ntfs。
之前的操作到了重启,选择NeoGrub启动菜单进入grub命令行,用root(hdm,n)命令选择m块硬盘上的n分区。对我的机器来说就是:
grub> root(hd0,7)
有同学可能会纳闷了,之前不是说在sda8分区上吗,怎么选择的是(hd0,7)啊。这是因为hd(hard drive)是从0开始计数的,而sda从1开始。从hd0也能看出hd是从0的。hd0就表示你的第一块硬盘。下一步:
grub> kernel /boot/vmlinuz-x.x.x-xx-generic root=/dev/sda8
vmlinuz-x.x.x-xx-generic中的x为kernel的版本,可以按Tab键自动补全,也可以用 ls /boot/ 命令查看一下。下一步:
grub> initrd /boot/initrd.img-x.x.x-xx.generic
最后一步:
grub> boot
这样就能进入Ubuntu 了。
进去之后,修改grub,用grub覆盖windows 7的MBR:
$ sudo update-grub
$ sudo grub-install /dev/sda
大功告成,重启。