磁盘分区基础:MBR 与 GPT 分区表结构、主分区与扩展分区、分区对齐与性能
说到磁盘分区,这可能是我们运维工作中最基础、也最容易踩坑的环节之一。我记得刚入行那会儿,给一台老服务器加硬盘,随手就用 fdisk 分了区,结果系统死活起不来。后来一查,磁盘超过 2TB,MBR 根本认不全。嗯,从那以后,我对分区表结构就再也不敢马虎了。
MBR 与 GPT:两种分区表的恩怨情仇
先聊聊 MBR(Master Boot Record)。这东西诞生于上世纪 80 年代,跟 IBM PC 一起出道。它的结构其实很简单:磁盘的第一个扇区(512 字节)被拿来放引导代码和分区表。其中分区表只占了 64 字节,每个分区条目固定 16 字节。你算算,64 除以 16,正好 4 个分区。这就是为什么 MBR 最多只能有 4 个主分区。
MBR 还有一个硬伤——它用 32 位来记录扇区地址。32 位能表示的最大值是 2^32,也就是约 43 亿个扇区。按每个扇区 512 字节算,总容量上限就是 2TB。我在项目中遇到过一台存储服务器,挂载了 3TB 的 SAS 盘,用 MBR 分区后系统只认到 2TB,剩下的空间直接消失。你说坑不坑?
GPT(GUID Partition Table)就是来救场的。它是 UEFI 规范的一部分,用 64 位记录扇区地址,理论上支持 8ZB 的容量——你想想看,这基本等于没有上限。GPT 把分区表放在磁盘头部和尾部各一份,互为备份。万一主表坏了,还有备份可以恢复。我个人习惯,只要是新装的系统,一律用 GPT。
关键区别一览:
| 特性 | MBR | GPT |
|---|---|---|
| 最大容量 | 2TB | 8ZB |
| 主分区数 | 最多 4 个 | 最多 128 个(Windows 限制) |
| 备份分区表 | 无 | 有(磁盘尾部备份) |
| 引导方式 | BIOS + MBR | UEFI + GPT |
| CRC 校验 | 无 | 有(保护分区表完整性) |
主分区与扩展分区:MBR 时代的妥协方案
MBR 只能有 4 个主分区,这显然不够用。于是工程师们想了个办法——扩展分区。说白了,扩展分区就是一个特殊的「容器」,里面可以再划分逻辑分区。你想想看,主分区是房间,扩展分区就是客厅,逻辑分区就是客厅里放的几个柜子。
具体怎么用?举个例子:
# 用 fdisk 查看分区表
fdisk -l /dev/sda
# 输出示例
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1026047 1024000 500M 83 Linux
/dev/sda2 1026048 41943039 40916992 19.5G 83 Linux
/dev/sda3 41943040 62914559 20971520 10G 83 Linux
/dev/sda4 62914560 104857599 41943040 20G 5 Extended
/dev/sda5 62916608 73402367 10485760 5G 83 Linux
/dev/sda6 73404416 83890175 10485760 5G 83 Linux
看到没?sda4 是扩展分区,sda5 和 sda6 是它里面的逻辑分区。这里有个坑:扩展分区本身不能存数据,它只是占个位置。我曾经遇到一个同事,把扩展分区直接格式化挂载了,结果数据全丢了。嗯,这个教训挺深刻的。
注意:GPT 没有扩展分区的概念。所有分区都是主分区,最多 128 个。所以如果你用 GPT,就不用纠结主分区和逻辑分区的问题了。
分区对齐:一个被忽视的性能杀手
分区对齐,说白了就是让分区的起始扇区正好落在物理块的边界上。为什么重要?因为现代硬盘(尤其是 SSD)的物理块大小是 4KB,而操作系统默认的扇区大小还是 512 字节。如果分区起始位置不对齐,一个 4KB 的写操作可能跨越两个物理块,导致读-改-写操作,性能直接腰斩。
我记得有一次给数据库服务器换 SSD,分区没对齐,结果 4K 随机写入性能只有理论值的一半。后来用 parted 重新分区,指定起始扇区为 2048(正好是 1MB 对齐),性能立马翻倍。你想想看,就一个参数的事,差距这么大。
怎么检查分区是否对齐?很简单:
# 查看分区起始扇区
fdisk -l /dev/sda
# 或者用更直观的方式
parted /dev/sda align-check optimal 1
# 返回 "1 aligned" 表示对齐
对齐的黄金法则是:起始扇区号能被 8 整除(512 字节 * 8 = 4KB)。更保险的做法是 1MB 对齐,也就是起始扇区为 2048 的倍数。我个人习惯,不管什么磁盘,一律 1MB 对齐。省心,也兼容性好。
小技巧:用 parted 创建分区时,指定 --align optimal 参数,它会自动帮你算好对齐位置。比如:parted /dev/sdb mkpart primary ext4 0% 100% --align optimal
实战建议:怎么选?
说了这么多,总结一下我的经验:
- 磁盘小于 2TB,且是老系统(BIOS 引导):用 MBR 没问题。但注意主分区别超过 4 个,超过就用扩展分区。
- 磁盘大于 2TB,或者新系统(UEFI 引导):无脑上 GPT。别犹豫,MBR 的 2TB 限制早晚会坑你。
- SSD 或 NVMe 盘:必须对齐。不对齐的话,寿命和性能都会受影响。我曾经见过一块没对齐的 SSD,用了半年写入放大率飙到 5 倍,寿命直接打五折。
- 分区工具选择:fdisk 适合 MBR,gdisk 和 parted 适合 GPT。我个人更推荐 parted,功能全,对齐支持好。
最后说一句:分区表这东西,一旦写下去再改就麻烦了。所以动手之前,一定要想清楚。嗯,今天就聊到这儿,下一节我们讲文件系统格式化,到时候再细聊。