我在某些服务器中遇到了这个警告,我有一个包含数百万个(20 个多或少)文件的目录,但根据 ext4 文档,这应该不是问题。
知道这会对我的系统产生什么影响吗?我是否有丢失文件的危险?是否有任何配置可以阻止此行为?
[1130768.836378] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130768.836558] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130768.836739] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130768.836914] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130769.881446] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130769.881668] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130769.881841] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130769.881969] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
[1130769.882084] EXT4-fs warning (device dm-0): ext4_dx_add_entry:2006: Directory index full!
输出df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/INTEGRASERVER02--vg-root 72179712 11081503 61098209 16% /
none 2049034 2 2049032 1% /sys/fs/cgroup
udev 2046225 1252 2044973 1% /dev
tmpfs 2049034 1237 2047797 1% /run
none 2049034 2 2049032 1% /run/lock
none 2049034 1 2049033 1% /run/shm
none 2049034 2 2049032 1% /run/user
/dev/sda1 62248 298 61950 1% /boot
答案1
每条消息都表示将文件添加到目录失败。
ext4 目录中的文件条目数量没有官方限制,但有两篇文章描述了原始设计(2001 年在 ext2 中开始),其中说明了以下内容,并且与 ext4 同样相关:
两级索引节点足以支持1600 万 52 个字符文件名。
只有非常大的目录才需要第二个索引级别,它可以容纳稍多于3000 万項目。
如果您在目录中大量创建和删除文件,显然可能会由于文件名字符串中的碎片而丢失空间,您可以通过执行以下操作(在未挂载的文件系统上)恢复:
fsck -D /dev/...
参见 man fsck.ext4:
-D 优化文件系统中的目录。此选项使 e2fsck 尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引它们,或者通过对目录进行排序和压缩以获得较小的目录,或者对于使用传统线性目录的文件系统。