请注意,这个问题不是典型的双启动问题的重复,因为我的 PC 中从来没有同时安装 Windows-HDD 和 Linux-SSD,所以它们不能接触彼此的(efi)分区。
在我的华硕主板上,安装了最新固件,我已Secure Boot
启用、Fast Boot
禁用、CSM
禁用,一直。
我在 HDD 上安装了 Windows 10,同时移除了 SSD。在 Windows 电源设置中,我禁用了
fast startup
。所有更新均成功。关闭电源。然后我移除了 HDD,连接了 SSD,安装了
firmware-11.6.0-amd64-netinst
带桌面的 Debian。运行正常。更新成功。关闭电源。然后我移除了 Linux-SSD,重新连接了 Windows-HDD。我启动了 Windows,自动登录,开始菜单,关机。
然后我断开了 Windows-HDD,重新连接了 Linux-SSD。尝试启动 PC 时,我得到了“
The current BIOS settings do not fully support the boot device. Click OK to enter the BIOS setup. Go to Advanced > Boot > CSM parameters, and adjust the CSM settings to enable the boot device.
但我不需要 CSM,因为没有它它(也应该)可以工作”。当然,GRUB 没有出现。当我检查 BIOS 时,我的 Linux-SSD 没有显示为可启动,尽管它在 SATA 设备列表中可见。
但是我可以连接我的 Linux 闪存驱动器,该驱动器被识别为(UEFI)可启动,从中我可以进入救援模式,挂载 SSD,重新安装 GRUB,然后我的 Debian 11 再次从 SSD 启动。
我怀疑 Windows 10 会写入/更新安全启动 db/dbx,而我的 Debian 11 安装不符合要求。我读到过一些关于“BootHole” GRUB2 漏洞的信息,但该漏洞已在 2020 年得到修复。UEFI 撤销列表内容(参见 csv)自 2020 年起没有与 Debian 相关的产品线,只有自 2022 年 9 月起的一些其他产品线。
但是,为什么我的 Linux 闪存驱动器仍然在 UEFI 模式下启动,而我的 SSD 却需要重新安装 GRUB?
答案1
移除 SSD 可能会导致某些固件自动忘记所有曾经引用现在不存在的设备的 NVRAM 启动项。
这不会对 Windows 磁盘造成问题,因为 Windows 磁盘始终在“可移动”或“后备”路径上安装 Windows 启动管理器的副本,特别是\EFI\Boot\BootX64.efi
对于 x64 PC。如果 EFI 固件被告知要启动可移动磁盘,或者如果尝试的 NVRAM 启动选项用尽,它将查找此特定路径。
但是,GRUB2 默认不提供该功能 - 它仅将自身安装到其自定义位置(\EFI\grub
或类似位置)并且不会触及“后备”位置。
grubx64.efi
通常,可以通过复制到备用位置或使用grub-install --removable
或 Debian 的自定义选项再次安装 GRUB2来解决此问题--force-extra-removable
。如果您使用 Shim 的安全启动(Debian 上的默认设置),则需要将 shimx64.efi 放置在此位置。
这是一个暂时的解决方案。在操作系统再次启动后,我建议删除临时的 BootX64.efi 安装,否则它会在安装新版本的 GRUB2 时过期(旧 GRUB2 内核将无法从 /boot 加载新模块)。
要永久修复,请重新运行grub-install
而不使用任何特殊选项,并让其在主板的 NVRAM 中创建一个新的 EFI 启动项。(然后您应该在 的输出中看到它efibootmgr
。)