Manjaro引导修复 | Linux

之前安装了Win10+Manjaro的双系统,好久没有使用,更新Win10->Win11后,重启电脑,进入UEFI启动的选择,发现除了Windows Boot Manager,另一个启动项是...PXE什么的,选择后保存重启,黑屏显示:start PXE over IP4...,卡住一会,又进入了Win10。

可能是更新Win11修改到磁盘的ESP区(EFI分区)?导致之前的引导被删除了?

解决过程:
先打开命令行,使用:bcdedit (Boot Config Data Edit)
在Boot Config Data 中设置一条记录:
bcdedit /set '{bootmgr}' path \EFI\Manjaro\grubx64.efi
bcdedit /set '{bootmgr}' description 'manjaro test'

枚举现有记录:
bcdedit /enum

发现除了Windows Boot Loader,新增了:
image

重启电脑,进UEFI配置,选择启动这条新增的记录:manjaro test (显示名称)

保存退出重启,报错:error: file '/boot/grub/x86_64-efi/normal.mod' not found.
自动进入:grub rescue模式

该模式下输入:ls可以列出磁盘和对应的分区

磁盘名:hd0, hd1, ..., hdn
(hdn,PART)中的PART是分区编号,根据磁盘格式而确定,不同磁盘格式编号不同
我的机器上列出:(hd0) (hd1) (hd1,gpt7) (hd1,gpt6) ... (hd1,gpt1)

对列出的每一项使用ls命令
如:ls (hd0)
显示:Filesystem is unknown

逐个尝试,直到找到安装系统时所划分的所有分区(根据分区类型判断)
如:ls (hd1,gpt5)
显示:Filesystem is ext2

ext格式是我安装Manjaro时候的指定分区格式

再列出每个ext分区的内容来判断挂载点
如:ls (hd1,gpt5)
显示:./ ../ lost+found/ boot/ dev/ proc/ ...
image
确定gpt5分区对应挂载点:/

同样方法确定gpt6:
ls (hd1,gpt6) 列出了用户目录,因此gpt6对应挂载点:/home

设置root=根目录, prefix=grub目录:

root=(hd1,gpt5)
prefix=(hd1,gpt5)/boot/grub

插入normal模块:
insmod normal

执行:
normal

回车后,重启,自动进入了Manjaro的启动系统选择界面

选择Manjaro进入

(此时还未真正解决启动引导问题)

执行:
sudo grub-install /dev/{EFI分区}

在安装时,我设置Windows的EFI分区挂载到了/boot/efi
我的机器上是nvme0n1p1,于是执行:
sudo grub-install /dev/nvme0n1p1

显示成功安装,此时可重启(保持当前UEFI启动项不变),成功自动进入Manjaro启动系统选择界面!

存在疑问:
是否真的需要用bcdedit设置新增一条启动项记录,在选择原有启动项后执行命令会不会覆盖Windows的原有引导,导致默认启动Win,被覆盖为进入Manjaro引导页面?

grub目录下有文件:normal.mod,这是什么?
insmod normal 又是什么作用?

grub实质是什么?
install-grub安装的是什么?

EFI引导分区通常是多个系统共用还是可以为每个系统单独建立一个?

硬件自检结束,进入BIOS系统后,引导加载操作系统的具体过程是什从么?

GPT分区表如何工作?

Manjaro和其他Linux发行版的引导过程一样吗?

posted @ 2021-08-08 14:11  windin  阅读(2592)  评论(0编辑  收藏  举报