文件系统(File System)是 OS 用来在存储设备(磁盘、SSD、U盘等)上组织、存储、检索、保护和管理文件数据的一套机制与数据结构集合。它介于“裸块设备”和“用户/应用程序”之间,把物理扇区抽象成“目录—文件—字节流”的层次视图。
核心职责
- 命名与寻址:把人类可读的路径(
/home/user/a.txt)映射到物理块地址。 - 空间管理:分配/回收磁盘块,记录哪些块空闲、哪些被占用。
- 元数据维护:存储权限、所有者、时间戳、大小、链接数等(inode / dentry / FAT 表等)。
- 数据布局:决定文件内容如何分散或连续存放,影响性能与碎片。
- 一致性保障:通过日志(journal)、写时复制(CoW)、fsck 等应对掉电/崩溃。
- 访问控制:结合 OS 权限模型(DAC/MAC)做读写执行控制。
典型抽象层级
应用程序 (open/read/write)
↓
VFS(虚拟文件系统,屏蔽差异)
↓
具体文件系统驱动(ext4/xfs/ntfs/apfs/ffs...)
↓
块设备层(bio/请求队列)
↓
磁盘/SSD 硬件
常见文件系统举例
- Linux:ext2/ext3/ext4、XFS、Btrfs、F2FS(闪存优化)、OverlayFS(容器)
- Windows:FAT32、exFAT、NTFS、ReFS
- macOS/iOS:HFS+、APFS
- 网络/分布式:NFS、CIFS/SMB、CephFS、GlusterFS、HDFS
- 内存/伪文件系统:tmpfs、procfs、sysfs、devtmpfs
关键概念(面试/工程常用)
- inode(索引节点):Unix 系文件系统中存元数据+块指针,文件名在目录项里。
- superblock:描述文件系统整体信息(魔数、块大小、挂载状态)。
- journal / log:先写日志再改数据,崩溃后可回放恢复。
- CoW:写时复制(Btrfs/ZFS/APFS),快照便宜、一致性强。
- mount:把一个文件系统实例挂到目录树的某个点,VFS 统一呈现。
- page cache:OS 把文件页缓存在内存,read/write 很多情况只碰内存。