出现原因是由于分区调整或分区UUID改变造成grub2不能正常启动,从而进入修复模式了(grub rescue),也称救援模式。在该模式下在救援模式下只有很少的命令可以用:set, ls, insmod, root, prefix
-
set 查看环境变量,这里可以查看启动路径和分区。
-
ls 查看设备
-
insmod 加载模块
-
root 指定用于启动系统的分区,在救援模式下设置grub启动分区
-
prefix 设定grub启动路径
-
会出现如下字样:
(hd0)(hd0,gpt13)(hd0,gpt12)(hd0,gpt11)(hd0,gpt10)(hd0,gpt9)(hd0,gpt8)hd0,gpt7)(hd0,gpt6)(hd0,gpt5)(hd0,gpt4)(hd0,gpt3)(hd0,gpt2)(hd0,gpt1)
2.寻找Manjaro Linux所在分区注:上面是我的分区设备,每个人可能不一样,但原理都是一样的。
输入ls (hd0,msdos1)/,如下
grub rescue> ls (hd0,gpt1)/
若出现unknown filesystem或者其他不显示文件路径的字样,则尝试下一个
若出现的是带文件夹下的文件夹和文件的名字,那就是的要找的分区了。(注意,这里使用ls (hd0,gpt1)/尝试过程中,会有多个分区是有会出现文件夹和未文件的情况的)
3.确定引导在该分区输入set,如下
grub rescue > set
若出现带以下代码,则说明找到的分区是正确的分区
prefix=(hd0,gpt9)/grub //可能有所不同,非Manjaro的linux系统可能是prefix=(hd0,gpt11)/boot/grub efi=(hd0,gpt9)4.修改启动分区
假如你的启动分区是(hd0,gpt11),则输入
set prefix=(hd0,gpt11)/grub //这里要注意,要与之前的输入set得到的prefix路径所对应 set root=(hd0,gpt11)
修改prefix和root之后执行
insmod normal
加载基本模块,执行
normal
之后会看到你的grub可视化界面,选择进入manjaro
5.更新grub终端输入
sudo update-grub
等待更新完成
6.找到你的linux系统所在的硬盘编号如果你不知道你的系统所在的硬盘号,先在终端执行sudo fdisk -l,来找到你的系统所在的硬盘编号,注意这里是整块物理硬盘的编号而非分区编号
7.更新grub信息我这里的物理硬盘编号是nvme0n1,所以我以nvme0n1为例,终端输入
sudo grub-install /dev/nvme0n1
完成之后,修复grub成功
重启之后可能没有进入manjaro的引导界面,而是直接进入windows,解决办法是在bios里面的启动分区修改为manjaro所在的盘,之后重启即可看到manjaro的引导界面



