3、硬盘分区与格式化:MBR与GPT分区表、主分区与扩展分区、文件系统格式化原理、分区对齐对性能的影响

3.1 MBR与GPT分区表——老规矩与新标准

说到硬盘分区,第一个绕不开的就是分区表。我刚开始做DVR那会儿,用的全是MBR。那时候硬盘容量普遍在500GB到1TB之间,MBR完全够用。但后来监控项目越做越大,单盘容量飙到4TB、8TB甚至16TB,MBR就开始力不从心了。

MBR(主引导记录),说白了就是硬盘的第一个扇区(LBA 0)。它里面存了两样东西:一段引导代码和分区表。分区表只有64字节,每条分区记录占16字节,所以最多只能有4个主分区。你想想看,4个分区哪够用?所以后来才有了扩展分区的概念——把其中一个主分区变成“容器”,在里面再切逻辑分区。

MBR还有一个硬伤:它用32位逻辑块地址(LBA)来寻址。每个扇区512字节的话,最大只能管理2TB的硬盘。超过2TB的部分,系统根本认不出来。我在一个老项目里就踩过这个坑——客户买了块4TB硬盘,插上去只显示2TB,查了半天才发现是MBR的限制。

⚠️ 注意: 如果你还在用MBR分区表管理超过2TB的硬盘,系统只会识别前2TB空间,后面的空间就白白浪费了。这在NVR项目中尤其常见,因为监控录像动辄就是几十TB的存储需求。

GPT(GUID分区表) 就是来解决问题的。它用64位LBA寻址,理论上支持高达9.4ZB的硬盘容量。而且GPT没有主分区数量限制,Windows下最多支持128个分区,Linux下几乎没有限制。GPT还在硬盘头和尾各存了一份分区表备份,万一主分区表损坏了,还能从备份恢复——这个设计我特别喜欢,做嵌入式系统时可靠性太重要了。

我个人习惯是:所有新项目一律用GPT。除非是兼容老旧的BIOS启动设备,否则没必要再用MBR。UEFI+GPT已经是标配了。

特性 MBR GPT
最大磁盘容量 2TB 9.4ZB
主分区数量 4个(含扩展分区) 无限制(Windows限制128个)
分区表备份 有(头尾各一份)
引导方式 Legacy BIOS UEFI
可靠性 一般 高(CRC校验)

3.2 主分区与扩展分区——分区布局的学问

在MBR时代,分区布局是个技术活。4个主分区的限制,逼着大家用扩展分区来“曲线救国”。我记得有一次给一个16盘位的NVR做系统,客户要求每个硬盘分3个区:系统区、缓存区、录像区。如果用MBR,每个硬盘只能有4个主分区,刚好够用。但如果某个硬盘需要更多分区,就必须用扩展分区了。

扩展分区 本身不能存数据,它只是一个“容器”。你可以在扩展分区里创建任意多个逻辑分区。逻辑分区的数量没有硬性限制,但实际项目中我一般不超过10个,太多了管理起来也麻烦。

在GPT下,这些限制都不存在了。你可以直接创建任意数量的主分区。所以如果你用的是GPT,根本不需要关心什么扩展分区、逻辑分区——直接全上主分区就行。

💡 实战建议: 在DVR/NVR项目中,我通常这样分区:
  • 系统分区:50-100GB,存放操作系统和应用程序
  • 缓存分区:硬盘容量的5%-10%,用于录像写入缓冲
  • 录像分区:剩余全部空间,用于存储监控录像
这样分区的好处是:系统崩溃时不会影响录像数据,缓存分区能提升写入性能。

3.3 文件系统格式化原理——不只是“格式化”那么简单

很多人觉得格式化就是把硬盘清空,其实没那么简单。格式化分为两种:低级格式化高级格式化

低级格式化 是硬盘出厂时做的,由硬盘厂商完成。它会划分磁道、扇区,标记坏道。普通用户不需要做低级格式化,而且现在的硬盘也不支持用户级别的低格操作。我曾经见过有人用低级格式化工具折腾SSD,结果把硬盘搞废了——嗯,这里要注意,千万别乱来。

高级格式化 才是我们日常说的“格式化”。它做的事情是:创建文件系统结构,包括超级块、inode表、目录项等。不同的文件系统,格式化后的结构完全不同。

在DVR/NVR项目中,我常用的文件系统有这几种:

  • ext4:Linux下最成熟的选择。支持日志、大文件、在线扩容。我大部分项目都用它。
  • XFS:适合超大文件和高并发写入。录像文件动辄几十GB,XFS的表现比ext4好一些。
  • Btrfs:支持快照和压缩,但稳定性不如ext4。我一般只在实验环境用。
  • NTFS:Windows下的标准文件系统。如果NVR跑在Windows上,那就只能用NTFS了。

格式化时还有一个关键参数:块大小(block size)。默认是4KB,但如果你知道你的文件都是大文件(比如录像文件),可以设置成64KB甚至1MB。块越大,大文件的读写性能越好,但会浪费更多空间(内部碎片)。

# 格式化时指定块大小为64KB
mkfs.ext4 -b 65536 /dev/sda1

# 查看格式化后的文件系统信息
tune2fs -l /dev/sda1 | grep -i "block size"
🔑 核心要点: 格式化不是简单的“清空数据”,而是创建文件系统的元数据结构。选择合适的文件系统和块大小,能显著影响录像写入性能。

3.4 分区对齐对性能的影响——一个容易被忽视的细节

分区对齐,说白了就是让分区的起始位置正好是物理扇区的整数倍。为什么这个很重要?因为现代硬盘(包括SSD)的物理扇区大小是4KB,而不是传统的512字节。如果分区没有对齐,一个4KB的物理扇区可能被两个逻辑块共享,导致一次写入操作需要读-改-写两次,性能直接腰斩。

我曾经在一个项目中遇到过:同样的硬件,同样的文件系统,有的硬盘写入速度能达到150MB/s,有的只有80MB/s。查了两天才发现是分区没对齐。用fdisk重新分区对齐后,性能立刻恢复正常。

怎么检查分区是否对齐?

# 查看分区起始扇区
fdisk -l /dev/sda

# 如果起始扇区能被8整除(512字节扇区)或能被8整除(4KB扇区),说明对齐了
# 例如:起始扇区为2048,2048 ÷ 8 = 256,对齐了

在Linux下,用parted工具可以确保分区对齐:

# 使用parted创建对齐的分区
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary 0% 100%
parted /dev/sda align-check optimal 1

如果align-check返回optimal,说明分区已经对齐了。

分区起始扇区 是否对齐(4KB扇区) 性能影响
63 ❌ 未对齐 性能下降30%-50%
2048 ✅ 对齐 正常性能
4096 ✅ 对齐 正常性能
⚠️ 避坑指南: 我曾经用旧版本的fdisk分区,默认起始扇区是63,结果所有分区都没对齐。后来我改用parted或者新版fdisk(2.25+),默认就会自动对齐。所以,一定要用新版本的分区工具

对于SSD来说,分区对齐更加重要。SSD的擦除块大小通常是512KB或1MB,如果分区没对齐,写入放大效应会更严重,不仅性能下降,还会缩短SSD的寿命。在NVR项目中如果用SSD做缓存盘,分区对齐是必须保证的。

好了,这一章的内容就到这里。分区表的选择、分区的布局、文件系统的格式化、分区对齐——这四个环节环环相扣,任何一个出问题都会影响整个存储系统的性能和可靠性。下一章我会讲文件系统的挂载和自动挂载配置,到时候再聊。


公众号:蓝海资料掘金营,微信deep3321