Мені також було цікаво, коли закінчиться довготривале видалення, тому я придумав цей маленький шматочок коду оболонки:
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
завжди видаляються дані по одному ГБ за один раз, це потребує певного часу, поки не буде помічена нова різниця у розмірах байтів.
Для вирішення цього питання прапор -a
додається до прапорів за замовчуванням, pv
щоб він відображав середню швидкість передачі (оскільки нормальна швидкість поточної передачі буде більшою частиною часу).
Я усвідомлюю, що це не найкраще рішення, але найкраще, що я міг придумати. Якщо у когось є ідеї щодо вдосконалень, будь ласка, повідомте мене! :)