把\ESP\EFI\Microsoft\Boot\下的bootmgfw.efi替换成\ESP\EFI\debian的shimx64.efi才能进grub,如果想用win10就再换回来。
这就完全说得通了!你之前的困境在于造成了一个**“死循环”**。
原理分析:
- 索尼 BIOS 的霸道:它死板地只加载
\EFI\Microsoft\Boot\bootmgfw.efi。 - 你的操作:你用 Debian 的
shimx64.efi冒充了这个文件。 - 死循环:
- BIOS 加载了冒牌文件 -> 启动了 GRUB。
- 你在 GRUB 里选 Windows -> GRUB 默认去寻找并加载
\EFI\Microsoft\Boot\bootmgfw.efi。 - 但这个文件现在是 GRUB 自己(冒牌货)!
- 结果:GRUB 试图加载自己,导致闪屏一下又回到菜单,或者直接黑屏。
解决方案:给真 Win10 引导文件“改名换姓”
要实现“既能骗过 BIOS 启动 GRUB,又能让 GRUB 启动 Win10”,我们需要把这两个文件都放在那个文件夹里,但名字要区分开。
请在 WinPE 里(或者你有办法操作文件的环境),按照以下步骤操作。这是最简便且不用重装的方法。
第一步:在 \EFI\Microsoft\Boot\ 里凑齐“三巨头”
进入你的 ESP 分区(假设是 Z 盘),打开 Z:\EFI\Microsoft\Boot\ 文件夹。我们需要让这里面同时存在以下三个文件:
-
真 Windows 引导文件:
- 找到原本的那个
bootmgfw.efi(如果是 Debian 的就先删掉,把 Win10 的找回来,或者用bcdboot生成回来)。 - 关键动作:把它重命名为
win10.efi(名字随便取,别叫 bootmgfw 就行)。
- 找到原本的那个
-
Debian 的引导文件 (shim):
- 从
\EFI\debian\复制shimx64.efi过来。 - 关键动作:把它重命名为
bootmgfw.efi(用来骗 BIOS)。
- 从
-
Debian 的 GRUB 核心 (grub):
- 从
\EFI\debian\复制grubx64.efi过来。 - 注意:这个不要改名,就叫
grubx64.efi。 - 为什么要复制这个? 因为
shim(那个冒牌货) 启动后,会在当前目录下找grubx64.efi。如果不复制,你可能会看到Bubba No或者Image not found的报错。
- 从
检查一下,现在 Z:\EFI\Microsoft\Boot\ 文件夹里应该有:
bootmgfw.efi(其实是 Debian shim)grubx64.efi(其实是 Debian grub)win10.efi(其实是 真 Win10)
第二步:重启进入 Debian
拔掉 U 盘,重启电脑。
- BIOS 会读取
bootmgfw.efi-> 启动 Debian GRUB。 - 此时 GRUB 菜单里的 Windows 选项依然是用不了的(因为它还在找原来的名字),先进入 Debian 系统。
第三步:添加“真 Win10”的入口
我们需要告诉 GRUB:“嘿,真正的 Windows 改名了,它叫 win10.efi”。
-
打开终端。
-
编辑自定义菜单文件:
sudo nano /etc/grub.d/40_custom
-
在文件末尾,另起一行,粘贴以下内容(注意大括号格式):
menuentry "Windows 10 (Sony Fix)" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root CCC0-5002 chainloader /efi/Microsoft/Boot/win10.efi } -
保存退出 (Ctrl+O, Enter, Ctrl+X)。
-
更新 GRUB:
sudo update-grub
第四步:最终测试
重启电脑。
- 你会看到 GRUB 菜单。
- 最下面多了一个 "Windows 10 (Sony Fix)"。
- 选择它,应该就能成功引导进入 Windows 10 了!
总结
你之前的思路是对的(替换文件),只是少做了一步:保留原文件并改名。
只要按照上面的 win10.efi 策略,你就不需要每次进 Windows 都要手动替换文件了,GRUB 会帮你完成“接力跑”。