Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Python:如何等到磁盘活动停止?_Linux_Python 2.7_Btrfs - Fatal编程技术网

Linux Python:如何等到磁盘活动停止?

Linux Python:如何等到磁盘活动停止?,linux,python-2.7,btrfs,Linux,Python 2.7,Btrfs,这使得基于快照的备份具有智能算法,在可用空间不足时选择删除哪些旧备份 不幸的是,BTRFS文件系统有一个特点,即在执行任何删除命令后,它不会立即释放磁盘空间;相反,它只安排删除每个节点。释放磁盘空间的实际过程发生在后台,只有在释放完成后,我们才知道有多少可用空间 这就是为什么我想改进此脚本,以便在删除备用子卷后,它将等待硬盘驱动器没有活动,以获得实际可用磁盘空间统计信息 问题是:知道有这么多Python库,你知道有哪些库会返回一些东西,我可以用它们来获得%的硬盘活动饱和度吗 如果这有帮助的话,我

这使得基于快照的备份具有智能算法,在可用空间不足时选择删除哪些旧备份

不幸的是,BTRFS文件系统有一个特点,即在执行任何删除命令后,它不会立即释放磁盘空间;相反,它只安排删除每个节点。释放磁盘空间的实际过程发生在后台,只有在释放完成后,我们才知道有多少可用空间

这就是为什么我想改进此脚本,以便在删除备用子卷后,它将等待硬盘驱动器没有活动,以获得实际可用磁盘空间统计信息

问题是:知道有这么多Python库,你知道有哪些库会返回一些东西,我可以用它们来获得%的硬盘活动饱和度吗

如果这有帮助的话,我已经制作了一个Bash脚本
wait for disk idle.sh
,它依赖于
iostat
获取磁盘活动信息。但我想,为这么简单的东西调用外部Bash进程效率很低,而且容易出错(如果没有安装
iostat
),该怎么办


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

我不再使用SnapBtr.py脚本进行清理,但是 可以通过
btrfs文件系统同步
等待删除完成

#! /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