staging.inyokaproject.org

dd multicast?

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 16.04 (Xenial Xerus)
Antworten |

Lebowski1

Anmeldungsdatum:
3. November 2007

Beiträge: 244

Hallo, ich muss mehrere SD-Karten mit dem raspian image beschreiben. Ich habe ein USB-HUB mit 8 Anschlüssen und so "usb-Sticks", die die SD-Karte aufnehmen können.

Nun könnte ich ja in einer Schleife alle per dd if=image of=$geraetedate alle beschreiben. Gibt es ähnliches wie Multicast, so dass alle SD-Karten das Image aufeinmal schreiben.

Besten Dank

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Lebowski1 schrieb:

Nun könnte ich ja in einer Schleife alle per dd if=image of=$geraetedate alle beschreiben. Gibt es ähnliches wie Multicast, so dass alle SD-Karten das Image aufeinmal schreiben.

Die einfachste Variante ist, die dd zu parallelisieren:

1
2
3
4
5
6
7
#!/bin/bash

for dev in sd{m..p}; do
  dd if=/das/image of=/dev/$dev &
done

wait

Zeile 5 wartet darauf, dass alle Hintergrundprozesse fertig werden.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7795

Solange keine Offsets o.ä. ins Spiel kommen - normales tee reicht da schon.

tee < eingabe > ausgabe1 ausgabe2 ausgabe3

Wobei zu beachten ist, daß ausgabe1 hier ein Shell-Redirect ist und ausgabe2, ausgabe3 Argumente an tee. Schreibt man ausgabe* bekommt man das von der Shell mit "ambiguous redirect" quittiert.

Wenn man da mit Wildcards arbeiten will ist man eher so:

tee ausgabe* < eingabe > /dev/null

Nachteil von der Tee-Lösung: Du wartest da immer auf das langsamste Gerät.

Beim parallelen dd wird eine USB3 Platte schneller "fertig" sein als eine USB2. Dafür werden dort die gleichen Daten von der Quelle öfter gelesen und wieder geschrieben.

In beiden Fällen spielt da aber auch noch ein Cache mit.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

frostschutz schrieb:

Solange keine Offsets o.ä. ins Spiel kommen - normales tee reicht da schon.

tee < eingabe > ausgabe1 ausgabe2 ausgabe3

Ach ja, hatte ganz vergessen, dass tee auf mehrere Dateien schreiben kann. 👍

Nachteil von der Tee-Lösung: Du wartest da immer auf das langsamste Gerät.

Naja, das tut man in meiner Lösung auch, weil das Skript erst terminiert, wenn das letzte Kind fertig ist. tee wird intern sicher nonblocking I/O nutzen, damit nicht alle Schreibvorgänge nacheinander ausgeführt werden und aufeinander warten müssen, was deutlich langsamer wäre.

Beim parallelen dd wird eine USB3 Platte schneller "fertig" sein als eine USB2. Dafür werden dort die gleichen Daten von der Quelle öfter gelesen und wieder geschrieben.

In beiden Fällen spielt da aber auch noch ein Cache mit.

In diesem Fall dürfte wegen der zeitlichen Nähe die Eingabedatei nur ein Mal von der Platte gelesen werden - den Rest macht der Plattencache.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich glaube Lebowski will es einmal an den Hub schicken, der es dann an 8 Schnittstellen weiterleitet, was ökonomisch wäre, aber im Hub einiges an Chips und Puffern vorraussetzen würde, und ein Protokoll, dem man sagen kann, dass es auf den Lautsprecher und auf die USB-Maus nicht geschrieben werden soll.

Lebowski1

(Themenstarter)

Anmeldungsdatum:
3. November 2007

Beiträge: 244

Hallo,

danke für die Antworten. Ich habe es jetzt so gelöst:

Zuerst dcfldd installieren

sudo apt-get install dcfldd 

und dann mit

sudo blkid -o list 

herausfinden, welche Gerätedatei die sd-Karten bekommen haben.

Dann mit

dcfldd if=raspbian.img of=/dev/sdb of=/dev/sdc of=/dev/sdd of=/dev/sde of=/dev/sdf ... 

alles gleichzeitig schreiben. Dauert beim aktuellen rpi Image knapp 10min, egal wie viele sd-Karten.

Antworten |