背景:物理服务器,大约两年,7200-RPM SATA 驱动器连接到 3Ware RAID 卡,ext3 FS 挂载 noatime 和 data=ordered,不在疯狂负载下,内核 2.6.18-92.1.22.el5,正常运行时间 545 天. 目录不包含任何子目录,只有数百万个小(~100 字节)文件,还有一些更大的(几 KB)文件。
我们有一台服务器在过去几个月中出现了一些问题,但我们直到前几天才注意到它,因为它开始无法写入目录,因为它包含太多文件。具体来说,它开始在 /var/log/messages 中抛出这个错误:
ext3_dx_add_entry: Directory index full!
Run Code Online (Sandbox Code Playgroud)
有问题的磁盘有大量剩余的 inode:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 60719104 3465660 57253444 6% /
Run Code Online (Sandbox Code Playgroud)
所以我猜这意味着我们达到了目录文件本身可以有多少条目的限制。不知道会有多少文件,但正如您所见,不能超过三百万左右。不是那么好,请注意!但这是我的问题之一:上限到底是多少?是可调的吗?在我被骂之前——我想把它调低;这个庞大的目录导致了各种各样的问题。
无论如何,我们在生成所有这些文件的代码中找到了问题,我们已经更正了它。现在我坚持删除目录。
这里有几个选项:
rm -rf (dir)
我先试过这个。在它运行了一天半没有任何明显影响后,我放弃并杀死了它。
while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; …