存储系列之 XFS文件系统简介

引言:磁盘容量越来越大,文件系统管理的文件也是越来越大、越来越多,如何破解?唯有快!于是动态分配、B+树开始登上舞台。还记得当年MySQL的索引结构吗,好的作品所见略同。

一、XFS为什么替换Ext4?

前面我们介绍过Linux ext系列的文件系统,我想ext系列应该是文件系统史上非常经典的杰作。在CentOS 7之前都是默认采用的这一系列文件系统。但是从CentOS 7开始默认的文件系统变成了xfs文件系统,为啥?

ext系列虽然支持度最广,但是格式化超慢。

ext文件系统系列对于文件格式化的处理方面,采用的是预先规划出所有inode、区块、元数据等数据,未来系统可以直接使用,不需要再进行动态配置的做法。即固定分配好文件系统所需的各种数据,不支持动态分配。这种做法,对于早期磁盘容量是合适的,但是对于当前大容量的磁盘缺陷就很明显了,例如TB以上等级传统的ext系列文件系统在格式化的时候,光是系统要预先分配inode与区块就消耗好多时间。我们项目在采用CentOS 6.5的时候,格式化一个10多点T的时候花费的时间是以小时为单位计算。

二、XFS数据分布的变化

xfs文件系统在数据的分布上,相对于ext系列有明显的变化,主要规划为三个部分,一个数据区,一个文件系统登录区,一个实时运行区。

1、数据区,data section

基本上,数据区和我们之前介绍的ext系列一样,包括inode,数据块,超级块等数据。这个数据区也和ext系列的块组类似,也分为多个块组,不过xfs称作AGallocation groups,分配组)。但是,它的inode与数据块都是系统需要用到时才动态配置的,所以格式化操作非常快。而且,xfs的逻辑块block与inode有多种不同的容量可供设置。但是因存储控制的关系(页面文件pagesize的容量一般4K),建议块的大小最好也是4K,而inode最好为256B。关于页面和磁盘的一些关系和知识后续章节再介绍。

文件和文件夹可以跨越分配组。这一机制为XFS提供了可伸缩性和并行特性——多个线程和进程可以同时在同一个文件系统上执行I/O操作。这种由分配组带来的内部分区机制在一个文件系统跨越多个物理设备时特别有用,使得优化对下级存储部件的吞吐量利用率成为可能。

2、文件系统登录区,log section

也称为日志区,用来记录文件系统的变化。文件的变化会在这里记录下来,直到该变化完整的写入数据区后,该条记录才会被结束。日志的作用是保证文件系统的一致性。

因为所有的文件操作都会在这个区做记录,因此这个区块的磁盘活动相当频繁,所以你可以指定外部的磁盘例如SSD来作为xfs文件系统的日志区。

3、实时运行区, realtime section

当有文件要被创建时,xfs会在这个区段里面找到一个到数个extend区块,将文件放置在这个区块内,等待分配完成后,再写入到data section的inode与区块中。这个区块的大小要在格式化的时候就先指定,最小值4K最大到1G。 (一般非磁盘阵列的磁盘默认64K,而具有类似盘阵的stripe情况下,建议extend设置与stripe一样大。)

总之实时运行区段由变长Extent管理,B+树组成

其中,一个B+树用于索引未被使用的Extent的长度,另一个索引这些Extent的起始块。这种双索引策略使得文件系统在定位剩余空间中的Extent时十分高效。

因为文件系统对每个文件使用一个Extent表,文件分配表就可以保持一个较小的体积。对于太大以至于无法存储在inode中的分配表,这张表会被移动到B+树中,继续保持对该目标文件在64位地址空间中任意位置的数据的高效访问

最后,xfs的这些数据可以通过什么命令来查看呢?像ext系列的dumpe2fs,xfs使用xfs_info来查看超级区块内容,AG大小尺寸以及extent的大小等等。

三、XFS的定义与特性

XFS一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统。2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输

xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的也比较好。

主要特性包括以下几点: 

1、数据完全性

采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。

2、传输特性

XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。

3、可扩展性

XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。

4、数据结构

XFS使用高效的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

5、传输带宽

XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。 

  

总之,XFS有许多独特的性能提升功能使他从众多文件系统中脱颖而出,像可伸缩/并行IO元数据日志热碎片整理IO暂停/恢复延迟分配等。

但是,XFS文件系统有一些缺陷,例如它不能压缩,删除大量文件时性能低下

对于xfs性能缺陷,网上也有高手提出了解决方案(https://www.jianshu.com/p/ac28162d08fd):

mkfs.xfs -f -i size=512-l size=128m,lazy-count=1-d agcount=16/dev/sdb1

参考资料:

《鸟哥的Linux私房菜》基础篇 第四版。

百度百科 XFS。

上一篇:Software Architecture软件架构(方法、模式与框架)纵横谈


下一篇:pentaho cde 封装自定义图形控件,动态传参