Ubuntu10.04修复grub

从上大学开始就接触Linux了,虽然Windows有诸多问题,但是也不得不搞个Windows与Linux的共存。但一直困扰我的问题,就是如何在重装Windows以后,找回grub启动菜单,免得Linux系统“失踪”。

 

看了不少资料,既有网上的,也有《鸟哥Linux私房菜》,学到了不少东西,现在记录下来,以备今后遗忘。

 

参考网上资料:

http://blog.csdn.net/eric_jjc/archive/2010/07/11/5682210.aspx

http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=268102&start=0

 

不论是网上的资料,还是《鸟哥Linux私房菜》上的方案,都有特殊性,似乎不是万试万灵的,不同的情况,不同的版本下都会略有出入。

仅针对Ubuntu来说,假设现安装了Linux,后安装了Windows。重新启动后,直接进入的就是Windows系统,这是因为Windows强制将自己的启动器写入了磁盘的MBR中,何其“霸道”。因此,我们需要找回遗失的grub。

 

假设我们的安装顺序是:先Ubuntu10.04,然后Windows7。

 

分区情况如下:

 

Ubuntu10.04修复grub_第1张图片

 

其中

sda1分区,主分区,装的是Windows7,即Windows的C盘;

sda2分区,主分区,是Windows的D盘;

sda3分区,主分区,对应着/boot;

sda5分区,逻辑分区,对应着/;

sda6分区,逻辑分区,对应着/home;

sda7分区,逻辑分区,对应着/var;

sda7分区,swap交换分区。

 

 

 

当需要开始修复grub的时候,使用Ubuntu安装盘作为LiveCD,进入“试用模式”,打开终端:

输入sudo -i,进入root模式,省的重复输入sudo;

再root模式下,输入apt-get install grub-pc,以安装这个程序。

 

注意在Ubuntu10.04下是grub-pc,如果安装的是grub的话,那么经过后续步骤,重新启动的时候会进入grub的命令行模式,使用kernel,initrd,boot命令启动的时候,总是出错。因此需要格外注意。但是在Ubuntu9.04中就只要安装grub就可以。

 

Ubuntu10.04修复grub_第2张图片

 

 

 

下面正式将grub重新装回/boot目录下。由于现在是用LiveCD启动的,相当于是用另外一套Linux启动的。那么要想把grub安装回原来的Linux的/boot目录下(即sda3中),就需要重新挂在它。

 

默认的情况下,grub-install /dev/sda命令就是将grub程序安装到根目录/对应的/boot目录下,但是现在是用LiveCD启动的,我们必须要借助--root-directory参数指定根目录。

 

首先,将原来的根目录,挂在到LiveCD的Linux的某个挂在点上。如果原来的/boot是在一个独立的分区上的话,还要将那个分区挂在到对应的挂在点上。然后是用grub-install命令和--root-directory参数,安装grub。

 

如果安装成功,则会有提示。

Ubuntu10.04修复grub_第3张图片

 

 

接着重新启动。

 

 

重启后,如果是Ubuntu10.04的话,则默认进入Linux系统,不过很可能回提示根目录或者boot目录什么的有问题,直接ignore就OK。而Ubuntu9.04则不会,直接出现grub菜单,无需后续操作。

 

 

接着说Ubuntu10.04的后续操作。登入硬盘上的Linux系统。

Ubuntu10.04修复grub_第4张图片

 

 

在终端中,输入sudo update-grub,则可自动重建grub菜单。

Ubuntu10.04修复grub_第5张图片

 

 

提示完成后,重新启动,就出现grub菜单了。至此大功告成。

 

 

附注:

1. 《鸟哥Linux私房菜》里提到的/boot/grub/menul.lst,在Ubuntu中似乎没找到。

2. grub的setup命令有用,但安装后进入grub命令行后,即使找到kernel和initrd文件,启动的时候也会因为模块加载不完全,而报错。

 

你可能感兴趣的:(windows,linux,ubuntu,终端,2010,磁盘)