Mi chiedevo anche quando sarebbe terminata una cancellazione di lunga durata, quindi ho pensato a questo piccolo pezzo di codice shell:
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
Questo ti darà una bella barra di avanzamento come questa:
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
L'idea generale è quella di utilizzare pv
per visualizzare i progressi. Dal momento che quel comando consente solo di monitorare i byte che fluiscono attraverso una pipe, usiamo dd
per generare una quantità appropriata di zeri e inoltrarli pv
.
Il vantaggio di questo metodo è che ottieni una bella barra di avanzamento. Tuttavia, poiché sembra btrfs
eliminare sempre i dati un GB alla volta, ci vuole del tempo prima che si possa osservare una nuova differenza nelle dimensioni dei byte.
Per risolvere questo problema, il flag -a
viene aggiunto ai flag predefiniti di pv
per visualizzare una velocità di trasmissione media (poiché la velocità di trasmissione corrente normale sarà 0 il più delle volte).
Mi rendo conto che questa non è la soluzione migliore ma la migliore che ho potuto inventare. Se qualcuno ha idee per miglioramenti, per favore fatemelo sapere! :)