我怎么能*缓慢*删除一个大的目录hiearachy减less磁盘I / O和负载?

我有一个Ubuntu的Linux系统。 我有一个有大量文件的目录。 我可以使用rm -rf $NAME将其全部删除。 但是,由于磁盘I / O,可以使用大量磁盘I / O并导致负载增加。 即使我使用ionice -c 3它仍然会导致大量的磁盘I / O并因此加载。

是否有一个slowrmrf命令,这将是像rm -rf ,但将“缓慢”(FSVO慢),并删除所有的文件,但会看看系统的负载,有时停下来让负载回落?

您可以使用ionice来限制任何进程的io利用率。

例如,您可以使用以下内容:

ionice -c3 rm -rf $ NAME

当没有其他进程需要io时,只允许rm使用io,因为-c3意味着调度类空闲。

您可以将输出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个文件(从给定的原始pathrecursionsearch),然后hibernate15秒,然后删除另外100个文件,然后再次睡眠,依此类推。 根据需要调整计数和睡眠时间。

如上所述,上述可能不是特殊的文件名安全的。 但是,它应该给你一个可能的缓慢删除方法的总体思路,而不需要诉诸专门的软件。

 find "$NAME" -type f -exec bash -c 'rm -f "$1";sleep 0.1;' _ {} \;