为什么我的XFS文件系统突然占用更多空间并充满稀疏文件?


62

我已经在各种Linux服务器上将XFS文件系统作为数据/增长分区运行了近10年。

我注意到最近运行6.2+版本的CentOS / RHEL服务器出现了一个奇怪的现象。

从EL6.0和EL6.1迁移到较新的操作系统版本后,稳定的文件系统使用变得高度可变。最初安装有EL6.2 +的系统表现出相同的行为。显示XFS分区上磁盘利用率的剧烈波动(请参见下图中的线)。

之前和之后。从6.1升级到6.2是在星期六进行的。 XFS图

同一系统上一季度的磁盘使用情况图,显示了上周的波动。 在此处输入图片说明

我开始检查文件系统中是否有大文件和失控的进程(可能是日志文件?)。我发现最大的文件报告了与du和不同的值lsdu有无--apparent-size开关运行说明了差异。

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

使用ncdu实用工具对整个文件系统进行快速检查得出:

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

文件系统中充满了稀疏文件,与先前版本的OS /内核相比,丢失了将近70GB的空间!

我仔细研究了Red Hat Bugzilla并更改日志,以查看是否有关于XFS的相同行为的报告或新公告。

娜达

升级期间,我从内核版本2.6.32-131.17.1.el6转到了2.6.32-220.23.1.el6;次要版本号无变化。

我使用该filefrag工具检查了文件碎片。XFS分区上一些最大的文件具有数千个扩展区。在xfs_fsr -v活动缓慢的情况下运行联机碎片整理有助于暂时减少磁盘使用(请参见上方第一张图表中的周三)。但是,一旦系统活动繁忙,使用率便迅速增加。

这是怎么回事


2
嗯...广场...-
汤姆·奥康纳

Answers:


76

我将此问题追溯到有关从2010年12月起提交XFS源树的讨论。该补丁是在内核2.6.38中引入的(显然,后来又移植到一些流行的Linux发行内核中)。

观察到的磁盘使用量波动是一项新功能的结果。XFS动态推测EOF预分配

这是通过在文件大小增加时推测性地分配空间来减少流式写入期间文件碎片的一种措施。每个文件的预分配空间量是动态的,并且主要取决于文件系统上的可用空间(以防止完全用尽空间)。

它遵循以下时间表:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

这是对文件系统的一个有趣的补充,因为它可以帮助处理我处理的一些碎片很大的文件。

可以通过释放页面缓存,牙科和索引节点来临时回收额外的空间:

sync; echo 3 > /proc/sys/vm/drop_caches

通过allocsize在文件系统安装期间定义一个值,可以完全禁用该功能。XFS的默认值为allocsize=64k

监视/阈值系统(这就是我所捕捉到的)可能会感觉到此更改的影响,但也影响了数据库系统,并可能对精简配置的虚拟机和存储阵列造成不可预测或不希望的结果(它们将使用超出您预期的空间)。

总而言之,它使我措手不及,因为在分发级别甚至在监视XFS邮件列表方面都没有明确宣布文件系统更改。


编辑
具有此功能的XFS卷上的性能已大大提高。我在以前显示高达50%碎片的卷上看到一致的<1%碎片。全球写入性能提高!

来自同一数据集的统计数据,将旧版XFS与EL6.3中的版本进行比较。

旧:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

新:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

4
一百万个赞誉和我的国度给您
Joel E Salas

1
谢谢!我们刚刚从Debian Squeeze升级到Ubuntu,一直想知道为什么du和ls如此大的文件显示出如此大的不同值(例如50Mb vs 64Mb)
Giles Thomas

1
@ewwhite您是否关闭了此功能以回收空间?还是本文只是在说,嘿,此功能是导致报告的大小不一致的原因吗?听起来像“在数据库系统或精简配置的VM上,请考虑关闭此功能”,但我不确定您最终决定做什么。
JDS 2014年

2
@jds我保留它。它消除了碎片,并提高了我的应用程序的性能。
ewwhite 2014年

3
哦,真是太好了。这在35GB的文件上使用了750GB。之后xfs_fsr又回到下降到约35GB。我必须密切注意
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.