存储系列之 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 文件 ...
随机推荐
- 线性dp 之 麻烦的聚餐
题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2 ...
- java 如何正确的输出集合或者对象的值
java 如何正确的输出集合或者对象的值 一般out.println(Object) 和 System.out.println(Object),其中输出的都是Object.toString()方法.重 ...
- ThreadLocal 原理
ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类.主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用, ...
- JS获取格式为YYYY-MM-DD的当前日期
JS获取格式为YYYY-MM-DD的当前日期 var date = new Date(); var mon = date.getMonth() + 1; var day = date.getDate ...
- # SpringBoot-环境搭建
SpringBoot-环境搭建 标签(空格分隔): java,SpringBoot 1.创建Maven工程 2.编写pom文件 <parent> <groupId>org.sp ...
- python的__get__方法看这一篇就足够了
get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...
- mysql数据库参数详解
1.配置参数 MySQL有两种途径途径了解其的配置参数,一个是MySQL交互模式下的命令SHOW VARIABLES,一个使用mysqladmin variables 查询. MySQL的配置参数分 ...
- 4. JSON字符串是如何被解析的?JsonParser了解一下
公司不是你家,领导不是你妈.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BA ...
- 下载数据到csv中(乱码),使用numpy , pandas读取失败 解决方案
读取数据,下载数据到 csv 文件中 allUniv 列表类型[[...],[...]] 字符集编码使用 utf-8-sig with open('文件名.csv','w',newline='',en ...
- 一分钟玩转 Spring IoC!
前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...