我有一个 ubuntu linux 系统。我有一个包含大量文件的目录。我可以用rm -rf $NAME
它删除所有文件。但是,这会使用大量磁盘 I/O,并导致负载增加,因为磁盘 I/O 太多。即使我使用ionice -c 3
它,仍然会导致大量磁盘 I/O,从而增加负载。
是否有一个slowrmrf
类似的命令rm -rf
,但会“缓慢地”(FSVO 慢速)运行并删除所有文件,但会查看系统的负载并有时暂停以让负载回落?
答案1
您可以使用伊奥尼采限制任何进程的 io 利用率。
例如,您可以使用以下内容:
ionice -c3 rm -rf $名称
仅当没有其他进程需要 io 时才允许 rm 使用 io,因为 -c3 表示调度类空闲。
答案2
您可以将find
输出放入偶尔暂停的循环中。
我有一个脚本,基本上可以完成这个任务,目前我无法访问,但它类似于:
i=0
find $ORIGIN_PATH -type f -print | \
IFS="" while read filename; do
i=$(($i + 1))
rm "$filename" &>/dev/null
if test "$i" -gt 100; then
sleep 15
i=0
fi
done
上述命令将删除 100 个文件(从给定的原始路径递归搜索),然后休眠 15 秒,然后再删除 100 个文件,然后再次休眠,依此类推。根据需要调整计数和休眠时间。
如上所述,上述内容可能不是外来文件名安全的。然而,它应该为您提供一种解决缓慢删除问题的可能方法的总体思路,而无需借助专门的软件。
答案3
find "$NAME" -type f -exec bash -c 'rm -f "$1";sleep 0.1;' _ {} \;