Mengapa sinkronisasi sangat penting ketika membuat usb stick bootable linux?

15

Dari 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 tidak kehilangan sync untuk menyelesaikan sebelum menarik USB drive.

Saya ingin tahu

  • Apa fungsinya?
  • Apa konsekuensi yang ada jika ditinggalkan?

Catatan

ddperintah yang digunakan dengan opsional status=progress:

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

Atau gunakan pvuntuk kemajuan

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

Jawaban:

19

Itu ddtidak memotong cache disk kernel ketika menulis ke perangkat, jadi beberapa bagian data mungkin belum ditulis ke USBtongkat setelah ddselesai. Jika Anda mencabut USBstik pada saat itu, konten pada USBstik tidak akan konsisten. Dengan demikian, sistem Anda bahkan bisa gagal untuk boot dari USBtongkat ini .

Sync mem-flush data yang masih ada dalam cache ke perangkat.

Alih-alih memohon syncAnda dapat menggunakan fdatasync ddopsi konversi:

fdatasync

secara fisik tulis data file output sebelum selesai

Dalam kasus Anda, perintahnya adalah:

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

The conv=fdatasyncmerek ddsecara efektif memanggil fdatasync()system call pada akhir transfer sebelum ddkeluar (aku memeriksa ini dengan ddsumber 's).

Ini mengkonfirmasi bahwa ddtidak akan memotong atau menyiram cache kecuali diminta secara eksplisit untuk melakukannya.

Serge
sumber
Terima kasih atas kontribusi Anda, namun saya tidak yakin pernyataan ini benar . ddTidak mem-bypass cache disk kernel ketika ia menulis ke suatu perangkat . Saat menulis ke file (di atas lapisan sistem file dari kernel), semuanya di-cache. Namun, saya khawatir tentang menulis ke perangkat. Harap berikan sumber untuk pernyataan itu jika Anda bisa, karena itu adalah kunci dari pertanyaan ini. Jika benar, itu akan memberikan alasan yang valid untuk menjalankan syncsetelah operasi ke ddperangkat .
Jonathan Komar
Ya itu di-cache. Caching terjadi di dalam infrastruktur perangkat blok kernel. Operasi file itu sendiri tidak di-cache. antarmuka perangkat blok yang mendasari tidak menguangkan. sumber: lxr.free-electrons.com/source/block/blk-flush.c
Serge
@ macmadness86 lihat jawaban yang diperbarui
Serge
7
Saya lebih suka menggunakan oflag=sync, jadi progres menghasilkan kecepatan transfer yang sebenarnya dan bukan yang di-cache (jadi berjalan 10MB / s bukannya 100MB / s kedua dan kemudian 10 detik stall).
Bart Polot
Menulis ke perangkat blok memintas VFS sama sekali. Dengan kata lain: menulis ke file dapat di-cache oleh kernel (dan biasanya begitu) tetapi menulis ke perangkat tidak pernah di-cache oleh kernel (dan tidak bisa).
Eric
0

Dari halaman buku panduan sinkronisasi (1): "sinkronisasi - Sinkronisasi penulisan cache ke penyimpanan persisten". Pada dasarnya syncmemastikan bahwa semua data Anda ditulis ke tongkat dari cache.

schaiba
sumber
Saya tidak melihat di mana dalam pertanyaan Anda muncul bagian tentang cahaya yang menyala.
schaiba