3

Hegle Jensens 编写了一个很棒的 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
4

1 回答 1

1

这是我从脚本的(前)维护者那里得到的答案:

我不再使用 SnapBtr.py 脚本进行清理,但是您可以等待删除完成并使用btrfs filesystem sync.

于 2014-03-23T15:17:40.817 回答