MBR 现在已开始退出历史舞台,是传统 BIOS 时代产物;现在 UEFI 时代已经使用 GPT 了
硬盘设备是由大量的扇区组成的,每个扇区的容量为 512 字节。
其中第一个扇区最重要,它里面保存着主引导记录(MBR, Master Boot Record)与分区表信息。就第一个扇区来讲,主引导记录需要占用 446 字节,分区表为 64 字节,结束符占用 2 字节;其中分区表中每记录一个分区信息就需要 16 字节,这样一来最多只有 4 个分区信息可以写到第一个扇区中,这 4 个分区就是 4 个主分区。
现在,问题来了—第一个扇区最多只能创建出 4 个分区?于是为了解决分区个数不够 的问题,可以将第一个扇区的分区表中 16 字节(原本要写入主分区信息)的空间(称之为扩 展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像 是一个占用 16 字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一 般会选择使用 3 个主分区加 1 个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区, 从而来满足多分区(大于 4 个)的需求。
分区表信息
MBR 分区表项(16 字节)
偏移 | 字节数 | 字段名 | 含义 |
|---|---|---|---|
0x00 | 1 | Boot Indicator | 启动标志:0x80=bootable,0x00=非启动分区 |
0x01 | 3 | Starting CHS | 起始柱面/磁头/扇区(CHS,已过时,常被填最大值占位) |
0x04 | 1 | Partition Type | 分区类型码(如 0x07 NTFS/exFAT, 0x83 Linux, 0x0B/0x0C FAT32, 0x05/0x0F 扩展分区 等) |
0x05 | 3 | Ending CHS | 结束 CHS(同上,多为占位) |
0x08 | 4 | Starting LBA | 起始扇区的 LBA(相对整个磁盘的绝对扇区号,小端) |
0x0C | 4 | Number of Sectors | 分区包含的扇区总数(小端,32 位,这就是 2 TiB 限制的根源) |
Boot Indicator
传统 BIOS 仅会从标记为 0x80 的主分区启动(通常只能有 0 或 1 个启动分区)。
CHS
3 字节 CHS 的结构:
Byte[0] = Head(0–255)
Byte[1] = Sector(低 6 位,取值 1–63) + Cylinder 高 2 位(位 6–7)
Byte[2] = Cylinder 低 8 位(合起来 Cylinder 为 10 位)。
现代系统基本依赖 LBA 字段;CHS 通常被写成“最大值”占位(如 FE FF FF 或 FF FF FF)表示“别管 CHS,看 LBA”。
Partition Type
0x05/0x0F 表示扩展分区(链到 EBR 继续挂逻辑分区)
0xEE 用于 GPT 的 Protective MBR。
2TiB 限制
MBR 的分区表把“起始扇区”和“扇区数量”都只用 32 位无符号整数记录。
在常见 512 B 逻辑扇区下,可寻址的最大扇区数为 2^32 个,于是最大容量 ≈ 2^32 * 512 = 2^41 Bytes ≈ 2TB
2^32 是可寻址的绝对扇区号(LBA)只有 32 位(无论分区从哪儿开始,分区的结尾 LBA 都不能超过 0xFFFFFFFF)
4K 逻辑扇区的理论值:若磁盘以 4096 B 逻辑扇区对外呈现,理论上限变为 16 TiB,但生态里大量系统/工具对 “MBR + 大扇区 + >2 TiB” 的兼容性不一致,实务中仍优先用 GPT。