在 XFS 和 ext4 中使用 xattr 存储许多小文件

在 XFS 和 ext4 中使用 xattr 存储许多小文件

我在 XFS 驱动器上有许多带有 xattr 的小文件(2000 万个)。文件的平均大小约为 20KB,xattr 的平均大小约为 512 字节。

因为我想将它们移动到 ext4,所以我测试将这些文件的一部分复制到 ext4(inode 大小为 512 和 1024)和 XFS 驱动器中。

我分别使用以下选项格式化了 3 个驱动器:

# mkfs.ext4 -i 8192 -I 512 /dev/sde1
# mkfs.ext4 -i 8192 -I 1024 /dev/sdf1
# mkfs.xfs -f -i size=1024 /dev/sdg1

并通过 cp -r --preserve=mode,ownership,timestamps,xattr 复制了大约 30GB 的小文件

结果如下:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sde1            133654640  37164884  89360916  30% /srv/node/sde1 # ext4 -I 512
/dev/sdf1            124741744  36645652  80967252  32% /srv/node/sdf1 # ext4 -I 1024
/dev/sdg1            142507224  31020968 111486256  22% /srv/node/sdg1 # XFS

在这两种情况下,ext4 使用的块都比 XFS 多得多。是什么造成了这些差异?如何使用 ext4 而不浪费磁盘空间?

答案1

有一点是,XFS 在数百万个小文件上表现不佳。XFS 不是基于 inode 的 FS。由于您有大量小文件,因此块大小会有所不同,ext4 在数据块组中还保存间接块映射、范围树块和扩展属性、inode 列表等,这些会增加相同数量文件的总块大小。日志记录也需要一些时间。对于 ext4,您可以根据需要删除日志记录,但恢复 fs 的时间会显著增加,您也可以使用 -m 选项为超级用户分配较少的 %(默认值为 5%),您可以增加 1%。

相关内容