2. MBR 与 GPT 分区表详解
在磁盘扇区级恢复中,理解分区表结构是定位数据、重建引导链的基础。本章深入剖析 MBR 与 GPT 两种分区方案的底层布局、关键字段,并对比 UEFI 与 Legacy BIOS 的启动流程差异。
2.1 MBR 结构详解
MBR(Master Boot Record)位于磁盘的 0 号扇区(LBA 0),共 512 字节。它由三部分组成:主引导记录、磁盘分区表(DPT)和结束标志。
2.1.1 MBR 布局总览
关键指标:MBR 仅支持 4 个主分区,最大磁盘容量约 2.2 TB(512B 扇区)。分区表项共 64 字节,每项 16 字节。
| 偏移地址(十六进制) | 长度(字节) | 内容 | 说明 |
|---|---|---|---|
| 0x000 – 0x1BD | 446 | 主引导记录(Boot Code) | 第一阶段引导程序,负责加载活动分区 VBR |
| 0x1BE – 0x1CD | 16 | 分区表项 1 | 第一个主分区描述 |
| 0x1CE – 0x1DD | 16 | 分区表项 2 | 第二个主分区描述 |
| 0x1DE – 0x1ED | 16 | 分区表项 3 | 第三个主分区描述 |
| 0x1EE – 0x1FD | 16 | 分区表项 4 | 第四个主分区描述 |
| 0x1FE – 0x1FF | 2 | 结束标志 | 固定为 0x55AA |
2.1.2 分区表项结构(16 字节)
每个分区表项包含以下字段,恢复时需重点校验 起始 CHS/LBA 与 分区类型。
| 偏移 | 长度 | 字段 | 说明 |
|---|---|---|---|
| 0x00 | 1 | 引导标志 | 0x80 表示活动分区,0x00 表示非活动 |
| 0x01 – 0x03 | 3 | 起始 CHS 地址 | 磁头/扇区/柱面(旧式寻址) |
| 0x04 | 1 | 分区类型 | 0x07 NTFS,0x0C FAT32 LBA,0x83 Linux |
| 0x05 – 0x07 | 3 | 结束 CHS 地址 | 磁头/扇区/柱面 |
| 0x08 – 0x0B | 4 | 起始 LBA | 相对于磁盘开头的扇区偏移(小端序) |
| 0x0C – 0x0F | 4 | 分区总扇区数 | 该分区占用的扇区数量 |
恢复陷阱:MBR 分区表项损坏时,若 起始 LBA 与 分区类型 仍可识别,可尝试手动重建分区表。但 CHS 字段在现代大磁盘中已不准确,优先依赖 LBA 值。
2.1.3 MBR 结构内联 SVG
2.2 GPT 结构详解
GPT(GUID Partition Table)是 UEFI 规范推荐的分区方案,突破了 MBR 的 2.2 TB 限制,支持最多 128 个分区(Windows 默认)。GPT 磁盘在 LBA 0 保留一个 保护 MBR,真正的分区信息存储在后续扇区。
2.2.1 GPT 磁盘布局
| LBA 地址 | 内容 | 大小 | 说明 |
|---|---|---|---|
| LBA 0 | 保护 MBR | 512 字节 | 包含一个类型为 0xEE 的分区表项,防止旧工具误识别 |
| LBA 1 | GPT 头 | 512 字节 | 记录分区表位置、大小、CRC32 校验、GUID |
| LBA 2 – LBA 33 | 分区表项 | 32 × 128 字节 | 每个分区表项 128 字节,默认 128 个分区 |
| LBA 34 – … | 用户数据区 | 可变 | 第一个分区通常从 LBA 34 开始 |
| … – 倒数 LBA 34 | 用户数据区结束 | — | GPT 在磁盘末尾备份分区表 |
| 倒数 LBA 33 – 倒数 LBA 2 | 备份分区表项 | 32 × 128 字节 | 主分区表的完整副本 |
| 倒数 LBA 1 | 备份 GPT 头 | 512 字节 | GPT 头的备份 |
| 倒数 LBA 0 | 磁盘末尾保护扇区 | 512 字节 | 与 LBA 0 的保护 MBR 对应 |
2.2.2 GPT 头关键字段
GPT 头位于 LBA 1,前 8 字节固定为 EFI PART(45 46 49 20 50 41 52 54)。恢复时重点检查 分区表起始 LBA 和 CRC32 校验。
| 偏移 | 长度 | 字段 | 说明 |
|---|---|---|---|
| 0x00 | 8 | 签名 | EFI PART |
| 0x08 | 4 | 修订版本 | 通常为 0x00010000 |
| 0x0C | 4 | 头大小 | 通常为 92 字节(0x5C) |
| 0x10 | 4 | 头 CRC32 | 整个 GPT 头的校验值 |
| 0x18 | 8 | 当前 LBA | GPT 头所在 LBA(通常为 1) |
| 0x20 | 8 | 备份 LBA | 备份 GPT 头所在 LBA |
| 0x28 | 8 | 分区表起始 LBA | 通常为 2 |
| 0x30 | 4 | 分区表项数量 | 默认 128 |
| 0x38 | 4 | 分区表项大小 | 固定 128 字节 |
| 0x3C | 4 | 分区表 CRC32 | 所有分区表项的校验值 |
2.2.3 GPT 结构内联 SVG
2.3 UEFI 与 Legacy BIOS 启动流程对比
启动流程决定了引导修复工具的选择与操作顺序。Legacy BIOS 依赖 MBR 中的引导代码链式加载,UEFI 则直接读取 FAT 格式的 EFI 系统分区(ESP)中的 .efi 文件。
2.3.1 Legacy BIOS 启动流程
- POST:硬件自检,BIOS 初始化。
- 读取 MBR:BIOS 将磁盘 LBA 0 的 512 字节加载到内存
0x7C00。 - 执行引导代码:MBR 中的 446 字节代码扫描分区表,找到活动分区。
- 加载 VBR:读取活动分区的卷引导记录(VBR),执行其引导代码。
- 加载操作系统:VBR 加载
bootmgr(Windows)或grub(Linux)等引导管理器。
2.3.2 UEFI 启动流程
- UEFI 固件初始化:读取 NVRAM 中的启动项列表。
- 读取 GPT:固件识别 GPT 分区表,定位 EFI 系统分区(ESP,类型 GUID
C12A7328-F81F-11D2-BA4B-00A0C93EC93B)。 - 加载引导文件:从 ESP 分区的
\EFI\BOOT\BOOTX64.EFI(x64 架构)或 NVRAM 指定的路径加载引导程序。 - 执行引导程序:引导程序加载操作系统内核,进入保护模式。
2.3.3 启动流程对比表
| 对比维度 | Legacy BIOS + MBR | UEFI + GPT |
|---|---|---|
| 分区表 | MBR(4 主分区限制) | GPT(128 分区,无 2.2TB 限制) |
| 引导代码位置 | MBR 446 字节 + VBR | ESP 分区中的 .efi 文件 |
| 文件系统要求 | 无(直接读扇区) | ESP 必须为 FAT32 |
| 安全启动 | 不支持 | 支持 Secure Boot |
| 启动速度 | 较慢(链式加载) | 较快(直接加载 .efi) |
| 恢复复杂度 | 修复 MBR + 分区表 + VBR | 修复 GPT 头 + 分区表 + ESP 文件 |
2.3.4 启动流程对比内联 SVG
实战提示:当系统无法启动时,先判断磁盘使用 MBR 还是 GPT。使用
fdisk -l /dev/sda(Linux)或 diskpart + list disk(Windows PE)查看分区表类型。MBR 磁盘修复重点在 0 号扇区,GPT 磁盘则需同时检查 LBA 1 的 GPT 头和 LBA 2-33 的分区表项,并利用末尾备份恢复。