我有一个文件夹,里面有 400 多万个文件。我设法在一周内删除了所有文件,使用“find . -delete”和“kill -9”,否则一分钟后系统就会锁定。
现在文件夹是空的。当我进入该文件夹并执行“ls”时,一切正常。我只是看到文件夹是空的。
但是当我执行“find foo/”时,它再次锁定系统,就像我曾经删除数百万个文件时一样。
这可能是什么原因呢?
答案1
您的文件系统可能存在损坏。尝试运行fsck -f
它(卸载时),看看是否发现任何问题。
答案2
好奇为什么你不删除整个目录然后重新创建它:
rm -rf foo_dir
mkdir foo_dir
或者不使用查找来删除文件:
cd [path]/foo_dir
rm -rf *
也许删除并重新创建目录仍然会对您有帮助。
答案3
我在 Google Plus 上分享了这个问题,找到了答案。阿克塞尔英格兰德:
这实际上取决于所使用的文件系统。目录应该存储 inode 表。如果 inode 表变得太大,则会创建另一个表并将这些表链接起来。因此,即使您删除了所有文件,仍可能存在大量相互链接的 inode 表。如果您再次 rmdir 和 mkdir 目录,性能应该会更好。
由于您可能删除了除最后一个文件之外的所有文件,因此 inode 表仍然存在。 ls -ld foo 应该会显示目录元信息的大小。考虑:
# mkdir some_dir # ls -ld some_dir drwxr-xr-x 2 root root 4096 Oct 14 21:16 some_dir
因此,目录有 4096 字节的元数据。好的。让我们创建一些文件。
# pushd some_dir ; for i in {1..1000} ; do mktemp test.XXXXXXXXXXXXXX ; done ; popd
我们刚刚在 some_dir 中创建了 1000 个文件。
# ls -ld some_dir drwxr-xr-x 2 root root 49152 Oct 14 21:16 some_dir
哇哦,目录现在需要 49k 的元数据。让我们删除这些文件。
# find some_dir/ -type f -delete # ls -ld some_dir drwxr-xr-x 2 root root 49152 Oct 14 21:19 some_dir
文件不见了。但还有 48k 元数据。查找仍然需要遍历目录中的所有元数据才能……嗯……找到一些东西。