我有一个 ext4 分区(VM 上的 LVM),其中包含大量小文件,我必须每 3-4 个月延长一次。
关于索引节点使用的空间量。
xfs、btrfs 或 ext4 文件系统之一使用的空间较少吗?
换句话说,切换到 btrfs 或 xfs 会使分区填充 inode 的速度比使用 ext4 慢吗?
答案1
首先回答第一个问题:是的,其中一个文件系统使用的空间更少。即使没有更多细节,它们也不可能都使用完全相同的空间量,因为它们具有不同的实现。因此,一个人必然会比其他人使用更少的空间。
Btrfs 具有动态 inode 分配,因此不会像 ext4 的 inode 表那样进行填充(其大小在 ext4 文件系统创建时设置)。
XFS 以类似的方式是动态的,但有一个限制(可用于 inode 的文件系统的百分比),因此,是否填满 inode 限额取决于设置的百分比以及文件计数/文件大小
答案2
我想您遇到的问题不是分区本身充满了索引节点,而是文件系统中的索引节点数量耗尽。 ext4 在创建文件系统时静态保留 inode,但您可以使用以下命令设置数量选项mkfs.ext4
:
-i bytes-per-inode
指定字节/inode 比率。 mke2fs 为磁盘上的每个 inode 字节空间创建一个 inode。每个 inode 的字节数比率越大,创建的 inode 就越少。-N number-of-inode
覆盖应为文件系统保留的 inode 数量的默认计算(基于块数和每个 inode 的字节数比率)。这允许用户直接指定所需的索引节点数量。
手册明确指出,创建 FS 后,每个 inode 的字节数比率无法更改,但如果调整 FS 的大小,总数将缩放以满足该比率。
您还可以设置尺寸每个索引节点。 “大多数”文件系统上的默认值为 256 字节,但可以减少到 128(“小型”文件系统的默认值)。额外的空间用于存储扩展属性(例如 SELinux 标签),因此如果您不需要这些属性,则可以安全地将大小减小到最小。
-I inode-size
指定每个 inode 的大小(以字节为单位)。 inode-size 值必须是大于或等于 128 的 2 的幂。
df -i
应显示分配和使用的 inode 数量。使用默认选项时,我查看的一个 30 GB 分区每 16 kB 就有一个 inode,但如果您的文件非常小,您可以设置-i 4096
为系统上的每个数据块都有一个 inode。
如果您的文件小于 4096,您可能还想减小文件系统块大小,因为所有常规文件无论如何都需要一个完整的数据块。 (也就是说,在 ext4 上。我不知道其他当前的文件系统是否会打包小文件。)
-b block-size
指定块的大小(以字节为单位)。有效的块大小值为每块 1024、2048 和 4096 字节。如果省略,则块大小由文件系统大小和文件系统的预期使用情况启发式确定(请参阅 -T 选项)。
mkfs.ext4
还有一个-T <type>
选项可以用作其中一些或全部的简写。设置位于/etc/mke2fs.conf
,在我的 Debian 上,egmkfs.ext4 -T small
相当于
mkfs.ext4 -b 1024 -I 128 -i 4096
对于大量小文件(并且没有 xattrs)来说,这可能是一组不错的选项。
如果您的文件甚至小于 1 kB,文件系统可能不是保存数据的最佳方式,但也许应该考虑数据库或特定于应用程序的系统之类的系统。
答案3
是的,请注意,一切都取决于您的需求:
Btrfs(发音为 Butter FS、Better FS 或 B-Tree FS)
考虑到BTFS将能够跨越多个硬盘驱动器,这是一个非常好的一点,它可以支持比普通硬盘多16倍的驱动器空间外部4。 btrfs 文件系统的最大分区大小为 16 exbibytes,最大文件大小也为 16 exbibytes。
最大文件数:2**64
XFS
这XFS是一个高性能 64 位日志文件系统。 XFS 支持 64 位文件系统的最大文件系统大小为 8 艾字节。现在RHEL 7.0使用 XFS 作为默认文件系统,包括支持使用 XFS 进行分区/boot
。
最大文件数:2**64
外部4
这外部4因其比 ext3 带来的速度提升而闻名。 ext4 有一些限制。最大文件大小为 16 tebibytes(大约 17.6 TB)。 ext4 可以拥有的最大卷/分区是 1 艾字节。与最现代的文件系统一样,它是一个日志文件系统,这意味着它将保留文件主要位于磁盘上的位置以及磁盘上发生的任何其他更改的日志。无论其所有功能如何,它都不支持透明压缩、透明加密或重复数据删除。快照在技术上是受支持的,但这种功能充其量只是实验性的。
最大文件数:40亿
XFS 与 Btrfs
XFS 没有任何 RAID,而 Btrfs RAID 尚未完全稳定,还处于早期阶段。XFS比现在越来越成熟Btrfs,但我们不能否认 Btrfs 的强大并且是一个发展良好的文件系统。
目前,XFS 是我的选择 - 特别是因为它是 RHEL 7 上的默认 FS - 除非我确实需要 Btrfs。