Hegle-Jens'编写了一个很棒的SnapBtr脚本,该脚本使用智能算法制作基于快照的备份,该算法可以在可用空间不足时选择删除哪些旧备份。
不幸的是,BTRFS文件系统有一个特点,即在任何删除命令之后,它都不会立即释放磁盘空间;相反,它只是调度每个节点的删除。释放磁盘空间的实际过程是在后台进行的,只有在完成之后,我们才能知道有多少可用空间。
这就是为什么我想改进这个脚本,以便在删除备用子卷后,它将等到没有硬盘驱动器活动时才能获得实际的可用磁盘空间统计信息。
问题是:知道周围有这么多Python库,你知道有什么会返回的吗,我可以用它来获得硬盘活动饱和率(%)?
如果这有帮助的话,我已经制作了一个Bash脚本wait-for-disk-idle.sh
,它依赖于iostat
来获取磁盘活动信息。但我想,为如此简单的事情调用外部Bash进程是非常低效和容易出错的(如果没有安装iostat
怎么办?):
#! /bin/bash
USAGE="Usage: `basename $0` [-t sample time] [-p disk IO percent threshold] disk-device"
time=4
percent=10
# Parse command line options.
while getopts ":t:" OPT; do
case "$OPT" in
t)
time=$OPTARG
;;
:)
# getopts issues an error message
echo "`basename $0` version 0.1"
echo $USAGE >&2
exit 1
;;
?)
# getopts issues an error message
echo "`basename $0` version 0.1"
echo $USAGE >&2
exit 1
;;
esac
done
while getopts ":p:" OPT; do
case "$OPT" in
p)
percent=$OPTARG
;;
:)
;;
?)
# getopts issues an error message
echo "`basename $0` version 0.1"
echo $USAGE >&2
exit 1
;;
esac
done
# Remove the switches we parsed above.
shift `expr $OPTIND - 1`
# We want at least one non-option argument.
# Remove this block if you don't need it.
if [ $# -eq 0 ]; then
# getopts issues an error message
echo "`basename $0` version 0.1"
echo $USAGE >&2
exit 1
fi
echo percent: $percent, time: $time, disk: $1
while [[ $(iostat -d -x $time 2 $1 |
sed -n 's/.*[^0-9]([0-9][0-9]*)[.,][^,^.]*$/1/p' | tail -1) > $percent
]]; do
echo wait
done
以下是我从脚本的(前)维护者那里得到的答案:
我不再使用SnapBtr.py脚本进行清理,但是你则可能能够利用CCD_ 4来等待删除完成。