我有一个大型文件系统,有时需要删除其中的某些目录。目前我有一个脚本,它除了其他功能外,还删除一个文件夹,然后生成电子邮件通知。但是,由于删除目录可能需要几秒钟到几天的时间,所以我想异步执行此操作。
我可以想出一个解决方案,比如 rm -rf /some/directory
在适当的cron
目录中生成小片段,但如果需要删除大量大目录,这可能会受到堵塞。
有人知道更好的解决方案吗?
答案1
减慢删除速度的不是文件删除本身(因为此类操作在日志中被批量处理并以大块的形式提交到主文件系统,因此在某种意义上它们已经是异步的),而是发现什么删除。换句话说,需要遍历元数据才能列出所有要删除的 inode,这是迄今为止最大的问题。不幸的是,没有真正的办法可以避免。
您可以采取以下措施:
- 使用快速缓存设备缓存尽可能多的元数据
- 使用一次性卷/文件系统,其中“删除许多文件”变为“简单地丢弃整个卷或文件系统”
cron
通过或类似工具安排部分、逐步删除
有关删除性能和其他减慢文件删除速度的因素的更多信息,您可以阅读这个答案。
答案2
删除文件夹应该几乎是即时的。它正在搜索目录树并删除多个文件和目录,这可能是问题所在。
可能会堵塞
我不知道你这话是什么意思。
如果您担心单个实例的执行可能会与后续执行重叠,那么这为什么是个问题?如果有充分的理由确保实例的排他性,则使用锁定文件或使用 限制运行时间timeout
。