用了两年多的ubuntu今天忽然崩溃了, 一开机直接进入了 grub rescue 模式, 直接提示/boot/grub/i386-pc/terminal.mod not found,
网上找了好多办法都没解决,最后在国外的一个ubuntu论坛找到了解决办法, 现在记录下来。大致步骤就是
set 设置环境变量
ls 查看设备
root 指定用于启动系统的分区
prefix 设定grub启动路径
insmod 加载模块
normal 进入正常模式

详细步骤

  1. 输入ls命令,查看输出:

      ls
      (hd0)  (hd0,msdos14) (hd0,msdos13) (hd0,msdos1).
    
  2. 找出哪个盘安装了系统,

    ls (hd0,msdos1)/boot/grub
    
    ls (hd0,msdos2)/boot/grub
    

    尝试所有的,直到返回内容不再是error: unknown filesystem, 而是显示目录下面的文件为止。我的是在(hd0,msdos1)这里

  3. 设置变量:

     set root=(hd0,msdos1)
     set prefix=(hd0,msdos1)/grub
    
  4. 加载模块:

      insmod linux
      insmod loopback
      insmod normal
    

    如果这一步出现问题, 则尝试将第三步的prefix设置为其他路径, 如/boot/grub/i386-pc/或者(hd0,msdos1)/usr/lib/grub/i386-pc等,
    我的目录是在(hd0,msdos1)/usr/lib/grub/i386-pc.

  5. 进入normal模式:

      normal
    

    输入normal命令, 就进入了grub命令行。(如果这一步报错,什么xxx.mod找不到的话,尝试从第三部重试,更换root以及prefix路径)。

  6. 进入正常的grub命令行之后, 依次执行以下命令:

      linux /vmlinuz root=/dev/sda1 ro
      initrd /initrd.img
      boot
    

    即可正常进入Ubuntu系统。

  7. 登陆到系统之后,打开终端, 执行:

      sudo update-grub
      sudo grub-install /dev/sda1
    
  8. 系统已经正常了, 再重启也没有问题。

Q.E.D.