文件系统把磁盘抽象成「按名存取」的目录树,屏蔽块设备物理细节。
inode:文件元数据,与文件名分离。一个文件 = 一个 inode + 若干数据块。
inode 存:类型/权限、大小、链接数、时间戳、数据块指针(直接 + 间接)。文件名不在 inode 里,在目录项里。
目录项: name → inode 号
inode: 元数据 + 块指针[] → 数据块
好处:硬链接共享 inode、元数据与数据分离、支持稀疏文件。inode 用尽则磁盘有空闲也无法新建文件(df -i 查)。
| 方式 | 思路 | 优点 | 缺点 |
|---|---|---|---|
| 连续分配 | 文件占连续块 | 顺序访问快、简单 | 外部碎片、难扩展 |
| 链接分配 | 块尾指针指向下一块 | 无外部碎片、易扩展 | 随机访问慢、指针损坏则链断 |
| 索引分配 | inode 存索引表指向所有块 | 随机访问快、无碎片 | 索引表占用空间、多级索引复杂 |
现代系统(ext4、NTFS)用索引分配变体(extent 区段),FAT 用链接分配变体(FAT 表集中存链)。
| FAT32 | ext4 | NTFS | |
|---|---|---|---|
| 用途 | 移动存储、嵌入式 | Linux 主流 | Windows 主流 |
| 分配 | FAT 表 + 链接 | extent 区段 | MFT + extent |
| 元数据 | 目录项内 | inode | MFT 记录 |
| 日志 | 无 | 有(journal) | 有(journal) |
| 权限 | 无 | POSIX 权限/ACL | ACL |
| 文件大小 | ≤ 4GB | 16TB+ | 16EB |
核心差异:FAT 无日志、无权限,断电易损;ext4 与 NTFS 都有日志(先写日志再写数据,崩溃可恢复),ext4 用 inode、NTFS 用 MFT,都是「元数据集中 + extent 索引」。