最近,在grub引导的Ubuntu+Win7双系统上作业,用的是Ubuntu14.04.2。进行系统更新,更新到一般卡住了,恰好此时在进行grub相关文件的更新,我把机器重启后进入了grub rescue模式,如下:

  error: file '/boot/grub/i386-pc/normal.mod' not found.

  Entering rescue mode...

  grub rescue>

  经过网络一番查找和自身验证,我汇总了三种解决方法。

  1.制作Ubuntu的U盘启动工具,选择U盘启动机器,进入Try Ubuntu,安装boot-repair工具,用该工具回复损坏的grub.

    a.在命令行下安装boot-repair,首先链接源地址:$sudo add-apt-repository ppa:yannubuntu/boot-repair

                         $sudo apt-get update

                         $sudo apt-get install boot-repair

    b.安装成功后可以在dash中或终端里启动boot-repair,开始修复系统。

    c.系统修复可能需要几分钟,后关机拔掉U盘,再启动。即可看到熟悉的grub引导界面了。

  2.直接在grub rescue模式下选择normal模式启动,然后再修改更新grub。这种方法的关键点有三个,一是选择好grub所在的分区目录,二是找到root所在的分区,三是要有normal.mod文件。该模式下命令有限,常用的有ls set insmod,通过这三个命令,来找到上述文件目录项后设置root和prefix,再选择normal启动模式。

    a.grub rescue>set //该命令会列出boot目录所在的分区,grub目录所在的分区;

    b.grub rescue>ls  //列出所有分区,样式如(hd0,msdosX);

    c.grub rescue>ls (hd0,msdosX)/  //依次列出每个分区下的目录,找出root在那个分区下,这里我们假设grub在(hd0,msdos6)/boot/grub,root在(hd0,msdos5)分区上;

    d.grub rescue>set root=(hd0,msdos5)

      grub rescue>set prefix=(hd0,msdos6)/boot/grub

       grub rescue>insmod /boot/grub/normal.mod  //若没有normal.mod这个文件,请选择第一种或第三种方法。

    e.grub rescue>normal  //显示grub菜单

    f.通过显示的菜单进入系统后,在命令行对系统进行更新修复。

      $sudo update-grub

      $sudo grub-install /dev/sda  //sda为硬盘号,不是分区号(sda1,sda2等等)

      $sudo shutdown -r now  //重新启动机器

    ps:可以在grub.cfg中修改grub菜单。

  3.若第一和第二中方法无效,那么只能放弃所有从来再来,用做好的启动工具重新做个Ubuntu系统,在更新修复grub -_*!。

 

05-01 04:03