Linux系统篇(十九)——文件(三):底层存储入门:从机房硬件到 CHS/LBA 磁盘寻址全解析
从机房硬件层级讲到磁盘物理结构,再到 CHS 三维寻址与 LBA 线性寻址的转换原理,完整打通底层存储认知。
项目背景
很多做开发、运维的同学日常只和文件、数据库、接口打交道,很少深究数据到底是怎么实实在在存在物理磁盘里的。当遇到 IO 性能瓶颈、磁盘分区故障、存储寻址报错时,只会模糊知道"磁盘慢""分区坏了",却说不清底层硬件、磁盘结构、寻址逻辑的完整链路。
本文从最宏观的机房、服务器硬件逐层向下拆解:先搞懂磁盘物理形态与存储划分,再理清操作系统访问磁盘的逻辑流程,最后吃透传统 CHS 寻址与现代 LBA 线性地址两种核心定位方式,帮你完整打通计算机存储底层基础认知,看懂数据从内存落到盘片的全过程。
技术方案
认识存储硬件层级:磁盘 → 服务器 → 机柜 → 机房
我们存放数据的物理载体有一套清晰的层级架构,从最小存储单元到大型集群机房层层递进:
- 磁盘(硬盘):最基础的存储介质,分为机械硬盘 HDD 和固态硬盘 SSD,所有业务原始数据最终都保存在磁盘内部的盘片/闪存颗粒中,是数据持久化的最小单元。机械磁盘是计算机中唯一的机械设备,属于外部存储设备,读写速度相对较慢,但存储容量大、单位存储成本低;
- 服务器:一台主机机箱内部搭载多块磁盘,配合 CPU、内存、RAID 卡组成独立计算存储节点,单台服务器可完成业务计算加本地数据存储;
- 机柜:机房中的标准化金属机柜,一台机柜可堆叠数十台服务器,配套供电、散热、交换机,实现多台服务器集中部署、统一运维;
- 机房:成百上千机柜集中放置的专业机房,配套精密空调、UPS 不间断电源、消防、安防、专线网络,承载企业海量数据存储与线上业务运行,是互联网、云计算的物理底座。
简单来说:无数磁盘装在服务器里,服务器上架进机柜,全部机柜统一部署在机房,构成整个互联网的数据存储硬件底座。
磁盘物理结构:看得见的硬件组成
拆开一块传统机械硬盘,核心物理组件分为几部分:盘片、磁头、主轴马达、磁臂、控制电路板。
- 盘片:圆形金属薄片,两面涂有磁性涂层,依靠磁粉磁化方向记录 0/1 二进制数据,一块硬盘会堆叠多张盘片;
- 磁头:每张盘片上下各一个磁头,负责读写盘片上的磁性数据,读写时磁头悬浮在盘片表面,不直接接触盘面;
- 主轴马达:带动所有盘片高速旋转(常见 7200 转/分、10000 转/分),盘片转动才能让磁头读取环形轨道上的数据;
- 磁臂:承载所有磁头同步伸缩移动,控制磁头定位到盘片不同半径的轨道;
- 控制电路板:硬盘自带微型处理器、缓存,负责接收主板指令、转换读写信号、缓存临时数据。
SSD 固态硬盘没有盘片、磁头、马达,依靠 NAND 闪存颗粒存储,物理结构和寻址逻辑与机械盘有区别,但操作系统上层的访问逻辑是通用的。
磁盘存储结构:盘面上的数据划分规则
为了有序存储数据,盘片表面被提前规划出标准化几何分区,核心概念有 4 个:磁道、扇区、柱面、簇。
- 磁道(Track):盘片旋转形成的同心圆轨道,同一半径一圈即为一条磁道;
- 扇区(Sector):磁道被切分出的最小物理读写单元,传统磁盘单扇区 512 字节,现代磁盘为 4K 扇区。所有磁盘读写操作的最小粒度是扇区,无法读写半个扇区的数据。所以如果要修改一个字节,操作系统就要把那个字节所在的整个扇区全部加载到内存中;
- 柱面(Cylinder):所有盘片上半径相同、对齐的一组磁道合称为一个柱面。磁臂移动一次,所有磁头会同时对齐到同一柱面。
CHS 定址法:如何确定一个扇区
- 定位柱面(Cylinder):先移动磁头臂,让所有磁头同步对准目标柱面的对应磁道,这是整个寻址的第一步;
- 选定磁头(Head):在当前对准的柱面中,激活对应盘面的磁头,确定要访问的具体盘面;
- 定位扇区(Sector):等待盘片旋转,让目标扇区移动到当前磁头下方,完成最终的位置定位。
用柱面(Cylinder)、磁头(Head)、扇区(Sector)三个坐标显然可以定位数据,这就是数据定位(寻址)方式之一——CHS 寻址。
CHS 寻址对早期的磁盘非常有效,知道用哪个磁头、读取哪个柱面上的第几扇区,就可以读到数据了。但 CHS 模式支持的硬盘容量有限:系统用 8bit 存储磁头地址、10bit 存储柱面地址、6bit 存储扇区地址,而一个扇区有 512 字节,这样使用 CHS 寻址一块硬盘的最大容量为:
磁盘容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
= 256 × 1024 × 63 × 512B ≈ 8064 MB
(按 1MB=1000000B 来算约为 8.4GB)
磁盘逻辑结构:操作系统如何读写磁盘
抽象理解:想象有一盘磁带,磁带上面可以存储数据,我们可以把磁带"拉直"形成线性结构。磁盘本质上虽然是硬质的,但逻辑上可以把它想象成卷在一起的磁带,于是磁盘的逻辑存储结构也类似——每一个扇区就有一个线性地址(其实就是数组下标),这种地址叫做逻辑块地址(Logical Block Address)LBA。
真实过程:传动臂上的磁头是共进退的。柱面是一个逻辑上的概念,其实就是每一面上相同半径的磁道在逻辑上构成柱面。所以磁盘物理上分了很多面,但从逻辑上看,整个磁盘由"柱面"卷起来(即物理地址连续)。
LBA 定址法:
- 某一盘面的某一个磁道展开就是一维数组;
- 整个磁盘所有盘面的同一个磁道(柱面)展开是二维数组;
- 整个磁盘就是多张二维的扇区数组表(三维数组)。
所以寻址一个扇区:先找到哪一个柱面(Cylinder),再确定柱面内哪一个磁道(其实就是磁头位置 Head),最后确定扇区(Sector),这就是 CHS。而无论几维数组,在计算机里面本质都是一维数组,所以每一个扇区都有一个下标,叫做 LBA(Logical Block Address)地址,即线性地址。
LBA 和 CHS 的转换:
CHS 转 LBA:
磁头数 × 每磁道扇区数 = 单个柱面的扇区总数
LBA = 柱面号C × (磁头数 × 每磁道扇区数) + 磁头号H × 每磁道扇区数 + 扇区号S - 1
注意:扇区号通常从 1 开始,而 LBA 中地址从 0 开始;柱面和磁道从 0 开始编号。总柱面数、磁道个数、扇区总数等信息在磁盘内部自动维护,上层开机时会获取到这些参数。
LBA 转 CHS:
柱面号C = LBA // (磁头数 × 每磁道扇区数) // 即单个柱面的扇区总数
磁头号H = (LBA % (磁头数 × 每磁道扇区数)) // 每磁道扇区数
扇区号S = (LBA % 每磁道扇区数) + 1 // "//" 表示整除
从此往后,磁盘使用者根本不需要关心 CHS 地址,而是直接使用 LBA 地址,磁盘内部自己完成转换。从现在开始,磁盘就是一个元素为扇区的一维数组,数组的下标就是每一个扇区的 LBA 地址,OS 使用磁盘时就可以用一个数字访问磁盘扇区了。
CHS 和 LBA 的对比
| 寻址方式 | 定位逻辑 | 适用硬盘容量 | 现状 |
|---|---|---|---|
| CHS | 柱面 + 磁头 + 扇区三维坐标 | ≤8GB | 淘汰,仅兼容老旧设备 |
| LBA | 全局连续线性数字编号 | 百 GB ~ 百 TB | 现代磁盘标准寻址方案 |
系统架构
从数据落盘的完整链路看,存储体系呈明显的分层结构:
- 机房层:机柜 + 供电 + 散热 + 网络,承载服务器集群;
- 主机层:服务器内部多块磁盘 + CPU + 内存 + RAID 卡;
- 物理层:盘片/磁头/马达构成机械结构,磁道、扇区、柱面定义几何布局;
- 逻辑层:LBA 把扇区线性化为一维数组,OS 通过数字下标直接访问;
- 寻址转换:磁盘控制器内部自动完成 LBA ↔ CHS 换算,对上层透明。
实施过程
- 先建立硬件层级认知:观察真实服务器与机房部署,理解磁盘在其中的位置;
- 拆解(或观察图示)一块机械硬盘,对照盘片、磁头、磁臂、马达、电路板五个组件;
- 理解磁道、扇区、柱面三个几何概念,计算 CHS 寻址的最大容量限制;
- 亲手做 LBA ↔ CHS 互转计算,验证公式的数值一致性;
- 在 Linux 下用 fdisk -l 查看磁盘参数(磁头数、每道扇区数等),与理论对应。
应用价值
- 遇到磁盘寻址报错、分区工具异常时,能看懂 CHS/LBA 参数的含义;
- 理解扇区最小读写粒度后,就明白为什么"改一个字节要读整个扇区",从而理解 4K 对齐的意义;
- 知道 LBA 线性寻址后,可以更深入地理解分区表(MBR/GPT)与磁盘容量上限的关系;
- 为后续学习文件系统(块、inode、分区)打下坚实的底层基础。
SEO关键词
磁盘存储, CHS寻址, LBA寻址, 扇区, 磁道, 柱面, 机械硬盘, 磁盘结构
