Re:Linux系统篇(二十五):文件系统(一):磁盘硬件底层原理:从物理结构到 CHS/LBA 寻址,搞懂硬盘数据的定位逻辑


观众老爷们大家好 这里是邪修KING的独家频道 本文属于系列Linux系统篇 ------文件系统 一起学Linux的小伙伴可订阅专栏: Linux系统篇

我们每天在电脑上存储文档、照片、视频,接触的都是 C 盘、D 盘里的文件和文件夹。但你有没有想过,这些数据最终落在硬盘上,究竟是怎么存放的?系统又是怎么精准找到某一个文件的?

很多人听过磁道、扇区、柱面这些名词,但始终一知半解。本文就从机械硬盘的物理结构讲起,一步步拆解 CHS 和 LBA 两种寻址方式,带你看懂硬盘最底层的数据定位逻辑。

一、机械硬盘的物理构成

机械硬盘(HDD)是计算机中为数不多的纯机械设备,依靠磁效应来存储数据。它最大的特点是容量大、单价低,但读写速度慢,和现在常用的固态硬盘(SSD)形成互补。

整个硬盘的核心部件可以分为三类:盘片、磁头组件、主轴。

1. 盘片(Platter)

盘片是数据真正的载体,就像一张圆形的光盘,表面涂有磁性材料。一个硬盘内部可以叠放多张盘片,每张盘片的上下两个盘面都可以存储数据,每个盘面对应一个磁头。

2. 磁头与磁头臂

每个盘面都配有一个磁头,就像写字的笔尖,负责在盘片上读取和写入数据。

⚠️ 一个非常重要的特性:所有磁头都固定在同一个磁头臂上,共进退。也就是说,当一个磁头移动到某一圈磁道上时,其他所有盘面的磁头,都会对准相同半径的位置。

3. 主轴

主轴带动所有盘片高速旋转,我们常说的 7200 转、5400 转,指的就是主轴每分钟的转速。转速越高,读写的延迟就越低。

二、磁盘的存储结构:磁道、扇区、柱面

盘片是圆形的,数据不可能随便乱堆,它被划分成了一层层规整的结构,就像我们在纸上画格子写字一样。

1. 磁道(Track)

盘片上一圈圈的同心圆,就是磁道。从外圈开始编号,0 磁道、1 磁道、2 磁道...... 越往内圈半径越小。最靠近主轴的一圈是磁头停靠区,不存储数据。

可以类比成老式唱片上的一圈圈纹路,每一圈就是一条磁道。

2. 扇区(Sector)

把一个磁道均匀切成一个个扇形的小块,每一块就是一个扇区。

  • 扇区是磁盘物理读写的最小单位,传统机械硬盘的扇区大小固定为 512 字节。
  • 每个磁道上的扇区数量是相同的。

可以类比成把披萨切成均等的小块,每一块披萨就是一个扇区。

3. 柱面(Cylinder)

因为所有磁头共进退,所有盘面上、半径相同的磁道,合起来就构成了一个 "柱面"。

  • 柱面数 = 单个盘面的磁道总数
  • 柱面是磁盘分区的最小单位

4. 磁盘容量计算公式

知道了这几个概念,我们就能算出一块硬盘的总容量:

磁盘容量 = 磁头数 × 柱面数 × 每磁道扇区数 × 每扇区字节数

举个例子:2 张盘片 = 4 个磁头,1024 个柱面,每磁道 63 个扇区,每个扇区 512 字节,总容量就是 4 × 1024 × 63 × 512 ≈ 126MB。

三、CHS 寻址:早期的三维定位

早期的硬盘,就是通过柱面(Cylinder)、磁头(Head)、扇区(Sector) 这三个参数来定位一个扇区,简称 CHS 寻址。

它的逻辑就像三维坐标:

  1. 先确定柱面号:让磁头臂移动到对应的磁道上
  2. 再确定磁头号:选中具体哪个盘面
  3. 最后确定扇区号:等盘片旋转到对应扇区经过磁头下方,就可以读写数据了

CHS 的局限

当年的系统给 CHS 三个参数分配的位数有限:

  • 磁头:8 位
  • 柱面:10 位
  • 扇区:6 位

按这个位数计算,最大能支持的容量约为 8GB。硬盘容量超过 8GB 后,CHS 寻址就不够用了。所以现在的操作系统,基本不再直接使用 CHS 寻址。

四、LBA 寻址:现代硬盘的线性地址

既然三维的 CHS 不够用,人们就想到了简化:把整个硬盘所有的扇区,按顺序排成一个一维数组,给每个扇区编一个号,从 0 开始,这个编号就是LBA(逻辑块地址)。

可以理解成:把卷起来的磁带完全拉直,每一小段按顺序排号,想找哪一段,直接报编号就行,不用再说第几圈第几个。

1. CHS 与 LBA 的转换

CHS 和 LBA 是可以互相换算的:

  • CHS 转 LBA :LBA = 柱面号C × (磁头数 × 每磁道扇区数) + 磁头号H × 每磁道扇区数 + 扇区号S - 1
    减 1 是因为扇区号从 1 开始编号,而 LBA 从 0 开始。
  • LBA 转 CHS :
    就是反过来做除法取整、取余:
    • 柱面号 = LBA // (磁头数 × 每磁道扇区数)
    • 磁头号 = (LBA % (磁头数 × 每磁道扇区数)) // 每磁道扇区数
    • 扇区号 = (LBA % 每磁道扇区数) + 1

2. 关键结论

现在的操作系统,根本不需要关心 CHS 地址,直接使用 LBA 地址访问硬盘。CHS 和 LBA 之间的转换工作,完全由硬盘内部的固件(硬件电路 + 伺服系统)自动完成。

对上层软件来说,硬盘就是一个 "元素为扇区的一维数组",数组的下标就是 LBA 地址。

总结

理解磁盘的物理结构和寻址方式,是理解文件系统的基础。我们知道了硬盘最底层是一个个 512 字节的扇区,用 LBA 编号来定位。

但我们平时不可能直接用扇区号去存数据,那样太反人类了。我们需要的是 "文件名、文件夹、权限" 这些更友好的概念,这就是文件系统要做的事 ------ 把零散的扇区组织成可管理的文件。

相关推荐
sunshine22 girl1 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs1 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
Maynor9962 小时前
开源12个电商出图Agent Skills:GPT Image 2.5一键出图
gpt·ai绘画·跨境电商·claude code·agent skills·gpt image
youdexiang2 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
Felven2 小时前
stress-ng 与 fio 性能测试工具使用指南
linux·测试工具·fio·stress-ng
sunshine22 girl2 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat2 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
XiaoMaqqqq2 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
huainingning3 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘3 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器