我们每天在电脑上存文档、装软件,却很少想:这些文件到底 “藏” 在磁盘的哪个角落?操作系统又是怎么精准找到它们的?要搞懂 Linux 常用的 Ext 系列文件系统,得先从磁盘底层和基础概念说起 —— 就像盖房子,得先摸透地基和砖瓦。
一、磁盘不是 “黑盒子”:物理结构拆解
机械磁盘是电脑里少有的 “会动” 的设备,它的结构像极了 “多层 CD 播放机”,核心零件用比喻一讲就懂:
| 物理结构 | 通俗比喻 | 核心作用 |
|---|---|---|
| 盘片(Platter) | 多层 CD 光盘 | 存储数据的 “载体”,每片盘片有上下两个面(比如 CD 的正反面),两面都能存数据 |
| 磁头(Head) | CD 读写头 | 每个盘面对应 1 个磁头,负责 “读 / 写” 盘面上的数据,磁头很轻,会在盘面上方 “悬浮” |
| 主轴(Spindle) | CD 转盘 | 带动盘片高速旋转(比如每分钟 7200 转),让磁头能扫过整个盘面 |
| 磁道(Track) | CD 上的同心圆 | 盘片旋转时,磁头不动会划出一圈圈 “同心圆”,这就是数据的 “跑道” |
| 扇区(Sector) | 切好的蛋糕块 | 磁盘存储的最小物理单位,每个扇区固定 512 字节(相当于 “一页纸”) |
| 柱面(Cylinder) | 叠起来的同心圆 | 所有盘片上 “半径相同的磁道” 叠在一起,形成一个 “圆柱”—— 磁头移动时会 “共进退”,所以柱面是分区的最小单位 |

举个直观的例子:如果一个磁盘有 2 个磁头(对应 1 个盘片的两面)、1024 个柱面、每道 63 个扇区,那它的容量就是 “2×1024×63×512 字节”,算下来大概 64MB—— 这就是早期小磁盘的常见配置。
二、找文件像找快递:CHS 与 LBA 寻址
磁盘有了物理结构,下一步就是 “精准定位”—— 就像快递要填地址,文件也要有 “磁盘地址”。操作系统用两种寻址方式:CHS 和 LBA。
1. 早期的 “三维地址”:CHS 寻址
CHS 是 “柱面(Cylinder)- 磁头(Head)- 扇区(Sector)” 的缩写,相当于给每个扇区定了个 “三维坐标”:
比如要找一个文件,得先确定 “哪个磁头(对应哪个盘面)”,再找到 “哪个柱面(对应磁道半径)”,最后定位 “哪个扇区(磁道上的小块)”。
这种方式在小磁盘上好用,但有个致命缺点:容量上限太低。因为系统用 8 位存磁头数、10 位存柱面数、6 位存扇区数,算下来最大只能支持约 8GB 硬盘 —— 现在随便一个硬盘都是几百 GB,显然不够用。
2. 现代的 “快递单号”:LBA 寻址
为了解决容量问题,LBA(Logical Block Address,逻辑块地址)应运而生。它的思路特别简单:把磁盘所有扇区按顺序编上 “单号”(从 0 开始),比如第 0 个扇区、第 1 个扇区…… 就像快递单号,操作系统只用记 “单号”,不用管 “在哪个盘面、哪个柱面”。
比如文档里用fdisk -l命令查看的/dev/vda磁盘,有 83886080 个扇区,LBA 编号就是从 0 到 83886079。至于 “这个 LBA 编号对应哪个 CHS 坐标”,不用我们管 —— 磁盘内部的 “固件”会自动转换。
LBA 的优势很明显:容量没有上限,操作还简单,现在所有主流系统都用它。
三、操作系统的 “优化技巧”:块、分区与 inode
有了磁盘和寻址,操作系统还做了三个 “优化”,为 Ext 系列文件系统打基础:块、分区、inode。
1. 块(Block):扇区的 “打包盒”
扇区只有 512 字节,如果每次读文件都 “一个扇区一个扇区读”,就像每次取快递都只拿一件,来回跑十次 —— 效率太低。于是操作系统把8 个扇区打包成一个 “块”(最常见 4KB),作为 “文件存取的最小单位”。
你可以用stat命令看文件的块大小,比如stat main.c会输出 “IO Block: 4096”,意思是访问这个文件时,每次最少读 / 写 4KB。如果知道扇区的 LBA 编号,块号还能算出来:块号 = LBA ÷ 8。
2. 分区(Partition):磁盘的 “格子间”
一块 500GB 的磁盘,如果全用来存东西,一旦出问题整个磁盘的数据都可能丢;而且 Windows 和 Linux 的文件格式不兼容。于是有了 “分区”—— 把磁盘按柱面分成多个 “独立格子”,比如 Windows 的 C/D/E 盘、Linux 的/dev/vda1。
分区的本质是 “定好起始和结束柱面号”,用fdisk -l命令能看到分区信息。就像书架分格子,一个格子放系统,一个格子存数据,互相不干扰。
3. inode:文件的 “身份证”
我们常说 “文件 = 内容 + 属性”:内容是文字、图片,属性是 “谁建的、多大、什么时候改的、权限是多少”。但这两部分存在哪里?答案是:内容存在 “数据块”,属性存在 “inode”。
inode(索引节点)是文件的 “身份证”,每个文件对应一个唯一的 inode,里面记录了所有属性:
-
权限(比如
rw-r--r--)、所有者(比如root); -
文件大小、访问时间(Access)、修改时间(Modify);
-
指向数据块的 “指针”(告诉系统内容存在哪些块里)。
有两个关键点要记:
-
inode 号唯一:用
ls -li命令能看到,比如ls -li test.c输出的 “1052007” 就是 inode 号; -
文件名不在 inode 里:文件名存在 “目录” 中 —— 目录也是一种文件,它的数据块里存的是 “文件名 + inode 号” 的映射,比如 “test.c → 1052007”。
小结
看到这里,你应该能串起逻辑了:磁盘是物理载体→LBA 给扇区编 “单号”→块打包扇区提升效率→分区划分独立区域→inode 记录文件属性。这些是 Ext 系列文件系统的 “地基”,下一篇我们就来看 Ext 系统怎么用这些基础,实现文件的高效管理。
348

被折叠的 条评论
为什么被折叠?



