dd: birden fazla diske yazılsın mı?


16

Tam olarak aynı biçimlendirilmiş, aynı boyutta ve aynı marka SD kartlara sahibim. Aynı anda hem ddgörüntü /dev/disk2hem de görüntü istiyorum /dev/disk3.
pseudocode

sudo dd bs=1m if=/Users/masi/2016-05-10-raspbian-jessie.img of={/dev/disk2,/dev/disk3}

ddBir girişten birçok çıkış SD'sine nasıl geçebilirsiniz ?


Buradaki amaç nedir? Verim? Evetse, okuduğunuz verilerin önbelleğe alınacağını unutmayın. Böylece 2. gg okumak yerine bcache'nizden veri alacak (tabii ki biraz boş RAM'e ihtiyacınız var).
KWubbufetowicz

2
GNU coreutils dd ile ... of=one of=twoyaptığım basit test iki çıktı üretmedi. İki ddkomut gerekebilir . Birden çok için izin dd için posix ifadeler görmüyorum of.
Jeff Schaller

@KWubbufetowicz 8GB RAM'im var. 32 GB alan. Hız hedefim çünkü 5 SD'im var.
Léo Léopold Hertz 준영

Yanıtlar:


20
  1. Don_crissti'nin cevabını kullanarak tee, ama bash isms kullanarak ddveya olmadan ödünç almak :

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. Kullanılması peeDebian'ın gelen moreutils paketinin:

    sudo dd if=masi.img | \
      pee "dd of=/dev/disk2"  "dd of=/dev/disk3"  "dd of=/dev/disk4"
    

    İle bash, kshveya zshbu şekilde kısaltılarak olabilir:

    sudo dd if=masi.img | pee "dd of=/dev/disk"{2..4}
    

    Hatta, ( ddyararlı işlevlere ihtiyaç yoksa ):

    sudo pee "dd of=/dev/disk"{2..4} < masi.img
    

    peekullanışlı; gerektiğinde, (her alıntılanan argüman içinde), ilave farklı ddseçenekler ve hatta her çıkış cihazına ayrı ayrı uyarlanmış diğer borular ve filtreler bulunabilir.

Her iki yöntemde de çıkış diski sayısı süresiz olarak arttırılabilir.


1
Bunun için dd kullanmak gerekli değildir. Birçok kişi bunun gerekli olduğuna inanıyor, çünkü disk görüntülerine veya disk görüntülerinden kopyalamaya özgü kullanımı, 90'lı yıllarda yazılan ve nedenini bilmeyen insanlar tarafından kopyalanan eğitimlerde "fosilleştirildi". O zamanlar cp'de bir aksaklık etrafında çalışmak için kullanıldı.
Random832

@ Random832 Daha kararlı olduğu için gereklidir cp. Birçok biçimi ve farklı ayırma boyutlarını deneyin. cpİş için yeterince kararlı bulamadım . Lütfen, ne cpkadar kararlı olduğunu tartışabilirsen , beni burada bir cevap olarak düzeltin .
Léo Léopold Hertz 준영

@Masi Bir diske disk resmi yazmak veya diski okumak için yaygın olarak bir biçim ("biçim" ile ne demek istersiniz) ve ayırma boyutu (blok boyutu demek istersiniz?) Seçmek nadiren gereklidir. bir disk görüntüsü. Dd'nin bu amaç için yaygın olarak kullanılmasının nedeni, 90'ların başında cp'deki (özellikle Linux'ta GNU cp) bir hatadan kaynaklanıyordu ve bu da tamamen sıfır bayt olan kopyalama bloklarını atlamasına neden oldu.
Random832

7
cp90'larda böcek ? ddondan 20 yaş büyük. Kullanılmasının asıl sebebi dd, bu yüzden de sabit blok boyutları ile yazılmış okunacak gerektiğini birçok cihaz, özellikle teyp sürücüler, / idi ddsahiptir bs, ibsve obsparametreler ve doğru blok boyutları sağlamak tek programdı.
Guntram Blohm, Monica'yı

1
@Gilles, burada tee gerçekten işemek tercih edilir , (ancak dcfldd en iyisidir). Yine de, işemek yararlıdır; gerekirse, (her alıntılanan argüman içinde), ek 'dd' seçenekleri ve hatta her çıkış cihazına ayrı ayrı uyarlanmış diğer borular ve filtreler dahil edilebilir.
agc

21

Bu sürümün geliştirilmiş bir sürümünü deneyebilirsiniz ve aynı anda birden çok dosyaya veya diske çıktı gönderebilir:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4

İlk emrinizi açıklayabilir misiniz? Neden sadece sondan önce boru dd? Borunun yeri dört ile nasıl değişir dd?
Léo Léopold Hertz 준영

3
dcfldden hızlısıdır, belki de bu ilk seçim olmalıdır.
agc

Bunu diğer boru yöntemlerinden önemli ölçüde daha hızlı buldum.
ThankYee

3

Ayrıca bu teeve process substitution:

dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd


Süreç ikamesini açıklayabilir misiniz? Cevabınız agc'nin cevabından nasıl farklı?
Léo Léopold Hertz 준영

evet emin: process substitutionbir komutun stdout'unu birden fazla komuta iletmeniz gerektiğinde kullanılır. Basit bir boru kullanmak, tek bir komutla bağlantı kurmanızı sağlar. Cevabım agc ile aynı sonucu elde etmek, ama farklı bir şekilde :) Ayrıca daha peeönce hiç kullanmadım , çünkü teesistemimde komut var.
chevallier
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.