Мне также было интересно, когда закончится длительное удаление, поэтому я придумал этот небольшой кусочек шелл-кода:
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
чтобы он отображал среднюю скорость передачи (поскольку нормальная текущая скорость передачи в большинстве случаев будет равна 0).
Я понимаю, что это не лучшее решение, но лучшее, что я мог придумать. Если у кого-то есть идеи по улучшению, пожалуйста, дайте мне знать! :)