存储系列之 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称作AG(allocation 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、数据完全性
2、传输特性
3、可扩展性
4、数据结构
5、传输带宽
总之,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文件系统简介的更多相关文章
- 存储系列之 VFS虚拟文件系统简介
引言:文件系统发展到一定阶段,开始进一步抽象和分层. 前面我们介绍了ext系列文件系统和xfs文件系统,这些是Linux使用最多的文件系统,也是很多发布版本默认选择的文件系统.而事实上,Linux ...
- Linux磁盘和文件系统简介
Linux磁盘和文件系统简介 1.文件系统:存储设备上存储数据的方式方法 磁盘主要由盘片.机械手臂.磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每个扇区为512字节,扇 ...
- NTFS文件系统简介(转载)
原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...
- ext与xfs文件系统比较与总结
centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3 1.EXT2简介 EXT2第二代扩展文件系统(英语:second extended filesystem ...
- NTFS文件系统简介
原文地址:http://www.cnblogs.com/watertao/archive/2011/11/28/2266595.html 1.简介 NTFS(New Technology File S ...
- 由异常掉电问题---谈xfs文件系统
由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...
- Linux学习笔记之 Btrfs文件系统简介及使用
Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息.而 ext2/3 却避免了这种被称为”错误扩散”的问题. Btrfs相关介绍: Btrf ...
- linux 文件系统简介
linux文件系统简介 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基 ...
- xfs文件系统
引用http://blog.chinaunix.net/uid-522675-id-4665059.html xfs文件系统使用总结 1.3 xfs相关常用命令xfs_admin: 调整 xfs 文件 ...
随机推荐
- [CISCN2019 华东南赛区]Double Secret
0x01 进入页面如下 提示我们寻找secret,再加上题目的提示,猜测这里有secret页面,我们尝试访问,结果如下 根据它这个话的意思,是让我们传参,然后它会给你加密,我们试一下 发现输入的1变成 ...
- UC 网盘:我又回来了
普通用户不限速下载,免费 10GB 空间,支持离线下载 这个域名非常厉害,某里挑选域名果然是值得称赞的.直接使用手机号即可注册登录,默认赠送 10GB 空间.不过目前好像没看到有电脑客户端,电脑上下载 ...
- python多进程之multiprocessing
什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...
- 【博弈论】Road to Arabella Gym - 102263B
题目: 题目大意:输入n,k.两个人轮流选一个数x(1<=x<=max(1,n-k))减去n,若到一个人的回合n=0那么那个人失败.Kilani先手. 通过手动模拟几个实例,很容易发现先手 ...
- 微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
(一) 准备工作 (1) 登录注册 注册账号:这就不谈了,只需要注意使用一个全新的邮箱,别之前注册过公众号小程序等就可以了 https://mp.weixin.qq.com/wxopen/waregi ...
- 前端学习(十三):CSS盒子模型
进击のpython ***** 前端学习--CSS盒子模型 在前面的时候也说过,包括分析网页结构的时候,提到了,网页就其实就是一个一个盒子叠起来的 那现在就是有装饰的盒子,难度就变得深刻 所以说为了能 ...
- JavaScript运算符与流程控制
JavaScript运算符与流程控制 运算符 赋值运算符 使用=进行变量或常量的赋值. <script> let username = "YunYa"; < ...
- tomcat8开启APR模式
1 Apr模式介绍 Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP ...
- 萌新学渗透之Hack The Box_Beep
我将我的walkthrough过程用视频解说的形式记载 视频地址https://www.bilibili.com/video/BV1VT4y1j7dg 一是因为看我视频的后来者应该都是刚入门的新手,视 ...
- 对‘sqrt’未定义的引用
首先, 引用数学库 #include<math.h> 引用数学库时,要在编译后加上-lm 是每一个都要加!! 如下: gcc su.c -o su.o -lm gcc -g su.c - ...