Grub rescue

背景1

昨天晚上(20.4.1)忽然看到ubuntu20.04的操作画面,界面更加体贴用户了,配备了一些很不错的特性,其中一个我很喜欢的就是黑夜模式。所以就打算换到它了,但是我一直使用的Ubuntu版本是16.04,所以就先打算升级到18.04,再升级到20.04。接下来就开始了一系列更新操作,当时也没有将软件包全部更新到最新版,主要也是因为源的问题,一些包总是请求超时,所以忽略警告开始升级。

升级下载过程完毕后,安装花费了很长时间,最后在安装界面上一直停留在那里不动了,已经接近凌晨,索性强制关机,去睡觉了。

第二天早上起来接着开机,但是还是卡在那个地方。这个时候就决定放弃这次升级了,打算直接在官网下载ubuntu19.10版本进行u盘安装。将iso文件烧录至u盘后,插入自己的电脑,进入bios界面,选择从u盘启动,接下来就是一系列配置过程,可进行默认设置,或者自定义设置,这里我选择了自定义设置,因为需要对那几个目录(/home等等)进行磁盘分配。

设置完毕之后,重新启动,这时出现了问题,开机画面变成了

1
2
3
GRUB loading
error:unknow filesystem
grub rescue>

这样的字符黑乎乎的界面,上网查找资料,使用了

1
2
3
4
grub rescue>set # 查看当前配置
grub rescue>ls # 查看当前磁盘及磁盘分区
(hd0) (hd0,msdos0)...(hd1) (hd1,msdos9) (hd1,msdos8)...
# 这里的hd代表磁盘,msdosx代表分区(x为数字)

开始使用ls命令找grub所在的磁盘,找到了,但是在grub\下并没有normal.mo d文件。

所以即使设置了

1
2
3
set root=(hd1,msdos6) # 设置grub启动分区
set prefix(hd1,msdos6)/boot/grub # 设置grub启动路径
insmod normal

后就会出现错误,显示file not found

而且此时将之强制关机后,开机后会直接进入grub rescue界面,看不到开机过程中一闪而过的进入bios的选项界面了,我试了下在开机后,不断按下F2(我的电脑进入bios的热键是F2),这下又出现了当初进入bios的界面了。

寻找Linux核心文件所在分区:
我的电脑在(hd1,sdb8)中有名字类似与vmlinuz-3.0.0-12-generic这样的文件,这是Linux核心文件,如果找到,记下(hd1,sdbx)中的x值。假设找到(hd0,5)时,显示了文件夹中的文件。

然后用Live USB启动,在Live USB的Ubuntu的终端中依次输入以下命令:

  • 如果/boot单独分区:
    1
    2
    sudo mount /dev/sdb8 /mnt # 注意8这个数字,你需要改写成你自己的
    sudo grub-install --boot-directory=/mnt /dev/sda
  • 如果/boot没有单独分区:
    1
    2
    sudo mount /dev/sda5 /mnt
    sudo grub-install --boot-directory=/mnt/boot /dev/sda

重新启动Ubuntu后,发现熟悉的grub启动界面又回来了,这次虽然没有用到最新的20.04,
但开始使用19.10版本了,也算是更新了!

  • /grub/i386-pc/normal.mod not found

使用boot-repair工具,在live-usb中安装这个工具,然后运行。

如果是ubuntu16.04的时候可能安装不了,那么就把源换成18.04的再进行安装。


背景2

20.5.5

今天又进入到grub rescue>了,这次是因为vmware扩容的问题。

上网找了下问题,搜索到的一个结果里边有这样一段话:

1
2
3
4
5
6
7
8
9
10
11
12
13
楼主的问题是光标的问题,
其实那个问题已经在楼上有解决方案了,就是引导盘符的问题。
重启虚拟机,还在虚拟机加载进度条的时候就按下ESC,就可以切换当前需要打开的引导了,切到CDROM就好了。
或者干脆F2(不推荐),去修改引导,不推荐的原因是因为,你装完系统还要再改回来成硬盘引导。
所以ESC用一下,装一下系统就好了。

我说这层答案很好的原因是在切换引导之后,选择安装Win10的时候,会报错。
报的错就是硬盘问题。
没错,是这个问题。

而这一层给出的就是这个问题的答案。

直接在虚拟机设置里,在硬盘→高级里,把SATA换成IDE就好了。

之前没有将这个答案看完整,直接F2进行高级设置了…
根据这篇博客还有这篇博客对虚拟机扩容了20G,后使用shutdown -r now后直接进入了grub rescue界面。

本来以为虚拟机扩容大功告成,但不知竟然又发生了这种事情。

我觉得linux的磁盘那些操作真的好难啊!有些不懂。

使用ls对硬盘进行扫描,但是并未发现boot文件夹,除了一个ex2,其它都是unknown filesystem,不知道该怎么解决。

我决定重新装一个ubuntu20.

唉,之前也没及时对v2ray文件进行备份。也没有写教程.


背景3

20.9.16 aft

今天因为想玩游戏,但是windows下需要合并两个分区(因为单独一个分区装不下我想玩的游戏…),在WePE中使用分区工具对两个分区进行合并之后,重新启动出现黑乎乎的界面:>grub rescue

内心已经做好重新装系统的准备,但是还是抱着一丝希望,先试试,毕竟这种情况已经遇到过一次了。

在这种界面需要记住几个重要命令:

  • set: 设置变量
  • ls: 显示分区
  • insmod normal: 在设置完成后想要回到正常界面需要输入这个命令
  • normal: 这个命令和上边的是一起的

接下来就是正差的操作流程了

  1. 使用set查看grub分区,需要一个个的试,这时候需要使用ls命令
  2. 找到了之后就使用set进行设置,类似
  • set root=hd0,msdos2
  • set prefix=(hd0,msdos2)/grub
  1. 进行设置了之后就使用set可以查看当前设置
  2. 输入insmod normal回退到grub启动界面,这个命令输入后还需要再次输入normal才行。
  3. 到了这里还没有完,需要进入linux更新grub
1
2
sudo update-grub
sudo grub-install /dev/sda

最后一个总结: 遇到这种情况先别急着下结论,比如最坏就得重新装系统啦怎么怎么样,还是要到网上搜索一下有没有人遇到了类似的问题,比如我当时就已经打算重装系统了,但是还是抱着试一试的态度搜索了一下,也许是之前遇到过两次类似的情况,这次处理起来就顺利多了,就是系统找不到引导文件的事情,把路径设置进系统里就好了。