Tôi cũng đã tự hỏi khi việc xóa kéo dài sẽ kết thúc vì vậy tôi đã đưa ra đoạn mã shell nhỏ này:
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
Điều này sẽ cung cấp cho bạn một thanh tiến trình tốt đẹp như thế này:
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
Ý tưởng chung là sử dụng pv
để hiển thị tiến độ. Vì lệnh đó chỉ cho phép giám sát các byte chảy qua một đường ống mà chúng ta sử dụng dd
để tạo ra một số không thích hợp và đưa chúng vào pv
.
Ưu điểm của phương pháp này là bạn có được một thanh tiến trình tốt đẹp. Tuy nhiên, vì có vẻ nhưbtrfs
luôn xóa dữ liệu một GB mỗi lần, phải mất một thời gian cho đến khi có thể thấy sự khác biệt mới về kích thước byte.
Để giải quyết vấn đề này cờ -a
được thêm vào các cờ mặc định pv
để làm cho nó hiển thị tốc độ truyền trung bình (vì tốc độ truyền hiện tại thông thường sẽ là 0 trong hầu hết thời gian).
Tôi nhận ra đây không phải là giải pháp tốt nhất mà là giải pháp tốt nhất tôi có thể nghĩ ra. Nếu ai đó có ý tưởng cải tiến xin vui lòng cho tôi biết! :)