4. MBR 分区表深度解析

主引导记录(MBR)是传统 BIOS 引导流程中磁盘的第一个扇区(LBA 0),大小为 512 字节。它不仅是启动代码的载体,更是磁盘分区信息的核心存储结构。理解 MBR 的布局,是掌握传统引导架构和向 UEFI 过渡的基础。

4.1 MBR 整体结构(512 字节)

MBR 扇区被严格划分为三个部分:引导代码、分区表、以及结束签名。任何偏移或大小错误都会导致磁盘无法被 BIOS 识别或引导。

偏移(十六进制) 大小(字节) 内容 说明
0x0000 – 0x01BD 446 引导代码(Boot Code) 第一阶段引导程序,负责加载活动分区的 VBR。
0x01BE – 0x01FD 64 主分区表(Partition Table) 4 个分区表项,每个 16 字节。
0x01FE – 0x01FF 2 有效签名(Signature) 固定值 0x55AA,标识该扇区为有效 MBR。
关键约束: 分区表仅占用 64 字节,因此最多只能定义 4 个主分区。这是 MBR 架构最根本的容量和数量限制。
MBR 512 字节扇区布局 引导代码 (446 字节) 偏移 0x0000 - 0x01BD 主分区表 (64 字节) — 4 个表项 有效签名 0x55AA (2 字节) LBA 0

4.2 分区表项结构(16 字节)

每个分区表项精确描述一个分区的起始位置、大小和类型。以下是 16 字节的详细定义:

偏移(字节) 大小(字节) 字段 说明
0 1 引导标志 0x80 表示活动(可引导),0x00 表示非活动。
1-3 3 起始 CHS 地址 磁头/扇区/柱面(旧式寻址,通常用 LBA 替代)。
4 1 分区类型 标识文件系统或用途(如 0x07 为 NTFS)。
5-7 3 结束 CHS 地址 分区结束的 CHS 坐标。
8-11 4 起始 LBA 地址 分区的第一个扇区号(小端序)。
12-15 4 分区总扇区数 分区包含的扇区总数(小端序)。
实践要点: 现代操作系统几乎完全使用 LBA 地址(偏移 8-15 字节)进行寻址,CHS 字段通常被忽略或设置为最大值。LBA 使用 32 位字段,因此单个分区最大支持 2^32 × 512 字节 = 2 TB。

4.3 常见分区类型代码

分区类型字节(偏移 4)是 MBR 识别分区内容的关键。以下是最常用的类型代码:

类型代码(十六进制) 文件系统 / 用途 常见操作系统
0x00 空表项(未使用) —
0x01 FAT12 DOS / 早期 Windows
0x04 FAT16(小于 32 MB) DOS / Windows 9x
0x06 FAT16(大于 32 MB) DOS / Windows 9x
0x07 NTFS / HPFS Windows NT / 10/11
0x0B FAT32(CHS 寻址) Windows 95 OSR2+
0x0C FAT32(LBA 寻址) Windows / Linux
0x82 Linux swap Linux
0x83 Linux native(ext2/3/4) Linux
0x05 / 0x0F 扩展分区 所有支持 MBR 的系统

4.4 扩展分区与逻辑分区

由于 MBR 主分区表只有 4 个表项,为了突破这一限制,引入了扩展分区和逻辑分区的概念。这是一种通过链表结构在 MBR 框架内创建更多分区的机制。

4.4.1 工作原理

  1. 主分区: 4 个表项中的一个被标记为“扩展分区”(类型代码 0x05 或 0x0F)。
  2. 扩展引导记录(EBR): 扩展分区的第一个扇区是一个类似 MBR 的结构,但它不包含引导代码,只包含一个分区表项(指向下一个逻辑分区)和一个指向自身的链接。
  3. 逻辑分区: 每个 EBR 定义了一个逻辑分区的起始位置和大小。通过链式 EBR,可以创建任意数量的逻辑分区。
兼容性陷阱: 扩展分区本身不能直接存储数据,它只是一个“容器”。所有数据必须存放在逻辑分区中。此外,逻辑分区的链式结构在磁盘末尾或中间断裂会导致数据丢失,因此不建议在 MBR 磁盘上频繁调整扩展分区大小。
MBR 扩展分区与逻辑分区链式结构 MBR 主分区表 表项1: 主分区 表项2: 扩展分区 指向 EBR 1 逻辑分区 1 起始 LBA: X 下一项: EBR 2 指向 EBR 2 逻辑分区 2 起始 LBA: Y 下一项: 空 (0x00) 链式结构说明 • 主分区表中的一个表项被定义为扩展分区类型 (0x05/0x0F)。 • 扩展分区的起始扇区存放 EBR,EBR 内部包含一个指向逻辑分区的表项和一个指向下一个 EBR 的表项。 • 最后一个 EBR 的“下一项”指针为 0x00,表示链表结束。

4.5 MBR 的局限性总结

尽管 MBR 在 PC 历史上发挥了重要作用,但其设计缺陷在当今大容量存储时代愈发明显:

  • 分区数量限制: 最多 4 个主分区,或 3 个主分区 + 1 个扩展分区(内含多个逻辑分区)。
  • 容量上限: 32 位 LBA 寻址最大支持 2 TB 磁盘。超过 2 TB 的部分无法被 MBR 识别。
  • 单点故障: MBR 位于磁盘第一个扇区,如果该扇区损坏或被覆盖,整个磁盘数据将无法访问。
  • 缺乏冗余: 没有备份机制,也没有校验和来验证分区表完整性。
迁移趋势: 由于上述限制,现代操作系统(Windows 10/11、Linux 发行版)在 UEFI 模式下默认使用 GPT(GUID 分区表)。GPT 支持 128 个主分区、9.4 ZB 容量,并包含备份分区表,彻底解决了 MBR 的架构瓶颈。