恢复被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

大功告成,重启。

原文地址:https://www.cnblogs.com/duanguyuan/p/3618980.html