Ich möchteschreibe ein Bildauf zwei SD-Karten gleichzeitig. Ich stelle mir mindestens zwei gleichzeitige Schreibszenarien vor:
- Ist es möglich, das Bild mit einem
tee
oder einem ähnlichen Verzweigungsmechanismus zu schreiben? 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 cat
Befehl?
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 tee
das Standardverhalten: Was tee
an eine Datei gesendet wird, senden Sie an eines Ihrer Geräteziele, wobei Sie dieses Gerät als Dateiargument des tee
Befehls angeben, und was tee
anstdout, 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 parallel
und 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