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 包含:

  1. AG Superblock:该 AG 的本地信息
  2. AG Free Space Info:B+ 树存储空闲块信息
  3. AG Inode B+Tree:管理 inode 分配
  4. 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. 文件访问流程(简化版)

  1. 查找目录 inode
  2. 通过 B+ 树查找对应文件 inode
  3. 从 inode 获取 extent map
  4. 根据 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+ 树 + 日志)” 的分布式设计,强调高并发和大规模扩展性。