Saya juga bertanya-tanya kapan penghapusan yang tahan lama akan selesai jadi saya membuat sepotong kode shell ini:
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
Ini akan memberi Anda bilah kemajuan yang bagus seperti ini:
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
Gagasan umum adalah menggunakan pv
untuk menampilkan kemajuan. Karena perintah itu hanya memungkinkan untuk memonitor byte yang mengalir melalui pipa yang kita gunakan dd
untuk menghasilkan jumlah nol yang tepat dan menyalurkannya pv
.
Keuntungan dari metode ini adalah Anda mendapatkan bilah kemajuan yang bagus. Namun, karena sepertinya btrfs
selalu menghapus data satu GB pada satu waktu, dibutuhkan beberapa waktu hingga perbedaan baru dalam ukuran byte dapat diamati.
Untuk mengatasi masalah ini, bendera -a
ditambahkan ke bendera default pv
untuk membuatnya menampilkan tingkat transmisi rata-rata (karena laju transmisi normal saat ini adalah 0 sebagian besar waktu).
Saya menyadari ini bukan solusi terbaik tetapi yang terbaik yang bisa saya dapatkan. Jika seseorang memiliki ide untuk perbaikan, beri tahu saya! :)