เหตุใดการซิงค์จึงสำคัญเมื่อทำการติด USB แบบ linux


15

จาก Arch Linux Wiki: https://wiki.archlinux.org/index.php/USB_flash_installation_media

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[ ... ] Do ไม่พลาดการซิงค์ให้เสร็จสมบูรณ์ก่อนที่จะดึงไดรฟ์ USB

ผมอยากจะรู้ว่า

  • มันทำอะไร?
  • จะเกิดอะไรขึ้นหากปล่อยทิ้งไป?

หมายเหตุ

ddคำสั่งที่ใช้กับทางเลือกstatus=progress:

tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync

หรือใช้pvเพื่อความก้าวหน้า

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync

คำตอบ:


19

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

Sync ล้างข้อมูลภาพนิ่งที่ยังอยู่ในแคชไปยังอุปกรณ์

แทนที่จะกล่าวอ้างsyncคุณสามารถใช้fdatasync ddตัวเลือกการแปลง:

fdatasync

เขียนข้อมูลไฟล์เอาต์พุตก่อนเสร็จ

ในกรณีของคุณคำสั่งจะเป็น:

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

การโทรอย่างมีประสิทธิภาพconv=fdatasyncทำให้การddโทรของfdatasync()ระบบเมื่อสิ้นสุดการถ่ายโอนก่อนddออก (ฉันตรวจสอบสิ่งนี้ด้วยddแหล่งที่มาของ)

สิ่งนี้เป็นการยืนยันว่าddจะไม่บายพาสหรือล้างแคชเว้นแต่จะได้รับคำแนะนำอย่างชัดเจนให้ทำเช่นนั้น


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

ใช่แคชแล้ว การแคชเกิดขึ้นภายในโครงสร้างอุปกรณ์บล็อกของเคอร์เนล การทำงานของไฟล์นั้นไม่ได้ถูกแคช อินเตอร์เฟซอุปกรณ์บล็อกพื้นฐานไม่ cashing แหล่งที่มา: lxr.free-electrons.com/source/block/blk-flush.c
Serge

@ macmadness86 ดูคำตอบที่อัพเดทแล้ว
Serge

7
ฉันใช้งานล่วงหน้าoflag=syncดังนั้นความคืบหน้าจะส่งผลให้ความเร็วการถ่ายโอนจริงไม่ใช่ความเร็วที่เก็บไว้ (ดังนั้นจะมีความเสถียร 10MB / s แทนที่จะเป็น 100 วินาทีต่อวินาที 100 วินาทีต่อวินาทีและ 10 วินาทีของแผงลอย)
Bart Polot

การเขียนไปยังอุปกรณ์บล็อกข้าม VFS โดยสิ้นเชิง ในคำอื่น ๆ : การเขียนไปยังไฟล์สามารถถูกแคชโดยเคอร์เนล (และมักจะเป็น) แต่การเขียนไปยังอุปกรณ์จะไม่ถูกแคชโดยเคอร์เนล (และไม่สามารถ)
Eric

0

จากหน้าคู่มือการซิงค์ (1): "ซิงค์ - ซิงโครไนซ์แคชที่เขียนไปยังที่เก็บข้อมูลถาวร" โดยทั่วไปsyncจะทำให้แน่ใจว่าข้อมูลทั้งหมดของคุณถูกเขียนไปยังแท่งจากแคช


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