Answers:
没有。
rm -rf
对文件系统进行递归的深度优先遍历,并调用unlink()
每个文件。导致进程缓慢进行的两个操作是opendir()
/ readdir()
和unlink()
。opendir()
并readdir()
取决于目录中的文件数。unlink()
取决于要删除的文件的大小。使此过程更快的唯一方法是减少文件的大小和数量(我怀疑这不太可能),或者将文件系统更改为具有更好操作特性的文件系统。我相信XFS对于大型文件的unlink()很有用,但对于大型目录结构却不是那么好。您可能会发现ext3 + dirindex或reiserfs更快。我不确定JFS的性能如何,但是我确定有很多关于不同文件系统性能的基准测试。
编辑:看来XFS可怕的是删除trees,所以一定要更改您的文件系统。
unlink
,除了执行unlink
系统调用外,它对实际内容没有任何作用,但是,如果删除的链接是文件的最后一个链接,并且当前未打开,则文件系统代码还有更多工作要做。这当然取决于文件系统,但是当删除的文件很大时,可能会有非常明显的区别。
确保为XFS设置了正确的安装选项。
在XFS中使用-ologbufs = 8,logbsize = 256k可能会使删除性能提高三倍。
如果您在文件级别有效地执行rm,则将花费很长时间。这就是基于块的快照如此出色的原因:)。
您可以尝试将rm分成多个单独的区域并尝试并行执行,但是我可能不会期望它会有所改善。众所周知,XFS删除文件时遇到问题,如果这是您所做工作的很大一部分,那么可能会考虑使用其他文件系统。
我知道这已经很老了,但是我认为建议中使用id。您将顺序删除这些文件,执行并行rm操作可能会加快速度。
http://savannah.nongnu.org/projects/parallel/ parallel通常可以代替xargs使用
因此,如果您删除deltedir中的所有文件
find -t f deletedir | parallel -j 10 rm
这将使您只剩下空的目录结构即可删除。
注意:如上所述,您可能仍然会遇到文件系统限制。
这里的另一种选择是分离数据,使您可以垃圾并重建实际的文件系统,而不用执行rm吗?
如何降低命令的优美性?喜欢:
nice -20 rm -rf /path/to/dir/
find . -delete -name directory
,而且速度比快得多rm -rf
。