dd komutunun diske tam yazmasını bekleyin


13

ISO dosyasından önyüklenebilir bir usb oluşturmak için dd komutunu kullanıyorum:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M

Enter tuşuna bastıktan sonra anlık olarak çıkıyor ve bana veriyor:

915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s

Yani arka planda çalışmak gibi çünkü flash sürücünün çalıştığını görebiliyorum. Sonunda kopyalamayı durduracak ve sürücüyü başarıyla kaldırabilirim ama soru neden dd komutunun kopyalamanın bitmesini beklememesidir. Neden arka planda çalışıyor. Ve nasıl bekletebilirim?


4
Denedin syncmi
choroba

1
@choroba Sistem zaten flash sürücüye veri yazıyorsa 'sync'i çalıştırmak mantıklı mı?
Kirill Ivlev

Emin değilim, byt syncbekleyebilir.
choroba

2
ddayrıca bazı senkronizasyon seçenekleri de vardır conv=fsync. Bununla birlikte, bunu asla /dev/sd*kendim için kullanmam gerekti. Kelimenin tam anlamıyla kullandıysanız /dev/sdx, tahminim /dev(ramdisk) 'de işe yaramaz bir 959MB dosyaya sahip
olsaydınız

1
@frostschutz Flash sürücüm için / sdc kullandım
Kirill Ivlev

Yanıtlar:


21

Genel kanının rağmen ddo fazla olmayan düşük seviyeli olduğunu gayet sıradan komuttur catveya cp. Komutunuz disk önbelleğinden okur ve diğer komutlar gibi disk arabelleğine yazar.

Verilerin fiziksel ortama tam olarak yazıldığından emin olmak için aramanız gerekir sync. Komut sync, disk (ler) e giden tüm çıktı tamponlarını temizler. Ne zaman synckomut verir, veri tamamen yazılmıştır.

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M; sync

Çoğu zaman aramanıza gerek yoktur sync, çünkü bir dosya sisteminin bağlantısını kesmek aynı işi yapar. Ne zaman umountsiz “Çıkart” tıkladıktan sonra bir onay mesajı alınca komut başları veya, tamponlar diske yazılmış. Burada, takılı bir dosya sisteminden geçmeden doğrudan diske yazıyorsunuz, bu nedenle arabelleği açıkça temizlemeniz gerekiyor.

Bunun yerine ddkullanabileceğinizi unutmayın tee. Bunun iki avantajı vardır: Yazım hatası nedeniyle kaynak ve hedefi ters çevirme riski daha azdır ve muhtemelen biraz daha hızlıdır .

<~/Desktop/ubuntu.iso sudo tee /dev/sdx >/dev/null; sync

1
"Çıkar" veya "Güvenle Kaldır" düğmelerine / simgelerine ne dersiniz? "Kaldırmak için Tamam" bildirimi vermeden önce senkronizasyonu da çağırmazlar mı?
user68186

1
Muhtemelen kullanmak istiyorsunuz sudo tee /dev/sdx >/dev/null, aksi takdirde konsol çıktısına yazılan veriler nedeniyle kopyalama işlemi hala çok yavaş olacaktır.
Lekensteyn

1
@ user68186 Komutu çağırmıyorlar syncama aynı işi kaputun altında yapıyorlar.
Gilles 'SO- kötü olmayı bırak

5
Bu cevap yanlış. Bu olmadan conv=fdatasync, ddOP'nin istediği gibi veriler diske yazılana kadar komutun bitmesini beklemez. Ayrıca, synckomut bir senkronizasyon işlemi zamanlar, ancak hemen geri döner; veriler diske yazılıncaya kadar geri dönmek için beklemez.
vy32

1
@ vy32 haklısın dd, önbelleğin conv=fdatasyncvb. olmadan temizlenmesini beklemeyecek, ancak eski olmayan Linux'ta beklememek konusunda yanlışsın sync. Görebilirsiniz coreutils sync(8)yapma sync(2)syscall . sync(2)Adam sayfalık "sürümü 1.3.20 Öncesi Linux I / O dönmeden önce tamamlamak için beklemedi." Diyor böylece sync(8)diskin yazma kabul (veya bir hata tetiklenir) kadar döndürmez.
Anon

13

Bunu dene:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx conv=fdatasync bs=1m

conv=fdatasyncSöyler ddemin veriler fiziksel cihaza yazılır emin olmak için özel seçenekler kullanmak.

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.