3. 分区表结构解析:MBR与GPT的区别,分区表在嵌入式系统中的布局
分区表这东西,说白了就是一张「地图」。它告诉操作系统:你的存储芯片里,哪块区域归谁管,从哪里开始,到哪里结束。我刚开始做嵌入式存储时,觉得这玩意儿不就是几个字节嘛,后来踩了坑才知道——分区表选不对,整个设备都可能变砖。
这一节,咱们就掰开揉碎,看看 MBR 和 GPT 到底差在哪,以及它们在嵌入式系统里该怎么摆。
3.1 MBR:老将的辉煌与局限
MBR(Master Boot Record)诞生于 1983 年,跟 IBM PC/XT 一个时代。它放在存储设备的第一个扇区(LBA 0),一共 512 字节。结构很简单:
- 引导代码(446 字节):启动时执行的代码,负责加载操作系统。
- 分区表(64 字节):最多记录 4 个主分区,每个分区占 16 字节。
- 结束标志(2 字节):固定为 0x55AA,校验用。
嗯,这里要注意——MBR 的分区表项只有 16 字节,其中记录起始 LBA 和分区大小的字段各占 4 字节。4 字节能表示的最大值是 2^32,也就是 2TB。所以 MBR 磁盘最大只能认到 2TB,超过的部分就浪费了。
另外,MBR 的分区表只有一份,没有备份。一旦 LBA 0 扇区损坏,整个磁盘的数据就全丢了。这在嵌入式设备里尤其致命——设备往往在恶劣环境下运行,扇区损坏的概率不低。
3.2 GPT:现代存储的标配
GPT(GUID Partition Table)是 UEFI 时代的产物。它不再用 512 字节的 MBR,而是用了一套更健壮的方案。
GPT 的结构是这样的:
- 保护 MBR(LBA 0):一个假的 MBR,告诉老系统「这块盘已被占用」,防止误操作。
- GPT 头(LBA 1):记录分区表的位置、大小、校验和,以及备份 GPT 的位置。
- 分区表项(LBA 2~33):默认 128 个表项,每个 128 字节,支持 18EB 的容量。
- 备份 GPT(磁盘末尾):主 GPT 的完整副本,用于灾难恢复。
我个人习惯,只要存储容量超过 2TB,或者设备对可靠性要求高,一律用 GPT。为什么?
| 对比项 | MBR | GPT |
|---|---|---|
| 最大容量 | 2TB | 18EB |
| 分区数量 | 4 个主分区 | 128 个(默认) |
| 备份机制 | 无 | 主+备份两份 |
| 校验机制 | 无 | CRC32 校验 |
| 兼容性 | 所有系统 | UEFI 系统 |
你想想看,嵌入式设备里,存储芯片动不动就是 64GB、128GB,甚至 1TB 的 eMMC。如果用 MBR,超过 2TB 的部分就废了。而且设备一旦部署到现场,分区表损坏了,没有备份,那就只能返厂维修。GPT 的备份机制,说白了就是给你留了一条后路。
3.3 嵌入式系统中的分区表布局
嵌入式系统的分区表布局,跟 PC 很不一样。PC 上你装个 Windows,一个 C 盘就完事了。但在嵌入式设备里,分区表要兼顾启动、系统、数据、日志、升级等多个需求。
我做过一个数据采集设备,用的是 64GB eMMC,分区表长这样:
| 分区名称 | 起始 LBA | 大小 | 文件系统 | 用途 |
|---|---|---|---|---|
| boot | LBA 2048 | 64MB | raw | 存放 u-boot 和内核 |
| system_a | LBA 133120 | 2GB | ext4 | 主系统镜像(A/B 升级用) |
| system_b | LBA 4325376 | 2GB | ext4 | 备用系统镜像 |
| config | LBA 8517632 | 128MB | ext4 | 设备配置参数 |
| data | LBA 8779776 | 剩余空间 | ext4 | 采集数据存储 |
| log | LBA 末尾 | 512MB | ext4 | 运行日志 |
这个布局有几个关键点:
- boot 分区用 raw 格式:不需要文件系统,直接写二进制镜像,启动加载器直接读取。
- A/B 系统分区:system_a 和 system_b 互为备份。升级时写 system_b,写完后切换启动。万一升级失败,还能回滚到 system_a。
- config 分区独立:配置参数单独放一个分区,避免系统升级时被覆盖。
- log 分区放末尾:日志文件频繁写入,放在末尾可以减少对前面数据分区的影响。
3.4 MBR vs GPT:嵌入式场景怎么选?
说实话,现在新设计的嵌入式设备,我基本都推荐 GPT。但有些老平台或者资源受限的 MCU,可能只支持 MBR。怎么选?看这几个条件:
- 存储容量:超过 2TB,必须 GPT。小于 2TB,两者都行。
- 启动方式:UEFI 启动必须 GPT,Legacy BIOS 启动必须 MBR。
- 可靠性要求:设备部署在无人值守环境(比如野外气象站),建议 GPT,利用备份机制防数据丢失。
- 系统兼容性:如果设备需要兼容 Windows XP 或老版本 Linux,MBR 更稳妥。
我个人的经验是:能用 GPT 就用 GPT。MBR 的 2TB 限制和单点故障风险,在嵌入式场景里太致命了。你想想看,一个数据采集设备在深山老林里跑了三年,突然分区表坏了,数据全丢——这代价谁扛得住?
3.5 分区表布局的核心逻辑
说了这么多,咱们用一张图把分区表布局的核心逻辑串起来。
这张图展示了一个典型的嵌入式设备分区表布局。从 LBA 0 开始,依次是 GPT 头、boot 分区、A/B 系统分区、config 分区、data 分区和 log 分区。每个分区各司其职,互不干扰。