23
rm包含数百万个文件的目录
背景:物理服务器,已有大约两年的历史,已将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! 有问题的磁盘上还有许多索引节点剩余: Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 60719104 3465660 57253444 6% / 因此,我猜测这意味着我们达到了目录文件本身中可以包含多少个条目的限制。不知道会有多少个文件,但是正如您所看到的,最多不能超过300万个左右。不好意思,请注意!但这是我的问题之一:上限到底是多少?可调吗?在我得到大叫,我想调整它下来 ; 这个巨大的目录引起了各种各样的问题。 无论如何,我们在生成所有这些文件的代码中找到了问题,并已进行了纠正。现在,我一直坚持删除目录。 这里有一些选择: rm -rf (dir) 我先试了 在运行了一天半之后,没有任何明显的影响,我放弃并杀死了它。 目录上的unlink(2):绝对值得考虑,但问题是,通过fsck删除目录中的文件是否比通过unlink(2)删除要快。也就是说,我必须将那些inode标记为未使用。当然,这是假定我可以告诉fsck不要将条目丢弃到/ lost + found中的文件中。否则,我只是解决了我的问题。除了所有其他问题外,在阅读了更多内容之后,事实证明我可能必须调用一些内部FS函数,因为我找不到的unlink(2)变体都不允许我随意删除在其中包含条目的目录。呸。 while [ true ]; do ls …