我用 UEFI 将 Debian 系统安装在 USB 驱动器上,插入后可以在两台计算机上启动它。但是,在我的旧电脑(Aspire E 15 E5-571G-57D9)中,在旧电脑上启用 UEFI 的情况下,USB 驱动器无法启动。在BIOS设置中,我看不到Debian系统的USB,但我可以在那台旧电脑上用Windows PE启动USB驱动器。 BIOS设置中系统BIOS版本为V1.22。
为什么我无法在旧 PC 上启动此 Debian?
谢谢。
答案1
当可移动介质包含 FAT 分区(最好是 FAT32,但较新的 UEFI 版本也接受其他形式的 FAT)时,可在 UEFI 模式下启动,该分区在目录中包含相应的启动文件\EFI\BOOT\
:对于 x86_64 架构,启动文件名为BOOTX64.EFI
。
(如果启用了安全启动,则会添加一项要求,即启动文件必须使用安全启动批准列表中的证书进行签名,或者文件的哈希值(通常是 SHA-256)必须专门列入白名单。)
根据 UEFI 规范,启动文件名应该不区分大小写,但一些早期的 UEFI 实现是区分大小写的。
检查 Windows PE USB 上 UEFI 启动文件的完整路径的字符大小写,然后确保 Debian USB 的启动文件使用完全相同的字符大小写(如有必要,请进行更改)。
由于操作系统的 FAT32 驱动程序可能会认为文件名的大小写版本实际上相同,因此您可能必须首先临时将文件或目录重命名为其他名称,然后再重新命名,以便更正字符大小写。例如,在 Linux 中:
mv bootx64.efi BOOTX64.EFI # this won't change the character case
mv: 'bootx64.efi' and 'BOOTX64.EFI' are the same file
mv bootx64.efi foo.efi
mv foo.efi BOOTX64.EFI # character case successfully changed
如果旧系统最近一直在接收 Windows 更新,则它可能已收到最近的 UEFI 黑名单更新(Windows 更新 KB5012170),该更新使 Debian 的旧安全启动密钥(以及其他)失效,因为使用该旧密钥签名的引导加载程序容易受到 BootHole 的攻击和/或相关的安全漏洞。尽管 UEFI 黑名单更新已通过 Windows 更新进行分发,但它更像是固件更新 - 它更新了 UEFI 安全启动签名黑名单变量 ( dbx
),该变量由固件使用且与操作系统无关。
如果您的 Debian 安装介质早于(例如)2021 年末,它可能仍在使用易受攻击的引导加载程序版本,该版本现已列入黑名单,因此安全启动可能会阻止其启动。大多数具有 BootHole 漏洞的引导加载程序的发行版现在都提供了其安装映像的更新版本,其中包含固定的引导加载程序和/或适当的新密钥。
如果您仅在 中找到引导加载程序文件\EFI\debian\
,而不是在 中\EFI\boot\
,则 USB 可能只能在安装它的系统上引导,因为在 UEFI 系统上,grub-install
还将创建一个 UEFI NVRAM 引导变量(实际上是 BIOS 设置)来标识引导加载程序位置。它不会与 USB 可移动介质一起传输。因此,USB 预计只能在创建它的系统上启动(并且可能在过去创建了完全相同的 USB 介质并且尚未删除它的 NVRAM 启动变量的系统上启动)。
某些系统可能具有更宽容的 UEFI 实现,并自动从 UEFI 固件可以读取的任何文件系统类型中查找任何可启动*.EFI
文件,但这不受 UEFI 规范的保证。
但是,由于您有一台能够成功启动 USB 的计算机,因此很容易修复:只需从 USB 启动,然后运行sudo grub-install --target=x86_64-efi --force-extra-removable /dev/sdX
(替换sdX
为 USB 的实际全盘设备)。这会将grub-install
基本启动文件的第二个副本写入\EFI\BOOT\
ESP 的目录中。现在,ESP 会将引导加载程序的第二个副本写入某个位置,即使是最严格的 UEFI 实现也应该在从可移动介质引导时查找它。