Grub rescue
背景1
昨天晚上(20.4.1)忽然看到ubuntu20.04
的操作画面,界面更加体贴用户了,配备了一些很不错的特性,其中一个我很喜欢的就是黑夜模式
。所以就打算换到它了,但是我一直使用的Ubuntu版本是16.04,所以就先打算升级到18.04,再升级到20.04。接下来就开始了一系列更新操作,当时也没有将软件包全部更新到最新版,主要也是因为源的问题,一些包总是请求超时
,所以忽略警告开始升级。
升级下载过程完毕后,安装花费了很长时间,最后在安装界面上一直停留在那里不动了,已经接近凌晨,索性强制关机
,去睡觉了。
第二天早上起来接着开机,但是还是卡在那个地方。这个时候就决定放弃这次升级了,打算直接在官网下载ubuntu19.10
版本进行u盘安装
。将iso文件
烧录至u盘后,插入自己的电脑,进入bios界面
,选择从u盘启动
,接下来就是一系列配置过程,可进行默认设置
,或者自定义设置
,这里我选择了自定义设置,因为需要对那几个目录(/home等等)进行磁盘分配。
设置完毕之后,重新启动,这时出现了问题,开机画面变成了
1 | GRUB loading |
这样的字符黑乎乎的界面,上网查找资料,使用了
1 | grub rescue>set # 查看当前配置 |
开始使用ls
命令找grub
所在的磁盘,找到了,但是在grub\
下并没有normal.mo d
文件。
所以即使设置了
1 | set root=(hd1,msdos6) # 设置grub启动分区 |
后就会出现错误,显示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
2sudo mount /dev/sdb8 /mnt # 注意8这个数字,你需要改写成你自己的
sudo grub-install --boot-directory=/mnt /dev/sda - 如果/boot没有单独分区:
1
2sudo 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 | 楼主的问题是光标的问题, |
之前没有将这个答案看完整,直接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
: 这个命令和上边的是一起的
接下来就是正差的操作流程了
- 使用set查看
grub
分区,需要一个个的试,这时候需要使用ls
命令 - 找到了之后就使用
set
进行设置,类似
set root=hd0,msdos2
set prefix=(hd0,msdos2)/grub
- 进行设置了之后就使用
set
可以查看当前设置 - 输入
insmod normal
回退到grub启动界面,这个命令输入后还需要再次输入normal
才行。 - 到了这里还没有完,需要进入linux更新grub
1 | sudo update-grub |
最后一个总结: 遇到这种情况先别急着下结论,比如最坏就得重新装系统啦怎么怎么样,还是要到网上搜索一下有没有人遇到了类似的问题,比如我当时就已经打算重装系统了,但是还是抱着试一试的态度搜索了一下,也许是之前遇到过两次类似的情况,这次处理起来就顺利多了,就是系统找不到引导文件的事情,把路径设置进系统里就好了。