dd: scrivere su più dischi?


16

Ho 2 schede SD esattamente formattate, stesse dimensioni e della stessa marca. Mi piacerebbe ddimmaginare /dev/disk2e /dev/disk3allo stesso tempo.
pseudocodice

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

Come si può passare ddda un input a molte SD di output?


Qual è l'obiettivo qui? Prestazione? Se sì, ricorda che i dati letti verranno memorizzati nella cache. Quindi il 2 ° giorno ti verranno dati dalla tua bcache invece di leggere (ovviamente hai bisogno di un po 'di RAM libera).
KWubbufetowicz,

2
Il mio test semplicistico con GNU coreutils dd ... of=one of=twonon ha prodotto due risultati. Potrebbe aver bisogno di due ddcomandi. Non vedo la formulazione in posix per dd per consentire multipli of.
Jeff Schaller

@KWubbufetowicz Ho 8 GB di RAM. È possibile ottenere 32 GB. La velocità è il mio obiettivo perché ho 5 SD.
Léo Léopold Hertz 준영

Risposte:


20
  1. Prendendo in prestito da don_crissti risposta d' uso tee, ma senza ddo bash ismi:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. Usando peedal pacchetto moreutils di Debian :

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

    Con bash, ksho zsh, che può essere abbreviato in:

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

    O addirittura, (se non sono necessarie ddle utili funzioni):

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

    peeè utile; se necessario, si possono includere, (all'interno di ogni argomento citato), ulteriori ddopzioni distinte e persino altri tubi e filtri, adattati individualmente a ciascun dispositivo di uscita.

Con entrambi i metodi è possibile estendere indefinitamente il numero di dischi di output.


1
L'uso di dd per questo non è necessario. Molte persone credono che sia necessario perché il suo utilizzo, specifico per la copia da o su immagini del disco, è "fossilizzato" in tutorial scritti negli anni '90 e copiati da persone che non sapevano perché. Fu usato allora per aggirare un problema tecnico in cp.
Casuale 832,

@ Random832 È necessario perché è più stabile di cp. Prova molti formati e dimensioni di allocazione diverse. Non ho trovato abbastanza stabile cpper il lavoro. Per favore, correggimi come risposta qui se puoi argomentare come cpè abbastanza stabile.
Léo Léopold Hertz 준영

@Masi Raramente è necessario selezionare esplicitamente un formato (cosa intendi anche per "formato") e la dimensione di allocazione (intendi la dimensione del blocco?) Allo scopo comune di scrivere un'immagine disco su un disco o leggere un disco in un'immagine del disco. Il motivo per cui dd divenne comunemente usato per questo scopo era a causa di un bug in cp (GNU cp su Linux in particolare) nei primi anni '90 che gli causò di saltare la copia di blocchi che erano tutti a zero byte.
Casuale 832,

7
Bug negli cpanni '90? ddha 20 anni più di così. Il motivo principale per l'utilizzo ddera che molti dispositivi, in particolare le unità a nastro, dovevano essere letti / scritti in blocchi di dimensioni fisse, motivo per cui ddha bs, ibse obsparametri, ed era l'unico programma in grado di garantire dimensioni di blocco corrette.
Guntram Blohm sostiene Monica

1
@Gilles, qui tee è infatti preferibile pipì , (ma DCFLDD è migliore). Tuttavia, la pipì è utile; si può, se necessario, includere (all'interno di ogni argomento citato), opzioni "dd" aggiuntive e persino altri tubi e filtri, adattati individualmente a ciascun dispositivo di uscita.
agc,

20

Puoi provare È una versione migliorata di e può essere emessa su più file o dischi contemporaneamente:dcfldd
gnu dd

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

Puoi spiegare il tuo primo comando. Perché pipe solo prima dell'ultimo dd? Come cambia la posizione del tubo con quattro dd?
Léo Léopold Hertz 준영

3
dcflddè il più veloce, forse dovrebbe essere la prima scelta.
agc,

3

Anche questo è possibile con teeeprocess substitution :

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


Puoi spiegare il sostituto del processo? In che modo la tua risposta è diversa da quella di AGC?
Léo Léopold Hertz

sì certo: process substitutionviene usato quando è necessario reindirizzare lo stdout di un comando a più comandi. L'uso di una semplice pipe ti consentirà di eseguire il pipe con un solo comando. La mia risposta sta ottenendo lo stesso risultato di agc, ma in un modo diverso :) Inoltre non ho mai usato peeprima, dato che ho il teecomando sul mio sistema.
Chevallier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.