第 8 章 · 文件系统

文件系统把磁盘抽象成「按名存取」的目录树,屏蔽块设备物理细节。

8.1 文件与目录

  • 文件:逻辑存储单元,内容 + 属性(大小、权限、时间戳、所有者)。
  • 目录:也是文件,内容是「名字 → 文件」的映射表(目录项)。
  • 树形目录:绝对路径 / 相对路径;硬链接(多名字指向同一 inode)、软链接(符号链接,指向路径)。

8.2 inode

inode:文件元数据,与文件名分离。一个文件 = 一个 inode + 若干数据块。

inode 存:类型/权限、大小、链接数、时间戳、数据块指针(直接 + 间接)。文件名不在 inode 里,在目录项里。

目录项:  name  →  inode 号
inode:   元数据 + 块指针[]  →  数据块

好处:硬链接共享 inode、元数据与数据分离、支持稀疏文件。inode 用尽则磁盘有空闲也无法新建文件(df -i 查)。

8.3 文件分配方式

方式思路优点缺点
连续分配文件占连续块顺序访问快、简单外部碎片、难扩展
链接分配块尾指针指向下一块无外部碎片、易扩展随机访问慢、指针损坏则链断
索引分配inode 存索引表指向所有块随机访问快、无碎片索引表占用空间、多级索引复杂

现代系统(ext4、NTFS)用索引分配变体(extent 区段),FAT 用链接分配变体(FAT 表集中存链)。

8.4 FAT vs ext4 vs NTFS

FAT32ext4NTFS
用途移动存储、嵌入式Linux 主流Windows 主流
分配FAT 表 + 链接extent 区段MFT + extent
元数据目录项内inodeMFT 记录
日志有(journal)有(journal)
权限POSIX 权限/ACLACL
文件大小≤ 4GB16TB+16EB

核心差异:FAT 无日志、无权限,断电易损;ext4 与 NTFS 都有日志(先写日志再写数据,崩溃可恢复),ext4 用 inode、NTFS 用 MFT,都是「元数据集中 + extent 索引」。

8.5 日志与缓存

  • 日志(journaling):写数据前先记录意图,崩溃后重放/回滚,保证一致性。
  • 页缓存(page cache):文件数据缓存在内存,写延迟回磁盘(write-back),命中免磁盘 I/O。与第 7 章 CLOCK 访问位、第 6 章页表共用同一套页管理机制。