最近我们遇到了一个问题,其中一个 ext4 文件系统似乎无法处理大量文件,more than 6mln in this case
尽管有足够的空间。这是6mln
ext4 文件系统在使用所有默认设置格式化时可以容纳的最大数量吗?我尝试用 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: ...