我们使用 rsnapshot 进行备份。它保留了许多备份文件的快照,但它确实删除了旧的。这很好。rm -rf
然而,在一个庞大的目录树上做一个大约需要 7 个小时。文件系统是 XFS。我不确定那里有多少个文件,但可能有数百万个。
有没有办法加快速度?是否有任何命令可以执行相同的操作rm -rf
并且不需要花费数小时和数小时?
我们使用 rsnapshot 进行备份。它保留了许多备份文件的快照,但它确实删除了旧的。这很好。rm -rf
然而,在一个庞大的目录树上做一个大约需要 7 个小时。文件系统是 XFS。我不确定那里有多少个文件,但可能有数百万个。
有没有办法加快速度?是否有任何命令可以执行相同的操作rm -rf
并且不需要花费数小时和数小时?
不。
rm -rf
对文件系统进行递归深度优先遍历,调用unlink()
每个文件。导致进程缓慢的两个操作是opendir()
/readdir()
和unlink()
.opendir()
并且readdir()
取决于目录中的文件数。unlink()
取决于被删除文件的大小。加快此过程的唯一方法是减少文件的大小和数量(我怀疑这不太可能)或将文件系统更改为具有更好特性的这些操作。我相信 XFS 对于大文件上的 unlink() 很有用,但对于大型目录结构来说不是很好。您可能会发现 ext3+dirindex 或 reiserfs 更快。我不确定 JFS 的表现如何,但我确信有很多不同文件系统性能的基准。编辑:XFS 似乎在删除树方面很糟糕,所以一定要改变你的文件系统。
作为替代方案,将目录移到一边,使用相同的名称、权限和所有权重新创建它,然后重新启动任何关心该目录的应用程序/服务。
然后,您可以在后台“nice rm”原始目录,而不必担心长期中断。
确保为 XFS 设置了正确的挂载选项。
将 -ologbufs=8,logbsize=256k 与 XFS 一起使用可能会使您的删除性能增加三倍。
无论使用什么文件系统,都可以将 ionice 用于像这样的 IO 密集型操作。
我建议这个命令:
它将很好地用于具有重 IO 负载的服务器上的后台操作。
如果您在文件级别有效地执行 rm,那么这将需要很长时间。这就是为什么基于块的快照如此出色的原因:)。
您可以尝试将 rm 拆分为单独的区域并尝试并行执行,但我可能不希望它有任何改进。众所周知,XFS 在删除文件时会遇到问题,如果这是您所做工作的很大一部分,那么可能会考虑使用不同的文件系统。
我知道这是旧的,但我想我会提出一个建议。您正在按顺序删除这些文件,执行并行 rm 操作可能会加快速度。
http://savannah.nongnu.org/projects/parallel/ 并行通常可以用来代替 xargs
因此,如果您删除 deltedir 中的所有文件
那只会让您删除空目录结构。
注意:您可能仍会遇到上述文件系统限制。
这里的另一种选择是以这样一种方式分离数据,以便您可以垃圾和重建实际的文件系统而不是执行 rm?
如何降低命令的友好度?喜欢: