Linux + Windows 双系统:阻止烦人的 Windows Boot Manager 覆盖第一启动项
文章介绍了一种应对“Windows Boot Manager”反复被固件设为首启动项的方法:利用 UEFI 会自动识别 `EFI/Microsoft/Boot/bootmgfw.efi` 的特性,先备份原始 Windows 引导文件,再将 grub 的 EFI 文件复制并改名为 `bootmgfw.efi`,使系统实际先进入 grub。随后在 Linux 中修改 grub 配置,把 Windows 的链式引导目标改为备份后的原始 EFI 文件。这样即使 Windows Boot Manager 仍排第一,也会先进入 grub,再正常启动 Windows 或 Linux。
原理
UEFI 固件和 Windows 都认这个文件:
EFI/Microsoft/Boot/bootmgfw.efi
很多时候它们并不是“记住了某个旧启动项”,而是每次开机扫描到这个文件后,又重新创建了一个 Windows Boot Manager。
既然它非要启动这个文件,那思路就很简单:
- 先把原本的 Windows 引导文件备份
- 再把 grub 的 EFI 文件复制过来
- 并重命名成 Windows 原本那个 EFI 文件名
这样以后就算 Windows Boot Manager 继续排第一,它实际启动的也是 grub。
然后再在 grub 里把 Windows 的链式引导路径改成刚才备份出来的原始 Windows EFI 文件,就能正常进入 Windows。
操作步骤
1)进入 PE,挂载 EFI 分区
进入 PE 后,挂载 EFI 分区,进入目录:
EFI/Microsoft/Boot/
找到 Windows 原本的启动文件:
bootmgfw.efi
先把它备份一份,改个名字保存。
例如我这里改成:
bootmgfw.efi.bak
然后把 grub 对应的 EFI 文件 复制到这个目录,并重命名为:
bootmgfw.efi
也就是让 grub 顶替原来的 Windows Boot Manager。
2)此时直接启动 Windows Boot Manager,会进入 grub
做到这一步后,启动项里不管是:
Windows Boot Manager- 还是原本的 Linux 启动项
都会进 grub。
这时候先别慌,说明替换已经生效了。
只是由于 grub 里原先记录的 Windows 引导目标还是旧文件名,所以此时从 grub 选 Windows 还进不去。
接下来进入 Linux 修一下 grub 配置。
3)进入 Linux,修改 grub.cfg 里的 Windows 引导路径
进入 Linux 后,找到 grub 配置文件,一般是这个位置:
/boot/grub/grub.cfg
然后找到 Windows 对应的菜单项,把原本指向:
bootmgfw.efi
的地方,改成你刚刚备份后的文件名,例如:
bootmgfw.efi.bak
保存退出。
4)完成
这样处理完以后:
- 主板/固件如果继续把
Windows Boot Manager放到第一位
→ 实际会先进 grub - grub 中的 Windows 菜单项
→ 再去链式引导真正的bootmgfw.efi.bak - 最终 Linux 和 Windows 都能正常启动
也就是说,Windows Boot Manager 以后就算继续“抢第一”,也只是帮你先进 grub 而已。
enjoy it😍.


提供强力驱动