概述
XFS为用户呈现一个标准的Unix文件系统接口:一棵由directory、file、symbolic link、device组成的树,这些实体在文件系统内部均由一个index node表示(即inode),旧版本inode大小为256字节,V5之后改成512B~2KB,默认512B,可以在mkfs时指定大小,一个inode number唯一引用一个inode。XFS内被切分成若干相等的chunk(16MB到1TB),称为Allocation Group(即AG),几乎可以认为AG就是一个管理自己空间、inode以及其他次要元数据的独立文件系统。当并发访问量增加的时候,拥有多个AG使得XFS可以并行处理大部分操作而不会降低性能,AG使用多个B+ tree维护空闲块位置、已分配inode位置、空闲inode位置等的记录。
一个AG通常具有如下特征:
-
一个描述文件系统整体信息的super block;
-
inode分配与跟踪;
-
逆block-map索引(选配);
-
data block引用计数索引(选配);
AG组成
执行mkfs.xfs之后,AG的disk layout如下:
通常称XFS的第一个AG为primary AG,primary AG的super block维护着文件系统的全局信息,其他secondary AG的super block仅供xfs_repair使用。若super block中的XFS_SB_VERSION2_LAZYSBCOUNTBIT标记被置位,则仅在umount或shutdown更新disk对应内容。AG将空间划分为若干个相等大小的block并编号(File System Block,即FSB),AG使用两个B+tree跟踪free space,一个将block number做为key,一个将block count做为key,这种机制使得XFS能够快速找到接近指定block number或size的free space。AG使用一个free list为free space的两个B+tree预留空间,通常是4个block,耗尽则追加。AG基于可容纳64个inode的chunk分配inode,使用一个B+tree跟踪所有chunk中inode的分配与回收(即inode B+Tree),若设置了
XFS_SB_FEAT_RO_COMPAT_FINOBT属性,则会启用第二个B+tree跟踪那些包含空闲inode的chunk(即free inode B+tree),用于加速inode分配。