重新安装了ubuntu12.04后,Ubuntu开机就出现:
error:no such partition
grub rescue >
一般情况下,出现这类错误是引导文件出错或者系统找不到引导文件,而系统并没有坏,所以不用重新安装系统。需要进行如下的设置。
一 grub介绍
grub是一个引导管理程序,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
[引导过程]
由硬盘启动时,BIOS通常是转向第一块硬盘的第一个扇区,即主引导记录(MBR)。装载GRUB和操作系统的过程,包括以下几个操作步骤:
(1)装载记录
基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。
(2)装载Grub
这第二引导装载程序实际上是引出更高级的功能,即装载grub,它同时引导机器里的多个系统,如win7和ubuntu12.04, 以方便允许用户选择装载一个特定的操作系统。
(3)装载系统
当用户选择某个系统后,如选择ubuntu12.04, 即选择了linux内核。GRUB把机器的控制权移交给操作系统。这样就进了选择的系统的启动界面。windows的启动时现实的经典图标还记得吗?
IDE硬盘用hd开始,SCSI硬盘用sd开头。软盘用fd开头。
windows下分区命名和linux不大一样。是从0算起。
(hd0,0)。表示C盘。(hd0,4)。表示D盘。
这里表示第一个主分区是c盘,且它的第一个逻辑分区是d盘, 如果D盘也是主分区,应该写成hd0,1)
由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。
在Linux系统中,如ubuntu,(hdx,y)中的y是从1开始计数的。第一逻辑分区用(hd0,5),第二逻辑分区用(hd0,6)来表示
由上面的内容可知,这是grub的命令行接口
1 检查当前设置:grub rescue> set 显示
我的机器显示的结果:
prefix=(hd0,msdos3)/boot/grub //表示grub的位置
root=hd0,msdos3 //根root位置
grub指示的位置是(hd0,msdos3)/boot/grub,跟用户是hd0,msdos3
grub rescue>ls
ls命令会列出所有磁盘分区信息,如我的系统列出的信息如下:
(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)
很明显我的机器里没有(hd0,msdos3)分区,所以系统找不到引导记录,启动不了机器。
grub rescue>ls (hd0,msdos9)/boot/grub
假设我们试到(hd0,msdos9)时,成功显示了文件内容.
2 设定root
grub rescue>set root=(hd0,msdos9) //括号里分区为上一步尝试成功的分区,即linux grub 所在分区
grub rescue>set prefix=(hd0,msdos9)/boot/grub
3 启动模式设定,这里选择正常启动。还记得我们启动windows时的“正常启动”,“进入安全模式启动”选项吗?
正常启动:
grub rescue>insmod /boot/grub/normal.mod
网上有的教程是insmod normal.mod,这个是一种相对路径,我没有尝试去验证,感兴趣的可以试试,我给出的是绝对路径。
在我的机器ubuntu12.04 上测试了一下,使用insmod normal.mod会出现错误。
这是grub rescue会高亮,进去第四步。4 正常启动
grub>normal
进入Linux系统后,在命令行里输入 sudo update-grub
6 使用sudo fdisk -l 查看启动盘位置,使用下面指令安装grub sudo grub-install /dev/sda9 //sda是你的启动磁盘
5 修复grub(在我的机器上成功修复,ubuntu12.04)
(1)更新grub
sudo update-grub
(2)安装grub
(2)安装grub
sudo grub-install /dev/sda //sda是主分区,sda5,sda6,sda7......是逻辑分区
6 至此,系统能够引导ubuntu,但是不能够引导原来的win7,解决办法
(1)进入 /boot/grub/ 下面查看grub.cfg 和menu.lst
cd /boot/grub
(2) 发现grub.cfg 里面有win7的记录,但是没有menu.lst里面没有,所以没有系统启动时没有看到win7的选项,这里可以看出,menu.lst是一个呈现给用户的引导菜单,只要我们将win7加入到这个菜单中就可以了
(3)往menu.lst里面添加引导记录
参照网上教程
转引请注明:http://blog.csdn.net/u012606927/article/details/17929369