查找命令锁定系统

查找命令锁定系统

我有一个文件夹,里面有 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 元数据。查找仍然需要遍历目录中的所有元数据才能……嗯……找到一些东西。

相关内容