首页 / 知识库 / 进大厂必备计算机基础 / 计算机操作系统原理

09 - 文件系统:数据怎么存在硬盘上

内存断电就没了,我们的照片、文档、代码要长期保存,得放硬盘。可硬盘本质上只是一大片能存 0 和 1 的格子,它并不认识什么叫「文件」「文件夹」。是操作系统在上面盖了一层文件系统,才让我们能用「文件夹/文件」这种方式管理数据。

文件系统解决的问题

把硬盘想成一大块空地。如果没有任何规划,你把数据随便往上一倒,很快就会:

  • 找不到自己之前存的东西在哪;
  • 不知道哪块空地是空的、哪块已经占了;
  • 想给文件改名、删除、扩容,无从下手。

文件系统就是硬盘上的这套管理规划,它负责:

  • 给数据起名字、分门别类(文件、文件夹);
  • 记录每个文件的数据具体存在硬盘的哪些格子里;
  • 记账哪些空间已用、哪些空闲;
  • 提供「打开 / 读 / 写 / 删除 / 重命名」这些操作。

就像图书馆:书(数据)是死的,真正让你能快速借到书的,是那套「分区 + 书架编号 + 检索目录」的管理制度。文件系统就是硬盘的图书馆管理制度。

文件夹只是一种「目录」

我们习惯的「文件夹套文件夹」的树状结构,其实是文件系统营造的一种组织方式:

/                (根目录)
├── 用户/
│   ├── 照片/
│   │   ├── 旅行.jpg
│   │   └── 头像.png
│   └── 文档/
│       └── 简历.pdf
└── 程序/

文件夹本身也是一种特殊文件,它里面记的是「我下面有哪些文件和子文件夹,它们各自的信息在哪」。一层层展开,就成了你熟悉的目录树。

文件是怎么真正存下的(直觉版)

一个大文件,往往不是连续存在硬盘上一整块的。硬盘用久了会「东一块空地、西一块空地」,一个大文件常被拆成很多小块,分散存进这些空地里。

那读的时候怎么知道去哪找?文件系统给每个文件维护一份「档案」(Linux 里叫 inode),里面记着:

  • 文件多大、什么时候创建的、谁能读能写(权限);
  • 它的数据分成了哪几块、每块存在硬盘的哪个位置

读文件时,OS 先找到这份档案,按上面记的地址,把散落各处的块一块块拼起来给你。

有没有觉得眼熟?这和上一章「虚拟内存用页表把分散的物理页拼成连续假象」是同一种智慧:用一张「索引表」,把物理上分散的东西,组织成逻辑上整齐的样子。

顺便理解:为什么「删除」那么快,还能恢复

删一个几个 G 的大文件,一瞬间就完事,为什么?因为很多时候 OS 并没有真的去擦掉那些数据,只是把文件的「档案」划掉、把它占的空间标记成「空闲、可覆盖」。真实数据还躺在原地,直到被新数据覆盖。

这也解释了为什么误删的文件有机会被恢复——只要还没被新数据盖掉。

小结

  • 硬盘本身只是一片存 0/1 的格子,文件系统是盖在上面的「管理制度」,让我们能用文件/文件夹管理数据。
  • 它负责命名分类、记录每个文件存在哪、管理空闲空间、提供读写删等操作。
  • 「文件夹树」是文件系统营造的逻辑组织;大文件在硬盘上常被拆块分散存储
  • 每个文件有份「档案」(inode)记录元信息和数据块位置——又是「用索引表拼出整齐假象」的思路。
  • 删除通常只是划掉档案、标记空间可用,数据没被立刻擦掉,所以误删可能恢复。

下一章 → 10 - 为什么读硬盘比读内存慢那么多 | 回到 README 目录