XFS文件系统结构
XFS 是 SGI(Silicon Graphics)在 1994 年开发的 高性能 64 位日志文件系统,现在广泛应用在 Linux(RHEL/CentOS 默认)。它的特点是 B+ 树索引、空间预分配、并发扩展性好。
1. XFS 文件系统整体结构
2. 主要组成部分
Superblock(超级块)
- 位于固定位置(文件系统开头和每个 AG 的开头有副本)。
- 存储整个 FS 的关键信息:块大小、UUID、日志位置、inode 大小、根目录 inode 等。
Allocation Groups (AGs)
核心设计:文件系统被划分为多个 AG,每个 AG 都像一个小型的文件系统。
优点:
- 并行 I/O(多个 CPU/线程可同时操作不同 AG)
- 分布式元数据(避免单点瓶颈)
每个 AG 包含:
- AG Superblock:该 AG 的本地信息
- AG Free Space Info:B+ 树存储空闲块信息
- AG Inode B+Tree:管理 inode 分配
- Data Blocks:文件数据和目录数据
Inodes
XFS 的 inode 通常 256B 或 512B,灵活可扩展。
inode 内部可以直接存放:
- 小文件数据(内联 data fork)
- 目录项数据(短目录内联)
大文件则存放 Extent Map(区间映射表) 指向数据块。
Extents
一个 extent = 连续的物理块集合。
inode 里记录的是
(起始块号, 长度),而不是单独的 block。好处:
- 减少碎片索引
- 提高顺序读写性能
B+ 树索引
XFS 大量使用 B+ 树:
- Free space B+Tree:追踪空闲块
- Inode B+Tree:管理 AG 内的 inode 分配
- Extent B+Tree:文件数据区间索引
- 目录 B+Tree:支持大目录快速查找
Journal / Log
- XFS 使用 metadata journaling(只记录元数据,不记录文件数据)。
- 日志可以内嵌在 FS 中,或者存储在单独的设备上。
- 保证崩溃恢复快速:只需要回放元数据操作。
3. 文件访问流程(简化版)
- 查找目录 inode
- 通过 B+ 树查找对应文件 inode
- 从 inode 获取 extent map
- 根据 extent 直接定位数据块
相比 ext4 的 block bitmap,XFS 直接使用 extent + B+ 树,查找效率在大文件场景下明显更高。
4. 结构优势
- 高扩展性:单文件系统最大支持 8EB(64 位寻址)
- 并发性能:多 AG 并行分配,避免锁竞争
- 元数据高效:B+ 树加速大文件和大目录操作
- 快速恢复:基于日志(metadata journaling)
5. 和 EXT4 的对比(直观记忆)
| 特性 | EXT4 | XFS |
|---|---|---|
| 分配单位 | Block + bitmap | Extent + B+ 树 |
| 元数据存储 | 集中式 | 分布式(多 AG) |
| 并发 | 一般 | 高(多 CPU 优化) |
| 单文件系统最大 | 1EB | 8EB |
| 崩溃恢复 | fsck(慢) | 日志回放(快) |
🔥总结一句话:
XFS 文件系统结构的核心就是 “Superblock + 多 AG(内含 inode + extent + B+ 树 + 日志)” 的分布式设计,强调高并发和大规模扩展性。