ฉันยังสงสัยด้วยว่าการลบที่ยาวนานจะสิ้นสุดลงดังนั้นฉันจึงได้โค้ดเชลล์ตัวน้อย:
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 ส่วนใหญ่)
ฉันรู้ว่านี่ไม่ใช่ทางออกที่ดีที่สุด แต่ดีที่สุดที่ฉันสามารถหาได้ หากมีคนมีความคิดในการปรับปรุงโปรดแจ้งให้เราทราบ! :)