使用GPT时“活动分区”是如何确定的?

使用GPT时“活动分区”是如何确定的?

根据https://superuser.com/a/1081043/380318使用 GPT 时,不存在“活动分区”的概念。

据我所知,使用 MBR 分区时,MBR 中的一些最少代码会查找“活动分区”并在该分区中执行一些引导代码。

当 GPT 不再具有“活动分区”的概念时,如何确定要启动的操作系统?

背景

在更新了一些操作系统补丁后,系统无法启动,并显示“未找到操作系统”消息,我不得不重新安装引导加载程序。所以我想知道是什么损坏了引导机制,导致出现该消息。

也许我应该补充一点,这台机器是在 VMware 下运行的,而我不是 VMware 配置的管理员。可能是 VMware 中的某些“BIOS 更新”导致了这个问题,但这个问题只有在操作系统重新启动时才会显现出来。

我无法更改设置,但我查了一下,固件启动选项设置为“BIOS(推荐)”。

实际的引导加载程序是 GRUB2,当系统引导时,我看到了 上有两个分区sda,但是都没有“活动标志”:

  1. “BIOS 启动”(8MB)
  2. “Linux 文件系统” (24G)

也许这些事实使情况变得更加复杂:

有两个未分区的“原始”磁盘,并且当前已连接一个可启动介质(DVD 映像),该介质具有 MBR 标签、EFI(类型 0xef)分区和隐藏(类型 0x17)分区,该分区标记为活跃

可能是在启动失败时该图像未连接。

答案1

这取决于:

  • 对于纯 EFI 启动,固件 NVRAM包含“启动项”,这些项通过其 GPT PARTUUID 直接指向特定分区,并指向该分区内的特定文件。运行efibootmgr(使用-v旧版本上的选项)以查看当前存储的 NVRAM 项。

    它完全存储在 NVRAM 中,而不是磁盘本身上 - 当固件设置被重置时,或者当 NVRAM(“CMOS”)由于某种原因被清除时,所有启动条目都会消失,有时如果固件找不到相应的分区(例如由于磁盘被暂时移除),它会删除“陈旧的”启动条目。

    (多个启动项可以同时处于“活动”状态(包括同一分区内的多个文件);大多数 EFI 实现都提供了一个菜单供您选择,就像您从可启动磁盘中进行选择一样。请参阅第3节的规范。

  • 对于从可移动磁盘进行 EFI 启动(或在 NVRAM 没有有效启动项的情况下),固件会扫描全部它可以识别的文件系统的分区,然后尝试从固定路径引导文件\EFI\Boot\Boot<arch>.efi(例如BootX64.efi);参见桌子

    此过程始终使用具有此类文件的第一个分区。分区的“类型 GUID”不一定会影响此过程 – 固件可能扫描所有分区,无论其类型如何。(但对于可移动磁盘,规范实际上只需要一个EFI 分区。)可以安全地假设固件将按分区表顺序进行扫描,并在第一个匹配后停止查找。

    虽然有些操作系统会在此位置安装引导加载程序的副本,从而允许 EFI 引导在 NVRAM 引导条目消失的情况下继续工作,但并非所有操作系统都会这样做。例如,除非明确告知将磁盘视为 ,否则 GRUB2 不会将自身安装在 bootx64.efi 上--removable

在 BIOS 启动模式下,即使磁盘是 GPT 分区,初始启动代码仍然位于“保护性 MBR”中的相同位置,并且仍然以与纯 MBR 磁盘相同的方式进行:

  • 对于使用 Syslinux 从 GPT 磁盘进行 BIOS 样式启动,Syslinux“GPT 兼容”MBR 使用与活动位相同的机制。GPT 中的每个分区都有64 标志位(0–63)与其相关;位 2 是 Syslinux 用作“传统 BIOS 可启动”标志的。

    gdisk您可以通过“额外功能”菜单设置GPT分区属性。

  • 对于使用 GRUB 从 GPT 磁盘进行 BIOS 样式的启动...好吧,GRUB 从一开始就不关心“活动”分区或它们的 VBR – 它的 MBR 而是从硬编码的起始位置加载 GRUB 内核(在 grub 安装时写入 MBR)。

    在 GPT 磁盘上,GRUB 内核安装到具有特殊类型 GUID 的分区(而不是藏在分区之间),但只有 grub-install 关心这一点 - GRUB MBR 仍然从固定 LBA 加载内核。

  • 还可以拥有一个通常采用 GPT 分区的“混合”磁盘,但其保护性 MBR 具有一个实际的分区条目,其中的“活动”标志指向所需位置(而不是通常的覆盖整个磁盘的保护条目),从而允许 GPT 未知的启动扇区从 GPT 磁盘启动。

答案2

“活动分区”的概念是指选择一个分区来读取引导加载程序。如果有多个操作系统安装,则它们各自的引导加载程序将安装在各自的分区中,因此分区表用于允许共同安装。

使用 EFI,引导加载程序是 FAT 文件系统内的一个文件,而共同安装则通过在 FAT 中预留空间来管理。这消除了引导加载程序的大小限制,并允许使用更复杂的方法来查找下一阶段文件,因此不再需要“活动分区”机制。

基本上,这一直是一个拐杖,因为分区引导加载程序只有几百字节的代码,并且需要可靠地选择正确的分区来继续,即使有多个有效候选项,所以选择从中引导的分区的 MBR 加载程序将传递此信息。

现代系统通常在硬盘和实际文件系统之间具有加密、冗余和卷管理等附加层,因此早期引导阶段很可能完全不知道下一阶段实际上在哪里,因此现在不再将单个标志附加到分区,而是为引导加载程序提供命令行,并提供从 ESP 加载配置文件的选项。

在多个引导加载程序之间切换是 BIOS 的任务,它在 NVRAM 中保存引导菜单条目列表。只有bootx86.efibootx64.efi文件可以在没有注册的情况下使用,这就是可移动媒体的引导方式。

相关内容