Gleichzeitiges Schreiben auf 2 SD-Karten

Gleichzeitiges Schreiben auf 2 SD-Karten

Ich möchteschreibe ein Bildauf zwei SD-Karten gleichzeitig. Ich stelle mir mindestens zwei gleichzeitige Schreibszenarien vor:

  1. Ist es möglich, das Bild mit einem teeoder einem ähnlichen Verzweigungsmechanismus zu schreiben?
  2. Ist es möglich, den Befehl „cat“ oder „pv“ von zwei verschiedenen BASH-Shells aus auszuführen?

    sudo sh -c 'pv sdcard.image >/dev/sdb'
    sudo sh -c 'pv sdcard.image >/dev/mmcblk0'
    
    sudo sh -c 'cat sdcard.image >/dev/sdb'
    sudo sh -c 'cat sdcard.image >/dev/mmcblk0'
    

Ich sehe ein Problem darin, dass, wenn die beiden Ziele mit unterschiedlichen Geschwindigkeiten beschrieben werden können, es notwendig sein könnte, die Schreibgeschwindigkeit zu drosseln, um den langsameren Brenner nicht zu überlasten. Das Bild ist groß: Die Möglichkeit, mehrere Ziele zu brennen, ist ein erheblicher Vorteil.

Antwort1

Ist es möglich, das Bild mit einem T-Stück oder einem ähnlichen Verzweigungsmechanismus zu schreiben?

sudo tee /dev/sdb /dev/mmcblk0 < sdcard.image > /dev/null

Antwort2

Ist es möglich, den Cat-Befehl von zwei verschiedenen BASH-Shells aus auszuführen?

Welcher catBefehl?


Wenn Sie einfach nur das gleiche Ergebnis wie hier erzielen möchten:

sudo sh -c 'pv sdcard.image >/dev/sdb'

sudo sh -c 'pv sdcard.image >/dev/mmcblk0'

aber warum nicht einfach mit einem einzigen Tastendruck die Befehle so kombinieren?:

sudo sh -c 'pv sdcard.image /dev/sdb && pv sdcard.image /dev/mmcblk0'

Liegt es daran, dass Sie die Datei nicht zweimal lesen möchten?

(mit &&wird der zweite Befehl nur ausgeführt, wenn der erste Befehl erfolgreich war; wenn Sie den zweiten Befehl trotzdem ausführen möchten, können Sie das &&in ein ändern ;.)


Um die Datei nur einmal aus dem Dateisystem zu lesen, können Sie Folgendes tun:

cat sdcard.image | tee /dev/sdb > /dev/mmcblk0

Hier nutzen Sie teedas Standardverhalten: Was teean eine Datei gesendet wird, senden Sie an eines Ihrer Geräteziele, wobei Sie dieses Gerät als Dateiargument des teeBefehls angeben, und was teeanstdout, leiten Sie es auf Ihr anderes Geräteziel um.


Oder das Bild zweimal lesen, aberbeide schreiben gleichzeitig, Inparallel, mit parallel:

parallel 'cat sdcard.image >' ::: /dev/{sdb,mmcblk0}

Hinweis: Beachten Sie parallel, dass dies die ist GNU parallelund nicht diemoreutils parallel

Antwort3

Dies ist das Shell-Skript mit dem absoluten Minimum für gleichzeitiges Kopieren. Eventuelle Fehler werden an STDERR weitergeleitet.

#!/bin/sh
echo "Image file ${1}"
echo "1st SD Card Path ${2}"
echo "2nd SD Card Path ${3}"

dd if=${1} of=${2}&
dd if=${1} of=${3}

Verwendungsh script.sh image_file first_card_path second_card_path

verwandte Informationen