1. 存储基础与分区概念:物理硬盘结构、CHS与LBA寻址、MBR与GPT分区表详解

做存储这行十几年了,我见过太多因为不懂底层分区原理而把数据搞丢的案例。说实话,分区表这东西平时看不见摸不着,一旦出问题,那就是灾难级的。今天咱们就从最基础的物理硬盘结构开始,一步步把分区这件事彻底讲透。

1.1 物理硬盘的内部结构

你拆开一块机械硬盘,里面其实很简单——就是几张圆形的盘片叠在一起,每张盘片上下各有一个磁头在读写数据。盘片高速旋转,磁头在盘片表面来回移动,这就是硬盘工作的基本动作。

我个人习惯把硬盘想象成一个唱片机,只不过唱片机只有一张碟,而硬盘有好几张叠在一起。每张盘片叫一个盘面,每个盘面被划分成无数个磁道,磁道又被切成扇区。扇区是硬盘读写的最小单位,传统上是512字节,现在新硬盘基本都是4K扇区。

核心概念速览:

  • 盘面(Platter):硬盘中的物理盘片,双面可用
  • 磁头(Head):每个盘面对应一个磁头,负责读写
  • 磁道(Track):盘面上的同心圆轨道
  • 柱面(Cylinder):所有盘面上同一半径的磁道集合
  • 扇区(Sector):磁道上的最小存储单元,通常512B或4KB

这里有个容易混淆的点:柱面和磁道的区别。磁道是单个盘面上的,而柱面是所有盘面上同一半径磁道的集合。你想想看,如果硬盘有3张盘片(6个盘面),那么6个磁头在同一半径位置上的所有磁道就组成了一个柱面。这个设计是为了减少磁头移动——读写同一柱面上的数据,磁头只需要电子切换,不需要物理移动。

我的经验:早期操作系统做分区对齐时,经常以柱面为边界。这导致分区起始位置可能不是扇区整数倍,在4K扇区硬盘上会引发严重的性能问题。我曾经帮一个客户排查服务器IO延迟,最后发现就是分区没对齐,调整后性能提升了30%以上。

1.2 CHS寻址与LBA寻址

硬盘要读写数据,首先得告诉它数据在哪。这就涉及寻址方式了。

CHS寻址

CHS是Cylinder-Head-Sector的缩写,也就是用柱面号、磁头号、扇区号三个参数来定位数据。比如CHS地址 (0,0,1) 表示第0柱面、第0磁头、第1扇区——也就是硬盘的第一个扇区。

CHS寻址有个硬伤:它受限于BIOS中断INT 13h的规范。柱面最多1024个,磁头最多255个,扇区最多63个。算下来最大寻址范围只有:

1024 × 255 × 63 × 512字节 ≈ 8.4GB

嗯,8.4GB。放在今天连一个手机游戏都装不下。所以CHS早就被淘汰了,但它的概念还在——很多分区工具仍然用CHS来显示分区边界,方便老工程师理解。

LBA寻址

LBA(Logical Block Addressing)就简单粗暴多了。它把硬盘上所有扇区从0开始编号,第一个扇区是LBA 0,第二个是LBA 1,以此类推。操作系统只需要告诉硬盘「我要读LBA 1000这个扇区」,硬盘自己换算成实际的物理位置。

LBA的好处很明显:

  • 突破了CHS的容量限制,支持超大硬盘
  • 寻址逻辑简单,操作系统不用管硬盘内部结构
  • 兼容性好,SATA、SAS、NVMe都用LBA

LBA和CHS之间可以互相换算,公式其实不复杂:

LBA = (C × 最大磁头数 + H) × 最大扇区数 + (S - 1)

其中 C=柱面号, H=磁头号, S=扇区号

注意:CHS中的扇区号从1开始,而LBA从0开始。所以换算时要减1。这个细节我见过不少人搞错,导致分区表计算错误,硬盘直接认不出来。

1.3 MBR与GPT分区表详解

分区表就是硬盘的「目录」,告诉操作系统硬盘被分成了几块、每块从哪开始到哪结束。目前主流的分区表格式有两种:MBR和GPT。

MBR分区表

MBR(Master Boot Record)诞生于1983年,跟IBM PC/AT一起面世。它位于硬盘的第一个扇区(LBA 0),结构如下:

