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

tom*_*rty 5 boot multi-boot uefi dualboot

是否有默认的 EFI 文件设置之类的。我有一个装有 Linux 的磁盘驱动器和多个 efi 文件。我的计算机无法启动。我有另一个带有 Windows 和多个 efi 文件甚至文件夹的磁盘驱动器。uefi如何决定启动到哪一个。这是第一次遇到还是什么?编辑:修正拼写错误

use*_*686 9

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

\n

详细信息可以在免费提供的UEFI 规范(第 3 节)中找到。EFI NVRAM 包含一个名为(例如 Boot0001、Boot0002)的引导选项Boot####变量列表,每个变量都存储单个 .efi 文件 \xe2\x80\x93 的确切路径,包括分区的 GUID。

\n
$ efibootmgr\nBootCurrent: 0000\nBootOrder: 0000,000F,0001\nBoot0000* Linux Boot Manager\n    HD(1,GPT,760e363e-[...],0x800,0x80000)/File(\\EFI\\systemd\\systemd-bootx64.efi)\nBoot0001* Windows Boot Manager\n    HD(1,GPT,760e363e-[...],0x800,0x80000)/File(\\EFI\\Microsoft\\Boot\\Bootmgfw.efi)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

您可以使用以下命令查看与引导相关的 EFI 变量:

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

    \n

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

    \n
  • \n
  • 在 Windows 上:bcdedit /enum firmware

    \n

    请注意,bcdedit 输出使用 Windows BCD 特定术语,所有内容看起来与实际 EFI 变量完全不同,但每个条目仍然代表一个 \'Boot####\' 项 \xe2\x80\x93,除了 {fwbootmgr },其“displayorder”参数代表\'BootOrder\'。

    \n
  • \n
  • EFI 外壳中:bcfg boot dump

    \n
  • \n
\n

如果您从可移动媒体启动(NVRAM 当然不会知道)\xe2\x80\x93 或者如果您从内部磁盘启动,但所有 BootOrder 选项均不起作用 \xe2 \x80\x93 然后固件将在 x86_64 系统上的每个 EFI 系统分区 \xe2\x80\x93 中查找一个\\EFI\\Boot\\BootX64.efi特定路径。(“3.5.1.1 可移动介质引导行为”一节列出了每个 CPU 架构的名称。)

\n

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

\n

(最后...一些固件会自动查找\\EFI\\Microsoft\\Boot\\Bootmgfw.efi,因为那是 Windows 启动管理器所在的位置。如果幸运的话,固件将仅使用它作为第二个后备路径。然而,已经有 UEFI 主板它坚持只使用此路径并拒绝启动除 Windows 之外的任何其他路径。)

\n