据我所知,在 UEFI 机器中没有 MBR/VBR 代码,并且 UEFI 固件直接将控制权交给 OS 引导加载程序(.efi 文件)。
我的问题是,这种制度的第一部分应该包含什么?有什么标准吗?
因为当我在 VMware 中检查某些 Windows 10 虚拟机上的第一个扇区时,即使虚拟机配置为使用 GPT 的 UEFI,第一个扇区仍然是 MBR 代码(invalid partition table
末尾有字符串并以 0x33 开头)。第二个扇区以 开头EFI PART
,我认为这与 UEFI 有关。
我的问题是:
UEFI 机器的第一个扇区应该包含什么?第二个扇区呢?有什么标准吗?
某些 UEFI 机器的第一个扇区的 MBR 代码有什么问题?
答案1
我的问题是,这种制度的第一部分应该包含什么?有什么标准吗?
它记录在UEFI 规范,作为整体 GPT 布局描述的一部分。
根据第 5.2 节,第一个扇区(LBA 0)仍然具有与非 GPT 磁盘相同的一般结构:440 字节用于 BIOS 引导代码,72 字节用于分区表。
UEFI 系统确实不使用 MBR 中的 BIOS 启动代码,因此在纯 UEFI 系统上它可能会被清零——但它可能有一个实际的引导加载程序,使磁盘也可以通过 BIOS 引导。(例如,GRUB2 和 Syslinux 将在 BIOS 模式下在 GPT 磁盘上运行。)
许多 UEFI 系统磁盘都会有一些剩余的 BIOS 启动代码,因为如果重新安装操作系统,这些代码通常不会被删除。
GPT 磁盘不使用 MBR 中的分区表,但它仍然必须存在 - 它需要包含一个覆盖整个磁盘的“保护性”分区,并防止旧的 GPT 不软件工具将磁盘视为未分区(这很容易导致意外数据丢失)。
(请注意,UEFI 启动本身并不需要 GPT 分区 - 也可以在纯 MBR 分区磁盘上创建包含 .efi 文件的相同“EFI 系统分区”。但对于系统磁盘来说,这是一种不寻常的组合,并且规范仅正式描述了可移动磁盘(例如 USB 记忆棒)。
第二个扇区以 EFI PART 开始,我认为这与 UEFI 相关。
第二扇区(LBA 1)是 GPT 分区表的起始位置。GPT 的前 8 个字节只是一个“神奇数字”,表示这确实是 GPT(而不是 GRUB 的一部分或该许可系统遗留的一些垃圾)。
来自第 5.3.2 节:“ Signature
:标识 EFI 兼容的分区表头。此值必须包含 ASCII 字符串“EFI PART”,编码为 64 位常量 0x5452415020494645。”