偏移地址 长度 内容
0x000 - 0x1BD 446字节 引导代码(Boot Code)
0x1BE - 0x1FD 64字节 分区表(4个条目,每个16字节)
0x1FE - 0x1FF 2字节 魔数 0x55AA(有效标志)

MBR分区表最多支持4个主分区。如果你想分更多区,就得把其中一个主分区设为扩展分区,然后在扩展分区里再建逻辑分区。逻辑分区的信息存在扩展分区的第一个扇区里,形成一个链表结构。

MBR的容量限制也很明显:分区表条目用32位LBA地址,最大只能寻址2^32个扇区。按512字节扇区算,就是2TB。超过2TB的硬盘用MBR,多出来的空间就浪费了。

避坑指南:我曾经遇到一个客户,买了3TB硬盘装系统,结果只认出来2TB。查了半天发现是MBR分区表的问题。换成GPT后,3TB全部认出来了。所以现在新硬盘超过2TB的,直接上GPT,别犹豫。

GPT分区表

GPT(GUID Partition Table)是UEFI时代的产物,它彻底解决了MBR的种种限制。GPT的结构比MBR复杂,但更健壮:

  • LBA 0:保护MBR(为了兼容老工具,里面放一个假的MBR)
  • LBA 1:GPT头部(包含分区表的位置、大小、校验等信息)
  • LBA 2-33:分区表条目(每个条目128字节,默认支持128个分区)
  • LBA -33 到 -1:GPT备份(硬盘末尾有完整备份,防止头部损坏)

GPT使用64位LBA地址,理论最大支持容量是2^64 × 512字节 ≈ 9.4ZB。这个数字大到什么程度?你想想看,目前全人类的数据总量都填不满一个GPT硬盘。

下面是MBR和GPT的对比:

特性 MBR GPT
最大容量 2TB 9.4ZB
分区数量 4个主分区(或3主+扩展) 默认128个
引导方式 BIOS/Legacy UEFI
备份机制 无(MBR损坏即全盘丢失) 硬盘末尾有备份GPT
校验机制 无 CRC32校验头部和分区表
分区ID 1字节类型标识 GUID全局唯一标识

重要提醒:MBR和GPT不能混用。一块硬盘要么是MBR,要么是GPT。转换分区表格式会清空所有数据,操作前务必备份。我见过有人用分区工具直接转换,结果数据全没了,哭都来不及。

1.4 分区表结构总览

为了让你更直观地理解整个分区表体系,我画了一张结构图:

分区表体系结构总览 物理硬盘结构 盘面 → 磁道 → 柱面 → 扇区(512B / 4KB) CHS 寻址 柱面/磁头/扇区 → 最大8.4GB LBA 寻址 逻辑块编号 → 支持超大容量 MBR 分区表 LBA 0:引导代码 + 分区表 4个主分区 / 扩展+逻辑分区 最大 2TB,无备份 GPT 分区表 LBA 0:保护MBR LBA 1-33:GPT头部+分区条目 最大 9.4ZB,有备份+CRC校验 操作系统识别与挂载 Windows(盘符) / Linux(挂载点) / macOS(宗卷) CHS已淘汰 LBA是主流 新硬盘选GPT 老系统用MBR

从这张图可以看得很清楚:物理结构在最底层,上面是寻址方式,再上面是分区表格式,最上面是操作系统怎么用这些分区。每一层都依赖下一层,任何一个环节出问题,数据就读不出来。

1.5 实战中的选择建议

说了这么多理论,最后给点实际建议。你拿到一块新硬盘,到底选MBR还是GPT?

  • 硬盘容量小于2TB:MBR和GPT都可以。如果要在老电脑上用(BIOS引导),选MBR。如果是UEFI引导,选GPT。
  • 硬盘容量大于2TB:必须用GPT。MBR认不全。
  • 装Windows 10/11:建议GPT + UEFI,启动更快,安全性更高。
  • 装Linux:GPT + UEFI是标配,grub2对GPT支持很好。
  • 做数据盘:GPT更稳妥,有备份不怕分区表损坏。

最后提醒一句:分区表操作是高风险操作。我见过太多人用DiskGenius、fdisk这些工具时手一抖,整个盘的数据就没了。操作前一定备份重要数据,最好先用dd命令把硬盘前几个扇区镜像出来。万一出问题,至少还能恢复分区表。