有效地删除数百万个文件夹和文件

・2 分钟阅读

问题:

我有一个巨大的文件系统服务器,用于不间断连续写入和读取,需要始终处于活动状态。

我的目标是拥有一个cronjob,它根据名称和超过X天数删除空文件夹和文件。最明显的答案是 find -name -mtime -delete 但是,它使用了太多的磁盘资源,导致IO等待和其他程序错过了他们的检查,导致服务器无响应 。

是否有任何容易使用的工具来做这种工作?


回答 1:

使用ionice,来降低find命令的优先级,并最小化对其他应用程序的影响。


ionice -c 3 find -name -mtime -delete



如果没有其他程序要求磁盘IO (对于已定义的宽限期),则-c 3的类"空闲"和运行空闲IO优先级的程序将只获取磁盘时间,空闲IO进程对正常系统活动的影响应该为零。

如果这种情况从未发生过(可能是在24x7全天候使用的系统上),请尝试,-c 2 -n 7 最低的最佳工作优先级


回答 2:

大多数文件系统无法高效地对数百万文件进行更改,它们会做大量的元数据I/O,希望你每个目录中的文件少于100,000个。

使用io优先级和/或cgroup进行限制可以使系统响应,但可能导致此清理无法在合理的时间内完成。

在Linux LVM上,你可以添加一个带有lvmcache的缓存层, 添加您拥有的最快的SSD,以便它可以提供数千IOPS。如果您需要I/O响应时间不降低,则可能仍需要限制。


Xuanlv profile image