Önyüklenebilir bir linux usb stick yaparken senkronizasyon neden bu kadar önemlidir?


15

Arch Linux Wiki'sinden: 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 not özledim senkronizasyon USB sürücü çekerek önce tamamlayın.

bilmek isterim

  • Bu ne işe yarıyor?
  • Dışarıda bırakılırsa ne gibi sonuçlar olur?

notlar

ddisteğe bağlı olarak kullanılan komut status=progress:

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

Veya pvilerleme için kullanmak

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

Yanıtlar:


19

ddVerilerin bir kısmı henüz yazılmamış olabilir bu yüzden, bir aygıta yazarken çekirdek diski önbelleklerini baypas değil USBüzerine sopa ddtamamlanması. USBO anda çubuğunuzu çıkarırsanız, çubuktaki içerik USBtutarsız olur. Böylece, sisteminiz bu USBçubuktan önyükleme yapamayabilir .

Sync önbellekteki hareketsiz verileri aygıta temizler.

Bunun yerine çağırmanın syncşunu kullanabilirsiniz fdatasync dd'dönüşüm seçeneği s:

fdatasync

bitirmeden önce çıktı dosyası verilerini fiziksel olarak yazın

Sizin durumunuzda, komut şöyle olacaktır:

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

conv=fdatasyncMarkaları ddetkin bir çağrı fdatasync()hemen önce transferi sonunda sistem çağrısı ddçıkışları (I ile bu kontrol dd'ın kaynaklardan).

Bu dd, açıkça belirtilmedikçe önbellekleri atlamayacağını veya temizlemeyeceğini doğrular .


Katkınız için teşekkürler, ancak ben emin bu açıklama doğru olduğunu duyuyorum does not bir cihaza yazar çekirdek diski önbelleklerini baypas . Bir dosyaya yazarken (çekirdeğin dosya sistemi katmanı üzerinden), şeyler önbelleğe alınır. Ancak, cihazlara yazma konusunda endişeliyim. Mümkünse, lütfen bu ifade için bir kaynak sağlayın, çünkü bu sorunun bağlantı noktası budur. Doğruysa, bir aygıta çalıştırmadan sonra çalışma için geçerli bir neden sağlar. ddsyncdd
Jonathan Komar

Evet önbelleğe alındı. Önbellekleme, çekirdeğin blok cihazı altyapısında gerçekleşir. Dosya işlemlerinin kendisi önbelleğe alınmaz. altta yatan blok cihaz arayüzü para yatırımı yapar. Kaynak: lxr.free-electrons.com/source/block/blk-flush.c
Serge

@ macmadness86 güncellenmiş cevaba bakın
Serge

7
Kullanmayı tercih ederim oflag=sync, bu yüzden ilerleme önbelleğe alınmış olanı değil gerçek aktarım hızını çıkarır (böylece bir saniye 100MB / s yerine 10 saniye / saniye ve sonra 10 saniye duraklama devam eder).
Bart Polot

Bir blok cihaza yazmak VFS'yi tamamen atlar. Başka bir deyişle: bir dosyaya yazmak çekirdek tarafından önbelleğe alınabilir (ve genellikle öyledir), ancak bir aygıta yazmak hiçbir zaman çekirdek tarafından önbelleğe alınmaz (ve edemez).
Eric

0

Senkronizasyon (1) kılavuz sayfasından: "sync - Önbelleğe alınmış yazma işlemlerini kalıcı depolama birimiyle senkronize et". Temel olarak synctüm verilerinizin önbellekten çubuğa yazıldığından emin olur.


Sorunuzun nerede olduğunu, ışığın ortaya çıkmasıyla ilgili kısmı göremiyorum.
schaiba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.