高效删除数百万个文件夹和文件

高效删除数百万个文件夹和文件

我有一台具有巨大文件系统的服务器,该文件系统用于连续无中断地写入和读取,并且需要始终处于活动状态。

我的目标是有一个 cronjob,根据名称删除超过 X 天的空文件夹和文件。答案显而易见,find -name -mtime -delete但它占用了太多磁盘资源,导致 IO 等待,并且由于服务器无响应,其他程序无法检查。

是否有任何易于使用的工具可以完成此类工作?也许可以限制磁盘使用量?还有其他我还没想到的东西?

答案1

使用ionice降低 find 命令的优先级并尽量减少对其他应用程序的影响。

ionice -c 3 find -name -mtime -delete

-c 3是“空闲”类,并且以空闲 IO 优先级运行的程序只有在没有其他程序请求磁盘 IO 时(在定义的宽限期内)才会获得磁盘时间。空闲 IO 进程对正常系统活动的影响应该为零。

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

答案2

大多数文件系统无法有效处理数百万个文件的更改,它们会执行大量元数据 I/O。希望每个目录中的文件少于 100,000 个。

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

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

相关内容