哪些 UEFI 可执行文件会被自动检测?

哪些 UEFI 可执行文件会被自动检测?

根据UEFI 的精彩概述,有 3 种类型的 UEFI 条目:

  • 兼容性启动将启动磁盘开头的任何内容,就像 BIOS 一样
  • 原生启动将从显式路径启动 EFI 可执行文件
  • 后备启动将从各种默认位置(基于架构、、等)启动 EFI/EFI/BOOT/BOOTx64.efi可执行/EFI/BOOT/BOOTaa64.efi文件

所有这些都是有道理的,但是当我从操作系统(在本例中为 CentOS)查看 EFI 系统分区时,会发现有更多的.efi文件。

+--EFI
|  +--boot
|  |  +--BOOTAA64.EFI
|  |  \--fallback.efi
|  +--centos
|  |  +--gcdaa64.efi
|  |  +--grubaa64.efi
|  |  +--MokManager.efi
|  |  +--shim-centos.efi
|  |  \--shim.efi

此外,启动管理器仅列出启动的选项/EFI/centos/shim.efi。此 CentOS 磁盘来自另一台计算机,因此此机器上的固件从未添加明确的条目shim.efi

为什么有这么多.efi文件?

启动管理器是如何找到的shim.efi

为什么启动管理器找不到所有其他.efi文件?

这个问题类似,但更多的是关于回退和本机启动之间的区别。

答案1

为什么有这么多.efi文件?

这些文件中的大部分都是支持文件。例如,MokManager 是一个用于管理机器所有者密钥 (MOK) 的工具,Shim 会使用它们来扩展计算机可识别的安全启动密钥的数量。如果 Shim 无法启动其默认的后续启动加载程序(通常是 GRUB),通常会调用 MokManager。看起来您在EFI/centos(shim.efishim-centos.efi) 中至少有两个 Shim 副本,并且EFI/boot/BOOTAA64.EFI可能是第三个 Shim 副本。其中一个副本可能是EFI/centos多余的——可能是上次使用不同名称或意外创建的安装遗留下来的。

Linux 开发人员也养成了创建新 EFI 程序文件的习惯,以解决问题或特殊情况。例如,您的安装在目录中显示 GRUB 的两个副本EFI/centos-除查找配置和支持文件的位置外,其余完全相同。(grubaa64.efi参见gcdaa64.efi此 Stack Exchange 问答了解有关此问题的更多信息。

启动管理器是如何找到的shim.efi

您已经(部分)回答了这个问题——在您所谓的“本机启动”中,计算机将引导加载程序的路径存储在 NVRAM 变量中。目前大多数 Linux 发行版默认使用 Shim,因此 NVRAM 变量将指向 Shim 二进制文件。当 Shim 启动时,它将向固件注册自身,然后启动后续引导加载程序(通常是 GRUB)。

为什么启动管理器找不到所有其他 .efi 文件?

标准 EFI 启动管理器不会主动扫描.efi文件,但后备文件名和某些 EFI 中的 Microsoft 启动加载程序除外。(在某些情况下,可能会将其他文件添加到启动列表中,例如网络启动条目和内置 EFI shell 的条目。)

相反,大多数 EFI 都依赖于 OS 安装程序在引导加载程序安装过程中注册引导加载程序。因此,CentOS 会将 Shim、GRUB 和相关.efi二进制文件写入 ESP,然后添加一个或多个 NVRAM 条目以指向它们。理论上,OS 可以在 ESP 上存储十个、一百个、一千个或更多文件.efi,并只注册其中一个。当您重新启动并按下进入 EFI 引导管理器所需的任何按键时,您将只看到 OS 安装程序添加的一个条目。您可以efibootmgr在大多数 Linux 发行版中使用该工具添加、删除或编辑这些条目。

据我所知,唯一主动扫描 EFI 引导加载程序的工具是:

  • 改装-- 这个旧的引导管理器主要用于 Mac,但也可以在基于 UEFI 的 PC 上使用。它会主动扫描大多数子目录中的引导加载程序EFI(即EFI/centos/EFI/BOOT/等),EFI/tools/这是一个值得注意的例外。请注意,rEFIt 不再维护。
  • 重新索引-- 这是我更新的 rEFIt 分支,它继承了 rEFIt 的主动扫描算法,并进行了一些调整,使其更好地与 Linux 配合使用,并明确修剪冗余或其他不必要的启动条目。因此,rEFInd 会显示.efi二进制文件和 Linux 内核(在大多数情况下是 EFI 程序文件,这要归功于EFI 存根加载器)。
  • GRUB 2 的配置脚本-- 依赖 GRUB 2 的发行版通常附带脚本,用于扫描.efi文件并将其添加到 GRUB 菜单。但与 rEFIt 和 rEFInd 不同,这些扫描是在 Linux(或其他主机操作系统)运行时进行的,而不是在启动时。

请注意,这些工具都不会影响 EFI 自己的启动管理器菜单中显示的内容;它们都会影响它们自己的菜单中显示的内容,仅此而已。理论上,其他工具可能会执行此类扫描。EFI可以每次启动时或根据用户命令进行此类扫描,但实际上我不知道有哪个会这样做;据我所知,所有 EFI 都依赖于自己的启动管理器和相关 NVRAM 条目。(有些有缺陷,导致这些 NVRAM 条目不可靠,因此使用后备文件名是实际必要的。)

相关内容