为什么 efibootmgr shell 显示的启动项与 UEFI 启动选项中的项不同?

为什么 efibootmgr shell 显示的启动项与 UEFI 启动选项中的项不同?

我的启动项,如 efibootmgr 所示,如下:

Boot0000* rEFInd Boot Manager ...
Boot0001* Windows Boot Manager ...
Boot0004* UEFI: SanDisk, Partition 1 ...

这些相同的启动条目显示在 /sys/firmware/efi/efivars 中,并通过 UEFI shell 检查时也会显示。

但是,它们在 UEFI 设置启动优先级菜单中的列出方式不同:

1. USB Device:UEFI: SanDisk, Partition 1
2. Windows Boot Manager
3. PCIE SSD:Windows Boot Manager (SAMSUNG ...)
4. PCIE SSD
5. Others
6. Others
7. USB CD/DVD

假设 efibootmgr 显示的条目是“正确的”,为什么 UEFI 设置有更多条目?为什么 Windows 有两个条目?rEFInd 本身为什么没有条目?条目 5、6 和 7 代表什么?

本质上,我假设挂载 EFI 分区时看到的是真实存在的,那么这些无关的数据来自哪里?这是错误还是功能?

Info根据我的 UEFI 部分提供的主板信息:

BIOS Version: GP123
Build Date and Time: 05/13/2022 15:28:13
KBC Version: P004J0
Serial Number: 207QCCV566563
Product Name: 16T90Q-K.AAC7U1
ME FW Version: 16.0.15.1662
PCH Version: A1

答案1

部分这个答案的其中一个原因可能是固件自己的 UI 向您显示了 BIOS/CSM/传统模式启动选项。这些选项通常不会显示在efibootmgr查询 EFI 启动顺序的其他工具的输出中,因为 CSM 选项的处理方式与“常规”EFI 启动选项略有不同。我见过类似的事情发生在某些具有其他硬件特定启动选项(例如网络启动选项)的系统上;但这些选项似乎更常通过常规 EFI 启动顺序变量来处理,因此它们通常会出现在两个列表中。

至于为什么 rEFInd 会出现在efibootmgr输出中,但不会出现在固件自己的启动管理器中,恐怕我不知道。这听起来像是固件错误,但也可能是设计使然。我并不是说主板制造商可能会专门隐藏 rEFInd;只是他们可能隐藏了固件无法识别或以固件不支持的方式格式化的条目。如果 rEFInd 正在启动,那么我不会太担心这一点,但您应该记住这一点,因为这可能会使某些恢复过程复杂化——例如,如果 Windows 将其启动管理器重置为默认设置,您将无法依赖计算机自己的启动管理器和已安装的 rEFInd 版本来解决问题;您需要从 Windows 执行此操作或依赖其他方法来解决问题,例如将 rEFInd 放在 USB 闪存驱动器上,从那里启动并进入 Linux,然后使用它efibootmgr来调整启动顺序。

如果您真的想探究缺失 rEFInd 启动选项的奥秘,那么我建议您尝试以其他方式重新安装它。例如,如果您从 Linux 安装了 rEFInd,那么您可以下载最新的 rEFInd USB 映像,从中启动,并使用其自安装功能。这应该会覆盖您现有的 rEFInd 安装(但保留您现有的配置文件)并创建一个新的启动项。这可能有帮助,因为 rEFInd 的自安装功能使用 EFI 的工具来创建启动项,而efibootmgr(rEFInd 在您从 Linux 安装时使用)使用其自己的方法来创建项。结果是每种方法都会创建略有不同的 NVRAM 项。如果 EFI 的启动管理器正在过滤由 创建的项efibootmgr,那么从其自身安装 rEFInd 可能会解决该问题。同样,如果您使用其自安装工具安装了 rEFInd,那么您可以尝试refind-install在 Linux 中使用(或使用适当的命令创建新项efibootmgr),或从 Windows 安装(这是第三种方法)。

相关内容