本人安装了双系统win7, ubuntu , 其中ubuntu是最后安装的,在win7下通过EasyBCD引导安装的方式安装的,
由于误操作,在win7下通过分区助手 将原来新分配的NTFS格式的
分区合并到现有的NTFS分区,引起了分区改变,最后重启电脑的时候发现 之前的ubuntu/win7切换不了,
系统不能正常启动,一开机就会进入如下命令行模式
error: file'/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>
本来正常是应该进入 ubuntu的系统切换引导界面的。
在查阅了需多资料后,其中主要参考: http://blog.sina.com.cn/s/blog_6c9d65a10100n76w.html
以下是解决办法:
首先需要说明的是 在救援模式下只有很少的命令可以用:
set , ls ,insmod , root , prefix
以下是命令的说明
(1)set 查看环境变量,这里可以查看启动路径和分区。
(2)ls 查看设备
(3)insmod 加载模块
(4)root 指定用于启动系统的分区,在救援模式下设置grub启动分区
(5)prefix 设定grub启动路径
具体操作如下:
1) 先输入ls 回车,查看显示的内容
grub rescue> ls
如 (hd0) (hd0,msdos12), (hd0,msdos11), (hd0,msdos10),…(hd0,msdos9)…(hd0,msdos1)
2) 然后找出哪个盘安装的是ubuntu系统
grub rescue> ls (hd0,msdos12)
….
grub rescue> ls (hd0,msdos1)
Ubuntu命令行下对windows文件系统是不识别的,所以在执行如上某些命令时会返回内容:error:unknown filesytem
而对linux文件系统会出现Filesystem is ext2
这里我试出了有4个Filesystemis ext2(属于ubuntu的分区:(hd0,msdos6), (hd0,msdos7), (hd0,msdos8), (hd0,msdos9)
3) 然后在过滤出的ubuntu分区找出启动分区
grub rescue >ls (hd0,msdos6)/
….
grub rescue >ls (hd0,msdos9)/
有些人说是输入ls (hd0,msdos9)/boot/grub 看看是否有内容。这个不固定,有些情况下根本没有 /boot 这个目录,所以
直接从根目录 ls (hd0,msdos9)/ 开始找
通过一个一个的执行发现 ls (hd0,msdos6)/ 执行后有个 grub/目录,这样就找出了启动的分区
4) 重新设置 grub的启动分区和路径
grub rescue>set root=(hd0,msdos6) #设置grub启动分区
grub rescue>set prefix=(hd0,msdos6)/grub/ #设置grub启动路径
查看一下设置情况
grub rescue> set
返回内容如下
prefix=(hd0,msdos6)/grub
root=hd0,msdos6
5) 加载基本模块并进入正常模式
grub resuce>insmod normal
grub rescue>normal #从救援模式进入正常模式
系统就进入我们平时用的系统(模式)中了。
6) 重新设定系统启动的分区和路径,因为我们的系统启动不了就是找不到路径引起的。
对grub 进行更新,grub才能够发现分区的改变
打开终端ctrl+alt+T,
更新grub
sudo update-grub
命令运行完后,安装grub
sudo grub-install /dev/sda
执行完以上命令后重新启动ubunto 就OK