对于目标文件系统文件过大怎么办_用了这么多年Ext4文件系统,您知道它的这些高级特性吗?...

c1c06e02532a0aaafd209349a09d2f23.png

Ext4文件系统大家都非常熟悉了,也是一个老牌的文件系统,它在2006年11月随2.6.19内核初次发布,到2008年12月25日,Linux Kernel 2.6.28的正式版本发布,Ext4文件系统基本稳定,也称为很多发行版的默认文件系统。算起来到现在也有十几年了。

我们经常使用Ext4文件系统,不管是普通办公用的笔记本或者PC,还是服务器,很多根文件系统就是Ext4,但Ext4到底相对于Ext2和Ext3有哪些新特性,估计大家不一定能够注意到,下面本文将给大家做一个基本的介绍,希望对以后的开发能够有所帮助。

Ext3兼容

Ext4文件系统可以兼容之前的版本,也就是用户如果已经用Ext3格式化了磁盘,那么用户也可以在不损失数据的情况下升级到Ext4文件系统。向前兼容极大的方便了已有用户的升级,避免数据的导入导出可能引入的风险。向前兼容的原理很简单,就是数据在磁盘的布局与Ext3保持一致,并且数据结构也保持一致即可

Extent

Extent是新一代文件系统支持的特性,其特点是通过其位置和长度表示文件内的数据,Ext4也支持该特性。在Ext2及Ext3中都是通过间接块的方式存储文件内的数据的,因此文件的大小和访问性能各方面都比较差。如图1为Ext3文件系统文件内数据存储的方式。在文件对应的inode节点中有一个15个元素的数组,其中前12个元素存储的是文件数据在磁盘的地址,第13个元素存储的地址所指向磁盘数据存储的不是文件内数据,而是指向下一级的地址,该地址才是文件内的数据。也就是在该数组的元素和实际存储文件数据的磁盘块之间多出一个磁盘块,用于存储磁盘的地址,而这个磁盘块就是间接块。以此类推,第14个元素中间有2级间接块,第15个元素有3级间接块

鉴于上述原理,由于文件系统中块的大小是确定的,而地址长度和数组元素也是确定的,因此就可以确定文件的最大大小。同时,由于每个地址指向的就是一个块,因此这种方式的特点是所有块大小是一样的。这样就有一个缺点,如果用户写入的是远大于文件系统块的数据,Ext3还是要切割为指定大小的块,而且还得计算地址,因此效率会非常不好。

b25c185d2409a36acc15223234bc238e.png
图1 Ext3间接块数据存储

Ext4文件系统对其进行了改进,实现了基于Extent的数据存储方式,其实现基于B+树。此时前文说的数组变成了B+树的树根,而B+树可以有多层,只有叶子节点存储指向文件数据的磁盘地址,中间层的节点只存储下一级的磁盘地址,由于B+树有很多叉(几百个),因此树的深度就会很浅。这样文件系统在查找文件的数据的时候就不需要过多的与磁盘交互,从而保证文件系统的性能。

5fd27d49c0acd76a699a3d861d9730d2.png
图2 Ext4的Extent数据组织形式

前文提到,Ext4文件系统的关键之处在于Extent,也就是在叶子节点存储文件数据在磁盘的地址的数据结构。该数据结构存放着地址和数据的长度,因此,如果用户写一个很大块的数据,该数据结构就只需要记录其实位置和长度即可,并不需要进行切割,效率得到极大的提升。

延迟分配

延迟分配的意思是在写数据的情况下并不会马上为其分配磁盘空间,而是先写入页缓存,然后做个标记,标记其还没有分配空间。然后在某些特定的条件下才分配磁盘空间,并将数据写入磁盘中。

a37795296540247009731e9df0a1faa9.png
图3 Ext4的延迟分配

我们举一个例子,如果没有延迟分配,假设用户写入3个数据块,如图3左侧所示,其中数字代表先后顺序。此时文件系统为其分配磁盘空间,在地址上可能就不是连续的,而磁盘要写这些数据就会产生磁盘摆臂,从而对写入性能造成很大的影响。

而如果不马上分配空间,而是延迟分配空间,这样用户写入的数据就是连续的一块数据,此时文件系统只需要分配一块空间即可(如图3右侧所示),结合前面的Extent特性和多分配特性,就可以将该数据一次性写入,从而提升写入性能。简单的理解其实就是尽量的将随机IO转换为顺序IO

日志校验

我们知道为了提高文件系统的可靠性,在Ext3的时候引入了日志系统。日志系统用于在更改元数据(其实更改数据也可以用日志系统,但性能影响比较大)的情况下,会先写入日志系统,然后再更改,这样如果中间出现故障(例如断电,系统崩溃等)时,就可以通过日志系统进行恢复。从而避免文件系统因为故障而导致整个文件系统数据的丢失。

e666371bdc758cee0c32238124849b9b.png
图4 文件系统日志校验

所谓日志校验,就是在日志系统的数据结构中添加校验和,这样每次写入数据的时候,都会计算校验和,并一起写入。在读取数据的时候会重新进行计算,并与校验和对比,以确定数据的正确性。这种方式在数据库系统中用的非常广泛,比如Oracle和MySQL等,每个写入的数据库都有校验和。

在线碎片整理

所谓碎片就是在磁盘上的一些不连续的数据,及空洞。由于碎片的存在可能导致磁盘空间利用率的降低,因为一些小的空洞导致无法重新分配使用;还有就是性能的降低,因为在逻辑上连续的数据,在磁盘物理空间上可能是分散的,这样在访问时,对于普通机械硬盘将导致其频繁摆动磁头,降低访问性能。

虽然Ext4在数据布局和分配上做了很多优化,但数据的在磁盘上产生碎片仍然在所难免。因此Ext4额外实现了一个进行在线碎片整理的特性,并配合了一个用户工具。碎片整理的原理非常简单,就是分配一个临时的连续的大文件,然后将目标文件中的数据与该文件数据进行交换,这样就能把目标文件中不连续的数据转换为连续的。

Ext4主要特性就是这些,当然还有一些小特性,本文就不一一介绍了,有任何问题请在下面留言。本号尽量回答,但由于时间有限不能保证回答每个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值