引言:磁盘容量越来越大,文件系统管理的文件也是越来越大、越来越多,如何破解?唯有快!于是动态分配、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。

存储系列之 XFS文件系统简介的更多相关文章

  1. 存储系列之 VFS虚拟文件系统简介

    引言:文件系统发展到一定阶段,开始进一步抽象和分层.   前面我们介绍了ext系列文件系统和xfs文件系统,这些是Linux使用最多的文件系统,也是很多发布版本默认选择的文件系统.而事实上,Linux ...

  2. Linux磁盘和文件系统简介

    Linux磁盘和文件系统简介 1.文件系统:存储设备上存储数据的方式方法 磁盘主要由盘片.机械手臂.磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每个扇区为512字节,扇 ...

  3. NTFS文件系统简介(转载)

    原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...

  4. ext与xfs文件系统比较与总结

    centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3 1.EXT2简介 EXT2第二代扩展文件系统(英语:second extended filesystem ...

  5. NTFS文件系统简介

    原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...

  6. 由异常掉电问题---谈xfs文件系统

    由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...

  7. Linux学习笔记之 Btrfs文件系统简介及使用

    Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. Btrfs相关介绍: Btrf ...

  8. linux 文件系统简介

    linux文件系统简介   文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基 ...

  9. xfs文件系统

    引用http://blog.chinaunix.net/uid-522675-id-4665059.html xfs文件系统使用总结 1.3 xfs相关常用命令xfs_admin: 调整 xfs 文件 ...

随机推荐

  1. 集训作业 洛谷P1469 找筷子

    这个题的代码真的是短的不得了呢. 有个神奇的东西叫异或,写起来是这个样子的^. 这个东西可以查看2个数的二进制某位是否相同,相同取0,不同取1.虽然我用的不熟,但我可以想出来,如果2个相同的数异或,答 ...

  2. 直接在x86硬件上显示图片(无os)

    1 任务 为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片.完成这个任务,前后估计花了2个月的业余时间. 这个任务涉及了很多知识点,包括:启动区. ...

  3. Nginx之伪404( root与alias )

    目录 一.现象 二.root与alias的区别 三.建议 四.写在最后 一.现象   人类善于伪装,机器某些时候也善于伪装:Nginx请求看到404,第一反应就是文件不存在:但我们去检查的时候,它就正 ...

  4. 微信小程序-点餐系统

    一.前言说明 博客声明:此文链接地址https://www.cnblogs.com/Vrapile/p/13353264.html,请尊重原创,未经允许禁止转载!!! 1. 主要功能 (1)后台定义分 ...

  5. 题解 CF576D 【Flights for Regular Customers】

    对每条边来说,可以走这条边的限制解除是按\(d\)的顺序,所以先对每条边按\(d\)排序. 然后考虑每两条边之间的处理,用一个矩阵表示当前走\(d\)步是否可以从一个点到另一个点,称其为状态矩阵,用另 ...

  6. css的一些小技巧。修改input样式

    在第一次正式写项目的时候,遇到了几个布局的小技巧.记录一下. 我们常常会遇到图片和文字对齐的一种样式.比如 这样的样式,我们写的时候有时候会出现不对齐的情况.我们有俩种方法 一种就是flex的布局,还 ...

  7. Dart函数

    函数 Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function.这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征.同时意味着在Dart语言 ...

  8. 图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录)

    图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录): https://download.csdn.net/download/qq_39932172/11 ...

  9. 为PhpStorm添加Laravel 代码智能提示功能

    php artisan clear-compiled //清除bootstrap/compiled.php php artisan ide-helper:generate //为 Facades 生成 ...

  10. vj map

    /* * 换行好烦人呀! */ #include <iostream> #include <map> #include <string> using namespa ...