http://blog.chinaunix.net/uid-22915173-id-229241.html
我的linux在调整分区后,出现了grub rescue>
这表示grub2的配置文件坏了,由于分区调整或分区UUID改变造成GRUB2不能正常启动,从而进入修复模式(grubrescue)也称救援模式。
在救援模式下只有很少的命令可以用:
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 textroot=/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 #启动
测试中正常启动并出现登录对话框。
双系统,
win7下一键
Ghost,进入
grubrescue的解决方法
本人安装的是
win7+ubuntu10.10,硬盘直接安装。因为
win7下装了几个大软件,所以决定一键
Ghost备份一下,结果重启之后,就进入了
grubrescue界面
:
error:unknown filesystem
grub rescue>
研究了半天,才解决这个问题。先说说是怎么回事。
安装
ubuntu时,启动是用
grub2进行启动。我的
win7在
C盘,
Ubuntu空间是从
D盘里分出来的。我们知道,每次系统启动时都是先进入
grub,也就是先在
ubuntu的启动目录里选择进入哪个系统,如果按分区来讲,
grub2在
(hd0,msdos7)也就是我的
ubuntu所在的分区。那么启动时
root应该设在
(hd0,msdos7),可一键
ghost会修改启动,它把
root改在
(hd0,msdos9),这是个
windows分区,也就是
NTFS分区,
ubuntu是不能识别这种文件系统的,所以就有了
error:unknownfilesystem,这种情况下自然不能启动,那么
grub2就会启动
grubrescue模式,就是修复模式。那么我们要做的就是把
grub重新指向
(hd0,msdos7)。
下面是具体步骤:
①查看分区
因为每个人的分区不一样,所以我们要查看分区
,用
ls指令
grubrescue>ls
回车后,就会出现
(hd0)(hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5)(hd0,msdos1)
grubrescue>
注:我用的是
grub2,对于
grub用户,分区前没有
msdos字样
上面是我的分区,每个人的不一样。
grubrescue>set回车
prefix=(hd0,msdos9)/boot/grub
root=hd0,msdos9
从上面可以看出来现在我的系统是从
(hd0,msdos9)里启动的。
那么怎么知道
ubuntu在哪个分区呢?进入第二步
②寻找ubuntu所在分区
这一步我们要一个一个的试,
还是用
ls指令
先试下在不在(
hd0,msdos8)里边
grubrescue>ls (hd0,msdos8)
回车会发现,不是,还是
unknownfilesystem
接着来
。。。。。。。。。
当我试到
(hd0,msdos7)的时候,可以看到一下子多了很多字,这些就是我
ubuntu主文件夹下的文件夹和文件的名字。
OK,找到分区了!
③修改启动分区
grubrescue>root=(hd0,msdos7)
grub rescue>prefix=/boot/grub //grub路径设置
grubrescue>set root=(hd0,msdos7)
grub rescue>setprefix=(hd0,msdos7)/boot/grub
grub rescue>insmodnormal //启动normal启动
grubrescue>normal
依次敲入上面的指令,是不是看到熟悉的启动菜单了?选win7后,一键Ghost就开始备份系统了。别高兴太早,一切还都没开始呢。如果你不是因为一键Ghost问题进入grubrescue,可以直接跳到第⑤步
④再来一遍
当你等着一键
Ghost备份完系统,重启后,你发现还是
error:unknown filesystem
grub rescue>
别着急,再把前三步进行一遍就可以了
⑤进入命令行启动Ubuntu
进入系统启动选项界面后,你发现,无论点那个还是进不去,这是因为你还没有真正的修改
grub,这个要到
ubuntu里修改
进入系统启动项界面后,按
C进入命令行模式
grub>set root=hd0,msdos7
grub>set prefix=(hd0,msdos7)/boot/grub
grub>linux /vmlinuz-xxx-xxx root=/dev/sda7
//里边的xxxx可以按Tab键,如果有acpi问题,在最后加一句acpi=off
grub>initrd /initrd.img-xxx-xxx
grub >boot
Ubuntu正常启动了吧?
⑥进入ubuntu修复grub
大功就要高成了
进入
Ubuntu后
,修复
grub
在终端里运行
sudoupdate-grub
重建grub到第一硬盘mbr
sudogrub-install /dev/sda
好啦,重启,一切搞定!