Ubuntu与Win7双系统下,改变分区导致error:no such partition grub rescue>
我电脑装的是windows和ubuntu双系统。在windows下改变分区,包括新建分区、删除分区、合并分区等操作,会造成Ubuntu的grub找不到分区,以致进入grub rescue模式。这时可以通过如下方式恢复。摘抄http://www.cnblogs.com/ZhangZhifeng1988/archive/2011/12/19/2294018.html如下:
上网找了很多方法问题终于解决了。网上的内容大概有那么三种,一种是用LiveCD,只有挂了的这一台电脑,在公司里也懒得再下系统刻CD或U盘了。第二种方法是用SurerGrubDisk这个软件。在公司下了个,刻在U盘里,回来试了一下,不知道是没有刻好还是什么原因,屏幕闪了一会儿后,就卡在卡在Booting From USB device 那儿不动了。接下来是第三种方法,也就是解决问题的方法,不需要其它盘和设备,直接就能解决问题。下面是步骤:
首先是要找到自己的系统启动分区, (如果记得话就不用查了)通过输入ls命令可以列出所有的分区,如下所示:
Grub Rescue> ls
hd0 (hd0,msdos1) (hd0,msdos5) ...(hd0,msdos10)
接下来就是找到系统启动分区, 首先输入ls (hd0,1)系统会提示Unkonw Filesystem ,接着输入ls (hd0,5),连续输入下去,直到系统不再提示Unknow Filesystem
接下来的工作就是对启动的分区和路径进行设定,比如刚才找到的分区为(hd0,8) ,确定输入ls (hd0,8) 后,列表中是否有/grub这个文件夹,没有的话看是否有/boot 这个文件夹,一般grub在这个文件夹下,我的就是在这个文件夹下找到的。下面是输入的命令(//为注释的内容,不需要输入):
Grub Rescue> set root=(hd0,8) //刚找到的分区
Grub Rescue> set prefix=(hd0,8)/boot/grub //刚才找到的grub的目录
接下来就是加载普通模式模块,命令如下:
Grub Rescue> insmod /boot/grub/normal.mod //与刚才grub目录对应,normal.mod 文件在grub文件夹下面
加载完后,进入normal模式,命令如下:
Grub Rescue> normal
这时,系统就进入我们平时用的系统(模式)中了。然后我们要做的工作就时重新设定系统启动的分区和路径,因为我们的系统启动不了就是找不到路径引起的。这个过程有两个步骤,一个是对grub 进行更新,grub这时能够发现分区的改变,另一个是对启动分区重新设置。步骤如下:
打开终端,输入sudo update-grub 回车,命令运行完后,输入第二个命令:sudo grub-install /dev/sda //sda是启动磁盘
完成这些步骤以后,系统就完全恢复了。
他提示的是unknown filesystem,而我提示的是no such partition。下面另附另一笔记如下http://blog.sina.com.cn/s/blog_6c9d65a10100n76w.html
我的linux在调整分区后,出现了grub rescue>
这表示grub2的配置文件坏了,由于分区调整或分区UUID改变造成GRUB2不能正常启动,从而进入修复模式(grub rescue)也称救援模式。
在救援模式下只有很少的命令可以用:
set , ls , insmod , root , prefix
(1)set 查看环境变量,这里可以查看启动路径和分区。
(2)ls 查看设备
(3)insmod 加载模块
(4)root 指定用于启动系统的分区,在救援模式下设置grub启动分区
(5)prefix 设定grub启动路径
一、分区乱了,我不知道boot目录在什么地方了
ls #查看一下设备状态
如图:
grub rescue> ls (hd0,msdos3)
error: bad filename.
提示:错误的文件名,我在测试时发现必须是后面加一个/
grub rescue> ls (hd0,msdos3)/
./ ../ lost+found/
通过查看发现在(hd0,msdos1)/下有一个boot目录
二、设置grub的启动分区和路径
set root=(hd0,msdos1) #设置grub启动分区
set prefix=(hd0,msdos1)/boot/grub/ #设置grub启动路径
查看一下设置情况:
grub rescue> set
prefix=(hd0,msdos1)/boot/grub
root=hd0,msdos1
三、加载基本模块
insmod /boot/grub/normal.mod #加载基本模块
四、进入正常模式
normal #进入正常模式,出现菜单,如果加载grub.cfg(错误的)可能出现问题,按shift可以出现菜单,之后按c键进入控制台
进入正常模式后就会出现grub>这样的提示符,在这里支持的命令就非常多了。
五、引导系统
set root=(hd0,msdos1) #设置正常启动分区
linux /boot/vmlinuz .... ro text root=/dev/sda1 #加载内核,进入控制台模式
initrd /boot/initrd .... #加载initrd.img
boot #引导
六、更新grub
安装:grub-install /dev/sda
更新:update-grub
虚拟机实验:
经过上面的经历,我在虚拟机里进行了一下实验,加深巩固。
一、把boot目录移到别的分区
mv /boot/ /home/
这样重启之后就出现了
grub rescue>救援模式。
二、手动启动过程记录
ls (hd0,msdos6)/ #找到了boot所在的分区
set root=(hd0,msdos6) #设置grub启动分区
set prefix=(hd0,msdos6)/boot/grub/ #设置grub启动路径
insmod /boot/grub/normal.mod #加载基本的模块
normal #从救援模式进入正常模式
set root=(hd0,msdos6) #设置系统启动分区,在这里指向内核所在的分区
linux /boot/vmlinuz-2.6.35-22-generic ro text root=/dev/sda1 #加载内核
initrd /boot/initr ..... #加载initrd.img
boot #启动
测试中正常启动并出现登录对话框。