文件系统并不只是“把文件放到磁盘里”的办法,它本质上是在回答三个问题:数据怎么组织,元数据怎么查找,故障发生时如何保证一致性。
如果从用户视角看,文件系统似乎只提供了目录、文件、权限和读写接口;但在实现层面,它还要处理块分配、空闲空间管理、inode 或目录项结构、缓存策略、崩溃恢复等大量细节。真正困难的地方在于,这些问题彼此耦合得很深。
一个好的文件系统不仅要快,还要在异常情况下尽量不把系统拖进不可恢复的状态。这也是为什么日志、copy-on-write、检查点和 fsck 这类机制会反复出现。性能和一致性之间从来不是同时白拿的,它们常常需要权衡。
另外,文件系统并不是孤立存在的。它和磁盘特性、页缓存、虚拟内存、应用访问模式都有关系。顺序写、随机写、小文件、大目录,这些负载差异会直接改变文件系统的表现。
所以“说说文件系统”最好的起点不是背诵名词,而是先记住:文件系统是操作系统在持久化世界里维持秩序的那层制度。