Senkronizasyon seçeneği neden `dd` komutuyla kullanılıyor?


13

Bu sayfadaki talimatları izleyerek, sayfada bir ddkomut ve bir syncseçenek görüntülendi. Komut aşağıdaki gibidir:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M sync

Ne olduğunu ddve nasıl çalıştığını biliyorum ama hiç syncseçeneği duymadım veya kullanmadım ve manuel sayfa girişi şöyle:

sync   pad every input block with NULs to  ibs-size;  when  used  with
       block or unblock, pad with spaces rather than NULs

Neye NULve neden dolgulu ibs-sizeve neden veri bloklarını doldurmayı rahatsız edip syncseçeneği ddkomutla kullanıyorsunuz? Neden basit ve kolay tutmuyorsunuz?

syncKomut ile uygun konumu ve değerleri olduğu gibi çalıştırmayı denediğimde aşağıdaki hatayı alıyorum:

dd: unrecognized operand ‘sync’
Try 'dd --help' for more information. 

Yanıtlar:


21

Komutu yanlış okuyorsun. Onun:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M 
sync

syncburada ayrı bir komut. Bakınız man 1 sync:

NAME
       sync - flush file system buffers

SYNOPSIS
       sync [OPTION]

DESCRIPTION
       Force changed blocks to disk, update the super block.

Önbelleğe almayı düşündüğünüzde neden kullanıldığına çok açık.

Gelince ddOkumak seçeneği, bu bir değerdir seçeneği :conv

Each CONV symbol may be:
   ascii  from EBCDIC to ASCII
   ...
   sync   pad every input block with NULs  to  ibs-size;  when  used  with
          block or unblock, pad with spaces rather than NULs

Kullanılsaydı (ki değil), bu şekilde kullanılır:

dd ... conv=sync

3
İyi cevap, çok detaylı. dd ... conv=syncTartışmayı bile tanımlamanız güzel .
Bayt Komutanı

Seni alay etmelerine izin verme! ;-) İyi cevap: görmedim bile sorunu fark ettiniz. > :-) +1
Fabby

1
Ayrıca conv=syncseçeneğin açıklamasından neden bunun için kullanılmadığı oldukça açık görünüyor. En iyi ihtimalle hiçbir şey yapmaz, en kötüsü kopyalama sırasında görüntüyü bozar.
kasperd

5
Gerçekten talimatlar oflag=fsyncbir synckomut yerine ( sistemdeki her şeyi temizler ) dd seçeneğini (dd'nin yazdığını temizler)
çağırmalıdır

Bu cevap yanıltıcı. Gg ile synchem bir argümandır convve iflagya oflagseçenekleri.
Dan Loewenherz

3

Varsayılan olarak, dd veriyi bir kerede bir satır okur, muhtemelen dosyanın sonunda veya kaynak aygıtın davranışı nedeniyle belirtilenden daha kısa bir blokta okur; buna kısmi kayıt denir . Daha sonra okuduğu miktarla aynı boyutta bir blok yazacaktır.

Dd, belirtilen sayıya ulaşılana kadar veya girişte veya giriş veya çıkışta hata görene kadar bunu tekrarlayacaktır. Tamamlandığında, dd okuduğu ve yazdığı tam ve kısmi kayıt sayısını bildirir.

Bu davranış, bir bayt akışı olarak kabul edildiğinden, bir dosya sistemi içinde veya bir TCP ağ bağlantısı üzerinden sıradan bir dosyayı kopyalamak için uygundur. Ancak ham DVD'ler ve manyetik bant gibi diğer dosya sistemi nesneleri, belirli aralıklarda olan ve bir miktarın (512 veya 2048 bayt gibi) yuvarlak bir katı olan yazma boyutları gerektirir. Örneğin, 63 512 baytlık sektörlerden 255 parça olan bir disk görüntünüz varsa ve 1024 baytlık bir blok boyutu gerektiren bir kasete yazmak istiyorsanız, şöyle bir şey yapmanız gerekir

dd if=disk.img of=/dev/rmt0 bs=1k conv=sync

dd'nin sonunda 512 baytlık bir blok yazmaya çalışmadığından emin olmak için. Sondaki daha kısa blok sıfır veya boşluklarla doldurulur. Sıfırlarla doldurmak güvenli ve yaygın bir seçimdir. Dd'nin boşluklarla doldurma seçeneği farklı bir durumda kullanışlıdır - değişken uzunluklu satırları olan bir dosyayı sabit uzunluklu satırlara dönüştürmek.


0

Linux sisteminin, dd değil, tamponları önbelleğe aldığını buldum. Bu nedenle, dd komutu tamamlandığında senkronizasyonu şu şekilde çalıştırırım:

sudo dd if=my.downloaded.iso of=/dev/sd(?) bs=1M && sync

Ben arabellek yıkama neden herhangi bir dahili dd seçeneği kullanmadım. Tipik olarak, bir dağıtımın USB sürümünü oluştururken, bilgisayardaki tek kişi benim, bu yüzden yayınlanan komutumun zarar verme konusunda hiçbir sorunu yok. Senkronizasyonu && olarak çalıştırdığım için senkronizasyon sudo hakları ile yapılır ve oluşturduğum USB'nin tamamlandığından eminim.


0

Sen kullanabilirsiniz syncdahildir çıktı, seçeneğini ddtarafından COMAND, oflagsembol:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync
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.