索引节点,许多小文件(xfs,btrfs,ext4)的已用空间比较


9

我有一个ext4分区(VM上的LVM),其中包含大量小文件,我必须每3-4个月对其进行扩展。

关于索引节点使用的空间量。

xfs,btrfs或ext4文件系统之一使用的空间更少吗?

换句话说,切换到btrfs或xfs会使分区填充inode的速度慢于ext4吗?


如果您使用ext4并希望存储大多数小型类型,则应使用ext4以mkfs.ext4 -t news获得最佳效果。另外,我建议您进行测试-依次创建(在lvm或回送设备上)每个文件系统,然后开始将实际文件复制到其中,直到文件填满。填满后,执行df -i(或find | wc -l)查找哪个文件成功存储了大多数文件-这样您就可以确定。
Matija Nalis

1
@MatijaNalis,-T带有大写的T。配置文件也有一些其他有用的选择
ilkkachu

@ilkkachu正确,谢谢。应该是mkfs.ext4 -T news
Matija Nalis

文件有多小?
drudru

Answers:


6

首先要回答的问题是:是的,这些文件系统之一使用的空间更少。即使没有更多详细信息,鉴于它们具有不同的实现,它们也不大可能都使用完全相同的空间量。因此,一个空间必然比其他空间占用更少的空间。

Btrfs具有动态inode分配,因此不会像ext4的inode表那样填充(在ext4文件系统创建时设置其大小)。

XFS以类似的方式是动态的,但是有一个限制(可用于inode的文件系统的百分比),因此,是否填满inode配额取决于设置的百分比以及文件计数/文件大小


感谢您的快速回复!看起来XFS是目前最安全的选择。可以动态更改此inode的使用百分比吗?如果没有,是否有办法预测需要多少?
2016年

1
您应该能够做到这一点xfs_growfs -m XX
Anthon

3

是的,请注意,一切取决于您的需求:

Btrfs(发音为Butter FS,Better FS或B-Tree FS)

考虑到btrfs可以跨越多个硬盘驱动器,因此它可以支持的驱动器空间是ext4的 16倍,这是一个很好的想法。btrfs文件系统的最大分区大小为16艾比,最大文件大小也为16艾比。

最大文件数:2 ** 64

XFS文件

XFS是一个高性能的64位日志文件系统。XFS支持64位文件系统的最大文件系统大小为8 EB。现在,RHEL 7.0使用XFS作为默认文件系统,包括支持将XFS用于/boot分区。

最大文件数:2 ** 64

EXT4

EXT4是众所周知的,因为使速度提高了EXT3的。ext4有一些限制。最大文件大小为16 TB,大约为17.6 TB。ext4可以具有的最大卷/分区是1 exbibyte。与最现代的文件系统一样,它是日记文件系统,这意味着它将保留文件主要位于磁盘上的位置以及磁盘上发生的任何其他更改的日志。无论其所有功能如何,它都不支持透明压缩,透明加密或重复数据删除。快照在技术上得到支持,但是这种功能充其量只是实验性的。

最大文件数:40亿

XFS与Btrfs

XFS没有任何RAID,而Btrfs RAID尚未完全稳定且处于早期状态。XFSBtrfs越来越成熟,但是我们不能否认Btrfs功能强大且文件系统发展良好。

到目前为止,除非我确实需要Btrfs,否则XFS是我的选择-特别是因为它是RHEL 7上的默认FS-。


1
总体上,这对文件系统有一些很好的背景信息,但是我看不到这里提到的小文件的具体问题。
ilkkachu

@ilkkachu“大量小文件”是什么意思?这都是关于inode的,因为文件都是通过inode创建的,并且inode是用于表示文件系统对象的数据结构。因此,我认为我已经解释了所有作者的需求,此外,我还提到了最大文件数。
FarazX

2

我想您遇到的问题不是分区本身填满了索引节点,而是耗尽了文件系统中索引节点的数量。创建文件系统时,ext4会静态保留inode,但您可以使用以下选项mkfs.ext4将数字设置

-i每个索引节点
的字节数指定字节/索引节点的比率。mke2fs为磁盘上每个字节的每个索引字节空间创建一个索引节点。每inode的字节数比率越大,将创建的inode越少。

-N-in-inodes
覆盖应为文件系统保留的inode数量的默认计算(基于块数和每inode的字节数比率)。这允许用户直接指定所需inode的数量。

手册明确指出,创建FS后无法更改每个索引节点的字节数,但是如果调整FS的大小,总数将按比例缩放。

您还可以设置每个索引节点的大小。“大多数”文件系统上的默认值为256字节,但可以减少为128(“小型”文件系统的默认值)。多余的空间用于存储扩展属性(例如SELinux标签),因此,如果不需要这些属性,将大小减小到最小应该是安全的。

-I inode-size
以字节为单位指定每个inode的大小。索引节点大小值必须是2的幂或大于或等于128。

df -i应该显示分配和使用的索引节点数。使用默认选项,我查看的一个30 GB分区每16 kB有一个索引节点,但是如果您的文件很小,则可以设置-i 4096为系统上的每个数据块都具有一个索引节点。

如果您的文件小于4096,您可能还希望减小文件系统块的大小,因为所有常规文件仍然需要一个完整的数据块。(也就是说,在ext4上。我不知道其他当前文件系统是否在打包小文件。)

-b块大小
指定以字节为单位的块大小。有效的块大小值为每个块1024、2048和4096字节。如果省略,则块大小由文件系统大小和文件系统的预期用法启发式确定(请参见-T选项)。

mkfs.ext4-T <type>可以用作某些或全部这些的简写形式。设置在中/etc/mke2fs.conf,在我的Debian上它mkfs.ext4 -T small相当于

mkfs.ext4 -b 1024 -I 128 -i 4096

对于很多小文件(没有xattrs)来说,这可能不是一个不错的选择。

如果您的文件小于1 KB,则文件系统可能不是保存数据的最佳方法,但应该考虑使用数据库或特定于应用程序的系统。

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.