dd: auf mehrere festplatten schreiben?

16

Ich habe 2 genau gleiche formatierte, gleiche Größe und gleiche Marke SD-Karten. Ich möchte mir dazu und dazu gleichzeitig ein ddBild machen . Pseudocode/dev/disk2/dev/disk3

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

Wie können Sie ddvon einer Eingabe zu mehreren Ausgabe-SDs wechseln?

Léo Léopold Hertz 준영
quelle
Was ist das Ziel hier? Performance? Wenn ja, werden die gelesenen Daten zwischengespeichert. Also werden Sie am 2. Tag Daten aus Ihrem Cache lesen müssen (natürlich benötigen Sie etwas freien Arbeitsspeicher).
KWubbufetowicz
2
Mein vereinfachter Test mit GNU coreutils dd ... of=one of=twoergab keine zwei Ausgaben. Benötigt ddmöglicherweise zwei Befehle. Ich sehe keine Formulierung in posix für dd , um Mehrfachnennungen zu ermöglichen of.
Jeff Schaller
@ Kwubbufetowicz Ich habe 8 GB RAM. Möglich, 32GB zu bekommen. Geschwindigkeit ist mein Ziel, weil ich 5 SDs habe.
Léo Léopold Hertz 준영

Antworten:

20
  1. Aus der Antwort von don_crissti mit tee, aber ohne ddoder mit Bash- Ismen:

    sudo tee /dev/disk2 /dev/disk3 > /dev/disk4 < masi.img
    
  2. Verwenden peevon Debians moreutils- Paket:

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

    Mit bash,, kshoder zshkann das abgekürzt werden als:

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

    Oder sogar (wenn die ddnützlichen Funktionen nicht benötigt werden):

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

    peeist nützlich; Bei Bedarf können (in jedem angeführten Argument) zusätzliche ddOptionen und sogar andere Pipes und Filter angegeben werden, die individuell auf jedes Ausgabegerät zugeschnitten sind.

Bei beiden Methoden kann die Anzahl der Ausgabefelder unbegrenzt erweitert werden.

agc
quelle
1
Die Verwendung von dd ist dafür nicht erforderlich. Viele Leute glauben, dass es notwendig ist, weil seine Verwendung, die speziell für das Kopieren auf oder von Disk-Images gedacht ist, in Tutorials "versteinert" ist, die in den 90er Jahren geschrieben und von Leuten kopiert wurden, die nicht wussten, warum. Es wurde damals verwendet, um einen Fehler in cp zu umgehen.
Random832
@ Random832 Es ist notwendig, weil es stabiler ist als cp. Probieren Sie viele Formate und unterschiedliche Zuordnungsgrößen aus. Ich habe nicht genug Stall cpfür die Arbeit gefunden. Bitte korrigieren Sie mich hier als Antwort, wenn Sie argumentieren können, wie cpstabil genug ist.
Léo Léopold Hertz 준영
@Masi Es ist selten notwendig, ein Format (was meinen Sie überhaupt mit "Format") und eine Zuordnungsgröße (Sie meinen die Blockgröße?) Explizit auszuwählen, um ein Disk-Image auf eine Disk zu schreiben oder eine Disk einzulesen ein Disk-Image. Der Grund, warum dd für diesen Zweck allgemein verwendet wurde, war ein Fehler in cp (speziell GNU cp unter Linux) in den frühen 90er Jahren, der dazu führte, dass das Kopieren von Blöcken übersprungen wurde, die nur aus Null-Bytes bestanden.
Random832
7
Fehler cpin den 90ern? ddist 20 Jahre älter als das. Der Hauptgrund für die Verwendung ddwar , dass viele Geräte, insbesondere Bandlaufwerke, benötigten in festen Blockgrößen gelesen / geschrieben werden, weshalb ddhat bs, ibsund obsParameter, und es war das einzige Programm , die richtigen Blockgröße gewährleisten könnte.
Guntram Blohm unterstützt Monica
1
@Gilles, hier ist Tee in der Tat vorzuziehen, um zu pinkeln (aber dcfldd ist am besten). Trotzdem ist Natursekt nützlich. Bei Bedarf können (in jedem angeführten Argument) zusätzliche "dd" -Optionen und sogar andere Pipes und Filter hinzugefügt werden, die individuell auf jedes Ausgabegerät zugeschnitten sind.
agc
20

Sie können versuchen, Es ist eine erweiterte Version von und kann auf mehrere Dateien oder Datenträger gleichzeitig ausgegeben werden:dcfldd
gnu dd

dcfldd if=masi.img of=/dev/disk2 of=/dev/disk3 of=/dev/disk4
don_crissti
quelle
Können Sie Ihren ersten Befehl erklären? Warum nur vor dem letzten Rohr dd? Wie ändert sich die Position des Rohrs mit vier dd?
Léo Léopold Hertz 준영
3
dcflddist die schnellste, vielleicht sollte das die erste Wahl sein.
agc
3

Auch dies ist möglich mit teeund process substitution:

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

Chevallier
quelle
Können Sie Prozessersatz erklären? Inwiefern unterscheidet sich Ihre Antwort von der von agc?
Léo Léopold Hertz 준영
Ja sicher: Wird process substitutionverwendet, wenn Sie die Standardausgabe eines Befehls an mehrere Befehle weiterleiten müssen. Mit einer einfachen Pipe können Sie nur einen Befehl weiterleiten. Meine Antwort lautet, dasselbe Ergebnis wie bei agc zu erzielen, aber auf andere Weise :) Auch ich habe es noch nie benutzt pee, da ich den teeBefehl auf meinem System habe.
Chevallier