また、長期にわたる削除がいつ終了するのか疑問に思っていたので、この小さなシェルコードを思いつきました。
get_bytes() {
btrfs device usage --raw /mnt/data | egrep -- '-[0-9]+' | sed -E 's/[^0-9]+([0-9]+)/\1/'
}
prev=$(get_bytes)
while [ 1 ]; do
current=$(get_bytes)
diff=$((current-prev))
if [ "$diff" -gt 0 ]; then
dd if=/dev/zero iflag=count_bytes count="$diff" 2>/dev/null
fi
prev="$current"
sleep 1
done | pv -petraW -s $(get_bytes) >/dev/null
これにより、次のような進行状況バーが表示されます。
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
一般的な考え方は、pv
進行状況の表示に使用することです。そのコマンドはパイプを流れるバイトを監視することしかできないのでdd
、適切な量のゼロを生成し、それらをパイプするために使用しpv
ます。
この方法の利点は、進行状況バーが表示されることです。ただし、btrfs
データは常に1 GBずつ削除されるように見えるため、バイトサイズの新しい違いが観察されるまでには時間がかかります。
この問題に対処するために、フラグ-a
がデフォルトのフラグに追加されてpv
、平均伝送速度が表示されるようになります(通常の現在の伝送速度はほとんどの場合0になるため)。
これは最善の解決策ではないが、思いつく限り最善の解決策だと思います。誰かが改善のためのアイデアを持っているなら、私に知らせてください!:)