关于error file: /boot/grub/i386-pc/normal.mod not found. Grub Rescue的修复问题

造成该问题可能的原因是我update之后对系统造成了修改,结果导致了/boot/grub/i386-pc/normal.mod的丢失,normal.mod是ubuntu开机引导的必加载项,因而报出

/boot/grub/i386-pc/normal.mod not found. Grub Rescue>的问题。

关于基本知识,孙斌斌的个人blog 做了部分总结:

在救援模式下,只有很少的命令可是使用:
  1. set 设置环境变量
  2. ls 查看设备
  3. insmod 加载模块
  4. root 指定用于启动系统的分区
  5. prefix 设定grub启动路径
在救援模式下,先ls查看下设备,一般都有好多分区。这时候要手动找到linux分区,因为我们要加载正确的模块,先找到分区就是。
方法:ls (hd0,X)/
X为显示的号码,如果是msdos11可以直接用11代替。该命令为查看分区下的文件,如果root单独分区了,就找到grub目录,然后ls (hd0,x)/gurb会发现还有个i386-pc目录,normal.mod文件就在该目录下。
另外ChinaUnix社区有篇帖子做了更详细的说明:http://bbs.chinaunix.net/thread-3634395-1-1.html

在救援模式下只有很少的命令可以用:
set  ,  ls , insmod , root , prefix

(1)set  查看环境变量,这里可以查看启动路径和分区。
(2)ls   查看设备
(3)insmod  加载模块
(4)root  指定用于启动系统的分区,在救援模式下设置grub启动分区
(5)prefix 设定grub启动路径

二、设置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 #引导

他的解决过程:

下面是具体步骤:

查看分区

因为每个人的分区不一样,所以我们要查看分区,ls指令

grub rescue>ls

回车后,就会出现

(hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)

grub rescue>

注:我用的是grub2,对于grub用户,分区前没有msdos字样

上面是我的分区,每个人的不一样。

grub rescue>set回车

prefix=(hd0,msdos9)/boot/grub

root=hd0,msdos9

从上面可以看出来现在我的系统是从(hd0,msdos9)里启动的。

那么怎么知道ubuntu在哪个分区呢?进入第二步


寻找ubuntu所在分区

这一步我们要一个一个的试,

还是用ls指令

先试下在不在(hd0,msdos8)里边

grub rescue>ls (hd0,msdos8)

回车会发现,不是,还是unknown filesystem

接着来

。。。。。。。。。

当我试到

(hd0,msdos7)的时候,可以看到一下子多了很多字,这些就是我ubuntu主文件夹下的文件夹和文件的名字。OK,找到分区了!


修改启动分区

grub rescue>root=(hd0,msdos7)
grub rescue>prefix=/boot/grub //grub
路径设置
grub rescue>set root=(hd0,msdos7)
grub rescue>set prefix=(hd0,msdos7)/boot/grub
grub rescue>insmod normal //
启动normal启动

grub rescue>normal

依次敲入上面的指令,是不是看到熟悉的启动菜单了?选win7后,一键Ghost就开始备份系统了。别高兴太早,一切还都没开始呢。如果你不是因为一键Ghost问题进入grub rescue,可以直接跳到第⑤步


再来一遍

当你等着一键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

在终端里运行

sudo update-grub

重建grub到第一硬盘mbr
sudo grub-install /dev/sda

以上内容很的好学习的关于开机引导的问题,but it doesn't work for me.


最终我的解决方案:

1.考虑使用UltraISO制作ubuntu14.04 U盘镜像以启动系统恢复

参考:http://jingyan.baidu.com/article/363872ec8b4f6a6e4ba16f2b.html

结果:失败,由于刻录镜像时报出始终被占用的问题,后来网上提示原因是UltraISO版本问题以及ubuntu14.04太新。。。。放弃

2.考虑使用Universal-USB-Installer制作ubuntu14.04 U盘以启动系统恢复

参考:http://blog.csdn.net/liangcaiyun2013/article/details/10410797

结果:U盘启动ubuntu成功,但是,进入ubuntu后无法修复原分区的系统。

3.考虑使用Boot-Repair

参考:http://sourceforge.net/p/boot-repair-cd/home/Home/

结果,有详细的教程,然后最后修复成功。


补充,由于我是在修复我的vmware中的ubuntu,因而还需要做一个vmware的u盘启动,教程如下:

http://jingyan.baidu.com/article/b2c186c8eb3813c46ef6ffef.html

注意事项:教程中建立好新硬盘后,如果想要该盘的启动顺序排在前面,点右面详细面板的高级,设置虚拟设备节点,将想要先启动的硬盘盘号往前排。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页