UEFI 如何决定启动哪个 efi 文件?

UEFI 如何决定启动哪个 efi 文件?

是否有默认的 EFI 文件设置之类的东西。我有一个装有 Linux 的磁盘驱动器,还有多个 efi 文件。我的电脑无法启动它。我还有另一个装有 Windows 的磁盘驱动器,还有多个 efi 文件甚至文件夹。uefi 如何决定启动哪一个。是它遇到的第一个还是什么?编辑:修复拼写错误

答案1

它将路径存储在主板的 NVRAM(仍称为“CMOS 内存”)中。

详细信息可在免费提供的UEFI 规范(第 3 节)。EFI NVRAM 包含以下列表:启动选项变量名为Boot####(例如 Boot0001、Boot0002),每个变量都存储单个 .efi 文件的精确路径 - 包括分区的 GUID。

$ efibootmgr
BootCurrent: 0000
BootOrder: 0000,000F,0001
Boot0000* Linux Boot Manager
    HD(1,GPT,760e363e-[...],0x800,0x80000)/File(\EFI\systemd\systemd-bootx64.efi)
Boot0001* Windows Boot Manager
    HD(1,GPT,760e363e-[...],0x800,0x80000)/File(\EFI\Microsoft\Boot\Bootmgfw.efi)

启动选项不是按数字顺序使用的,而是按变量指定的顺序使用的BootOrder。(操作系统也可以设置BootNext为请求 EFI 重新启动一次直接进入其中一个启动选项,或者可以设置OsIndications请求重新启动进入 UEFI 设置屏幕。)

您可以使用以下方法查看与启动相关的 EFI 变量:

  • 在 Linux 上:(efibootmgr旧版本需要efibootmgr -v

    (您也可以通过 /sys/firmware/efi/efivars/ 列出所有 EFI 变量。)

  • 在 Windows 上:bcdedit /enum firmware

    请注意,bcdedit 输出使用 Windows BCD 特定的术语,并且一切看起来都与实际的 EFI 变量完全不同,但每个条目仍然代表一个“Boot####”项 - 除了 {fwbootmgr},其“displayorder”参数代表“BootOrder”。

  • 在里面电喷外壳bcfg boot dump

如果你从可移动介质启动(NVRAM 当然不知道)——或者如果你从内部磁盘启动,但 BootOrder 选项都不起作用——固件将寻找每个 EFI 系统分区中的特定路径 – 始终\EFI\Boot\BootX64.efi在 x86_64 系统上。(“3.5.1.1 可移动媒体启动行为”部分列出了每个 CPU 架构的名称。)

大多数操作系统安装程序都会将其引导加载程序的副本放置在 \EFI\Boot\BootX64.efi 中,以确保系统仍能启动到某物即使 NVRAM 数据丢失。

(最后……一些固件会自动查找\EFI\Microsoft\Boot\Bootmgfw.efi,因为 Windows 启动管理器就位于此处。如果幸运的话,固件将使用它作为第二条后备路径。然而,有些 UEFI 主板坚持只使用此路径,并拒绝启动 Windows 以外的任何其他程序。)

相关内容