ทำไมเมื่อคัดลอกไปยังไดรฟ์ภายนอกหน้าต่างความคืบหน้าไม่ถูกต้อง


11

รู้สึกอิสระที่จะแก้ไขชื่อเพื่ออธิบายสิ่งที่ฉันกำลังจะเขียนที่นี่ดีกว่า

เมื่อฉันคัดลอกไฟล์ขนาดใหญ่ไปยังไดรฟ์ปากกาตัวอย่างเช่นหน้าต่างความคืบหน้าจะแสดงค่าประมาณว่าเวลาส่วนใหญ่ไม่ได้ล้มเหลวในการแสดงเวลาจริงและเปอร์เซ็นต์ที่จะเสร็จสิ้น แต่มีบางกรณีที่บอกว่าทุกอย่างเสร็จสิ้นและหน้าต่างความคืบหน้า ปิด ฉันไปที่ไดรฟ์ปากกาและมันก็บอกว่ามันยังคงใช้งานอยู่ หลังจากตรวจสอบไดรฟ์ปากกาฉันเห็นว่ามันยังคงคัดลอกไฟล์ แต่ไม่มีหน้าต่างแสดงความคืบหน้านี้

ไม่เพียงเกิดขึ้นกับไฟล์ขนาดใหญ่เท่านั้น แต่ยังเกิดขึ้นกับไฟล์ขนาดเล็กอีกมากมาย หากฉันคัดลอกแถบความคืบหน้าอาจบอกว่า 15 วินาทีเป็นตัวอย่างและเสร็จในเวลานั้น แต่เวลาจริงอาจเป็น 1 นาทีและในอีก 45 วินาทีถัดไปฉันต้องดูแสงในไดรฟ์ปากกาจริงเพื่อดูว่ามีหรือไม่ เป็นกิจกรรมจริงของมัน

ฉันไม่ต้องการทราบวิธีการแก้ไขเนื่องจากฉันได้อ่านว่าการแก้ไขปัญหานี้จะเป็นไปได้อย่างไร สิ่งที่ฉันอยากรู้คือเหตุใดหน้าต่างความคืบหน้าจึงแสดงค่าประมาณที่ไม่สอดคล้องกับกระบวนการคัดลอก

มันขึ้นอยู่กับแคชในหน่วยภายนอกหรือไม่

คือขนาดไฟล์และจำนวนไฟล์ที่มีผลต่อการประมาณที่ถูกต้อง ตัวอย่างเช่น 1 ไฟล์ 4 GB หรือ 1,000 ไฟล์ 4 MB

มีตัวเลือกการกำหนดค่าที่สามารถเปลี่ยนพฤติกรรมได้หรือไม่

มีคำถามอื่นที่คล้ายกับเรื่องนี้เช่นการคัดลอกไฟล์ไปยัง usb stick ไม่เสร็จแต่ฉันให้ความสำคัญกับกลไกมากขึ้นว่าทำไมมันถึงมีพฤติกรรมเช่นนี้

คำตอบ:


6

ฉันคิดว่าคุณกำลังใช้ Nautilus เป็นตัวจัดการไฟล์ของคุณและหากมีข้อผิดพลาดอันยาวนานเกี่ยวกับเรื่องนี้ มีขนาดใหญ่เกินไปที่จะพูดถึงผลกระทบมิ้นต์, Fedora, Red Hat และทุกอย่างที่ต้องการ Ubuntu ไม่มีปัญหาเดียวกันนี้

บางคนแนะนำให้ปิดมุมมองรูปขนาดย่อ บางคนใช้ความหวังใน "เคอร์เนลใหม่ล่าสุด" แต่สิ่งนี้ยังคงมีอยู่

ปัญหา = เริ่มต้นอย่างรวดเร็วจากนั้นช้าลงนี่เป็นเพราะเมื่อติดตั้งด้วย async มันจะเขียนไปยังแคชเมื่อแคชเต็มคุณจะเห็นความเร็วในการเขียน "จริง"

ดูเหมือนว่าการทำงานรอบ ๆ sudo cp /filetobecopied /dev/nameofdevice

อีกโพสต์ที่นี่บอกว่างาน "คัดลอกในชิ้น" ยังไม่ยืนยันในส่วนของฉัน


3
ในการชี้แจงเคอร์เนลจะแคชข้อมูลใน RAM แทนการเขียนโดยตรง (เพื่อเหตุผลด้านประสิทธิภาพ) เมื่อคุณคลิก Eject syncคำสั่งจะดำเนินการในพื้นหลังซึ่งจะล้างแคช สำหรับข้อมูลจำนวนมากอาจใช้เวลาสักครู่
สามสิบเอ็ด

1
เคล็ดลับ: sudo cp / filetobecopied / dev / nameofdevice จะแทนที่ระบบไฟล์ทั้งหมดด้วยไฟล์ของคุณโดยปกติไม่ใช่สิ่งที่คุณต้องการ ....
Lennart Rolland

1

นี่เป็นคำตอบที่ดีสำหรับโซลูชัน: https://unix.stackexchange.com/a/181236 มันบอกว่า:

เหตุผลที่มันเกิดขึ้นแบบนั้นคือโปรแกรมบอกว่า "เขียนข้อมูลนี้" และเคอร์เนล linux จะคัดลอกมันลงในบัฟเฟอร์หน่วยความจำที่เข้าคิวเพื่อไปยังดิสก์จากนั้นก็บอกว่า "ตกลงเสร็จแล้ว" ดังนั้นโปรแกรมจึงคิดว่ามันได้คัดลอกทุกอย่างแล้ว จากนั้นโปรแกรมจะปิดไฟล์ แต่ในทันใดเคอร์เนลจะทำให้มันรอในขณะที่บัฟเฟอร์นั้นถูกส่งออกไปยังดิสก์

ดังนั้นน่าเสียดายที่โปรแกรมไม่สามารถบอกคุณได้ว่าต้องใช้เวลานานเท่าใดในการล้างบัฟเฟอร์เนื่องจากไม่รู้

หากคุณต้องการลองใช้เทคนิคผู้ใช้ระดับสูงคุณสามารถลดขนาดของบัฟเฟอร์ที่ Linux ใช้โดยการตั้งค่า / proc / sys / vm / dirty_bytes เป็นขนาด 15728640 (15 MB) ซึ่งหมายความว่าแอปพลิเคชันไม่สามารถรับได้เกินกว่า 15MB ก่อนความคืบหน้าจริง

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

แต่อย่าตั้งมันเล็กเกินไป! ฉันใช้ 15MB เป็นค่าคร่าวๆที่เคอร์เนลสามารถล้างบัฟเฟอร์ไปยังฮาร์ดไดรฟ์ปกติใน 1/4 ของวินาทีหรือน้อยกว่า มันทำให้ระบบของฉันไม่รู้สึก "ล้าหลัง"

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