ฉันสามารถดูความคืบหน้าของการดำเนินการ "ซิงค์" ได้หรือไม่


103

ฉันได้คัดลอกไฟล์ขนาดใหญ่ไปยังดิสก์ USB ที่ติดตั้งบนระบบ Linux ด้วย async สิ่งนี้จะกลับไปที่พรอมต์คำสั่งอย่างรวดเร็ว แต่เมื่อฉันพิมพ์syncแน่นอนมันต้องไปที่ดิสก์และใช้เวลานาน

ฉันเข้าใจว่ามันจะช้า แต่มีที่ไหนที่ฉันสามารถดูตัวนับลงไปที่ศูนย์ได้หรือไม่ การดูbuffersในtopไม่ช่วยอะไรเลย


สำหรับข้อมูลเพิ่มเติมโปรดดูที่: lwn.net/Articles/572911
lanoxx

คำตอบ:


162

การดู/proc/meminfoจะแสดงDirtyจำนวนที่ลดลงตามระยะเวลาเมื่อเครื่องมือเก็บข้อมูลหมด บางส่วนอาจรั่วไหลได้Writebackเช่นกัน ซึ่งจะเป็นบทสรุปสำหรับทุกอุปกรณ์ แต่ในกรณีที่อุปกรณ์หนึ่งชิ้นในระบบช้ากว่าที่เหลือคุณจะพบว่าทุกอย่างในคิวนั้นเกี่ยวข้องกับมัน คุณอาจพบว่ามีDirtyจำนวนมากเมื่อคุณเริ่มต้นและsyncเสร็จสิ้นในเวลาเดียวกันกับที่มันเข้าใกล้ 0 ลองทำสิ่งนี้เพื่อรับการแสดงผลแบบโต้ตอบ:

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

ด้วยดิสก์ปกติฉันสามารถเพิกเฉยWritebackได้ แต่ฉันไม่แน่ใจว่ามันเกี่ยวข้องกับการถ่ายโอนทาง USB บ่อยขึ้นหรือไม่ หากมันกระดอนขึ้นและลงโดยไม่มีแนวโน้มที่ชัดเจนคุณสามารถดูDirtyตัวเลขได้


4
ในระบบของฉันการเขียนกลับจะอยู่ที่ 2-3 megs จนกระทั่งใกล้ถึงจุดสิ้นสุดเมื่อ Dirty ยังว่างอยู่ ณ จุดนั้นก็จะเริ่มลงเช่นกัน
mattdm

24

คุณสามารถดู/sys/block/<device>/statไฟล์สำหรับอุปกรณ์ที่เหมาะสมในขณะที่ทำการซิงค์ 9 THคอลัมน์จะระบุจำนวนของการร้องขอในเที่ยวบินบนอุปกรณ์ที่ควรจะไปลงไปที่ศูนย์เมื่อซิงค์จะทำ
ไม่ทราบวิธีการแปลเป็นจำนวนไบต์ แต่ควรให้ความคิดคร่าวๆว่า "สิ่งของ" ยังคงค้างอยู่

ดูไฟล์stat.txtในเอกสารประกอบเคอร์เนลสำหรับข้อมูลเพิ่มเติมอีกเล็กน้อย (นอกจากนี้ยังมีinflightไฟล์ในไดเรกทอรีนั้นบนระบบของฉันซึ่งดูเหมือนว่าอาจมีคำขออ่านและเขียนบนเครื่อง แต่ฉันไม่พบเอกสารสำหรับสิ่งนั้น)


3
เพียงเพื่อการอ้างอิงที่มีประโยชน์รวมความคิดจากคำตอบอื่น:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
สำหรับ usb stick ของฉันนี้มีแนวโน้มที่จะโฮเวอร์ประมาณ 150 ตลอดระยะเวลาการคัดลอกและsyncหลังจากนั้น มันไปที่ 0 แต่ท้ายที่สุดเท่านั้น นั่นทำให้คำตอบอื่น ๆ มีประโยชน์มากขึ้นสำหรับการดูความคืบหน้าอย่างใจร้อน
mattdm

1
(แม้ว่าในทางทฤษฎีแล้วฉันชอบที่จะมองแค่อุปกรณ์ที่เหมาะสมมากกว่าเป็นข้อมูลระบบ)
mattdm

มีวิธีการรับจำนวนไบต์เขียน (ซิงค์ล้างไม่เที่ยวบิน) หรือแคชที่จะเขียนขับ ถ้าฉันมีขนาดแคชเขียนต่อไดรฟ์ฉันสามารถใช้มันduเพื่อคำนวณข้อมูลจริงที่ซิงค์กับไดรฟ์
unfa

10

โดยใช้คำตอบของ Greg คุณสามารถsyncเรียกใช้ในพื้นหลังในขณะที่แสดงสถานะของบล็อก Dirty ในหน่วยความจำ

เพื่อให้บรรลุนี้เพียงแค่เรียกใช้คำสั่งนี้:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

สิ่งนี้จะเรียกsyncในพื้นหลังขณะดำเนินการwatchที่ด้านหน้า เมื่อsyncคำสั่งจะเสร็จสิ้น (ประมาณเมื่อขนาดของบล็อก Dirty ถึง 0) คุณจะมีเอาต์พุตที่มีลักษณะดังนี้:

1]  + 27260 done        sync

ซึ่งหมายความว่าคำสั่งได้เสร็จสิ้นและคุณสามารถฆ่าwatchคำสั่งด้วย+CtrlC


BTW: ฉันรู้ว่านี่เป็นคำถามเก่า แต่เป็นคำถามแรกที่ปรากฏใน Google เมื่อมีคนค้นหาและฉันต้องการเพิ่มโซลูชันที่ฉันพบ
jflemieux

1
การซิงค์ / umount ที่แย่เกินไปไม่ได้รับการอัปเดตจากเคอร์เนลและสามารถพิมพ์สิ่งประเภทนี้ได้โดยตรงหากถูกบอก
mcr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.