我怎样才能*缓慢地*删除大型目录层次结构以减少磁盘 i/o 和负载?

我怎样才能*缓慢地*删除大型目录层次结构以减少磁盘 i/o 和负载?

我有一个 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;' _ {} \;

相关内容