09 - 文件系统:数据怎么存在硬盘上
内存断电就没了,我们的照片、文档、代码要长期保存,得放硬盘。可硬盘本质上只是一大片能存 0 和 1 的格子,它并不认识什么叫「文件」「文件夹」。是操作系统在上面盖了一层文件系统,才让我们能用「文件夹/文件」这种方式管理数据。
文件系统解决的问题
把硬盘想成一大块空地。如果没有任何规划,你把数据随便往上一倒,很快就会:
- 找不到自己之前存的东西在哪;
- 不知道哪块空地是空的、哪块已经占了;
- 想给文件改名、删除、扩容,无从下手。
文件系统就是硬盘上的这套管理规划,它负责:
- 给数据起名字、分门别类(文件、文件夹);
- 记录每个文件的数据具体存在硬盘的哪些格子里;
- 记账哪些空间已用、哪些空闲;
- 提供「打开 / 读 / 写 / 删除 / 重命名」这些操作。
就像图书馆:书(数据)是死的,真正让你能快速借到书的,是那套「分区 + 书架编号 + 检索目录」的管理制度。文件系统就是硬盘的图书馆管理制度。
文件夹只是一种「目录」
我们习惯的「文件夹套文件夹」的树状结构,其实是文件系统营造的一种组织方式:
/ (根目录)
├── 用户/
│ ├── 照片/
│ │ ├── 旅行.jpg
│ │ └── 头像.png
│ └── 文档/
│ └── 简历.pdf
└── 程序/
文件夹本身也是一种特殊文件,它里面记的是「我下面有哪些文件和子文件夹,它们各自的信息在哪」。一层层展开,就成了你熟悉的目录树。
文件是怎么真正存下的(直觉版)
一个大文件,往往不是连续存在硬盘上一整块的。硬盘用久了会「东一块空地、西一块空地」,一个大文件常被拆成很多小块,分散存进这些空地里。
那读的时候怎么知道去哪找?文件系统给每个文件维护一份「档案」(Linux 里叫 inode),里面记着:
- 文件多大、什么时候创建的、谁能读能写(权限);
- 它的数据分成了哪几块、每块存在硬盘的哪个位置。
读文件时,OS 先找到这份档案,按上面记的地址,把散落各处的块一块块拼起来给你。
有没有觉得眼熟?这和上一章「虚拟内存用页表把分散的物理页拼成连续假象」是同一种智慧:用一张「索引表」,把物理上分散的东西,组织成逻辑上整齐的样子。
顺便理解:为什么「删除」那么快,还能恢复
删一个几个 G 的大文件,一瞬间就完事,为什么?因为很多时候 OS 并没有真的去擦掉那些数据,只是把文件的「档案」划掉、把它占的空间标记成「空闲、可覆盖」。真实数据还躺在原地,直到被新数据覆盖。
这也解释了为什么误删的文件有机会被恢复——只要还没被新数据盖掉。
小结
- 硬盘本身只是一片存 0/1 的格子,文件系统是盖在上面的「管理制度」,让我们能用文件/文件夹管理数据。
- 它负责命名分类、记录每个文件存在哪、管理空闲空间、提供读写删等操作。
- 「文件夹树」是文件系统营造的逻辑组织;大文件在硬盘上常被拆块分散存储。
- 每个文件有份「档案」(inode)记录元信息和数据块位置——又是「用索引表拼出整齐假象」的思路。
- 删除通常只是划掉档案、标记空间可用,数据没被立刻擦掉,所以误删可能恢复。
下一章 → 10 - 为什么读硬盘比读内存慢那么多 | 回到 README 目录