ext4 文件系统最大 inode 限制 - 有人可以解释一下吗?

ext4 文件系统最大 inode 限制 - 有人可以解释一下吗?

最近我们遇到了一个问题,其中一个 ext4 文件系统似乎无法处理大量文件,more than 6mln in this case尽管有足够的空间。这是6mlnext4 文件系统在使用所有默认设置格式化时可以容纳的最大数量吗?我尝试用 Google 搜索,但没有得到任何明确的答案。这里有人可以解释一下吗?谢谢!!

答案1

没有默认像这样对于 ext4,这取决于设备的大小和创建时选择的选项。您可以使用以下命令检查现有限制:

tune2fs -l /path/to/device

例如,

root@xwing:~# tune2fs -l /dev/sda1
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /

[lots of stuff snipped]

Inode count:              1277952
Free inodes:              1069532
Inodes per group:         8192
Inode blocks per group:   512

[lots of stuff snipped]

按照man mkfs.ext4

-i 每个 inode 的字节数

指定字节/inode 比率。mke2fs 为磁盘上每个字节/inode 空间创建一个 inode。字节/inode 比率越大,创建的 inode 越少。此值通常不应小于文件系统的块大小,因为在这种情况下,创建的 inode 数量将超过可以使用的数量。请注意,文件系统创建后无法扩展 inode 数量,因此请谨慎确定此参数的正确值。

答案2

这取决于您如何格式化文件系统。使用tune2fs -l <device>您可以找到设备拥有的 inode 数量,在您的情况下可能约为 600 万个 inode。每个文件或目录都使用一个 inode。

据我所知,增加 inode 数量的唯一方法是重新格式化文件系统。-i的参数mkfs可用于指定字节/inode 比率。默认值定义为/etc/mke2fs.conf(在我的系统上:16384)。

字节/inode 比率越大,定义的 inode 越少,而字节/inode 比率越小,定义的 inode 越多。大多数情况下,默认值都可以正常工作,但是如果您有大量小文件,则可能会达到限制,并且可能需要使用较小的字节/inode 比率来格式化文件系统。

答案3

其他人给出的解释是正确的:系统中的每个文件或文件夹都代表一个索引节点. 使用的 inode 数量是有限制的。

现在,我们该如何使用这个东西?

检查您的 iNode 使用情况

df使用带参数的命令-i,即:df -i。例如,我得到:

Filesystem      Inodes   IUsed   IFree IUse% Mounted on
udev            247945     421  247524    1% /dev

我可以获得的最大 iNode 数量是多少?

根据 RedHat 的说法,一个卷上可以有 43 亿个 iNode。引用...

...理论上最大的 inode 数量等于 2^32(约 43 亿个 inode)...(来源:RedHat.com)

增加 INode 限制

您需要完全重新格式化该卷,因此请确保先备份所有数据。然后,如果您想要 2 亿个 iNode,只需运行...

mkfs.ext4 -N 200000000 /dev/you/want/reformatted

在我的 100GB 卷上,它给出如下输出......

Creating filesystem with 26213616 4k blocks and 250037568 inodes
Filesystem UUID: ...

相关内容