HINTERGRUND
Eine SD-Karte wurde für einen Raspberry Pi konfiguriert. Das Ziel ist es, die SD-Karte genau zu replizieren (Betriebssystem, Apps, Daten), damit die Replik in einem rPi genau wie die ursprüngliche Master-SD-Karte funktioniert.
UPDATE:Angenommen:
- Die Replikation wird auf einem Laptop durchgeführt, der mit einem UNIX-ähnlichen
Betriebssystem
konfiguriert ist - Die Replikation darf nicht vom rPi ausgeführt werden
- Die Ziel-SD-Karte ist vom selben Hersteller/Modell
- Die Quell-SD-Karte ist mit verschiedenen Dateisystemen partitioniert:
Fragen
Welche UNIX-Klonoptionen sind für einen Ubuntu-HP-Laptop mit einem SD-Kartensteckplatz und einem USB-SD-Kartenleser/-schreiber verfügbar.
Macht es einen Unterschied, ob die USB-SD-Karten-RW das Lese- oder Schreibgerät ist?
Ein Ziel (Einschränkung) besteht darin, den Kauf zusätzlicher Hardware zu vermeiden.
Lösungsbeobachtungen
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Mo 3. Juni 17:53:18 EDT 2019
[sudo] Passwort für Benutzer:
Mo 3. Juni 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
Dienstag, 4. Juni 00:33:50 EDT 2019
[sudo] Passwort für Benutzer:
119GiB 6:06:12 [5,56MiB/s] [================================>] 100 %
Dienstag, 4. Juni 06:43:05 EDT 2019
gTeilanalyse der geflashten SD-Karte zeigt identische Partitionierung:
Akzeptierte Antwort:
Unix-Systeme stellen Speichergeräte über eine Gerätedatei zur Verfügung. Gerätedateien verhalten sich in vielerlei Hinsicht wie gewöhnliche Dateien. Um insbesondere eine exakte Kopie des Speichergeräts zu erstellen, kopieren Sie einfach den Inhalt des Quellgeräts auf das Zielgerät.
Zuerst müssen Sie die Quellgerätedatei und die Zielgerätedatei bestimmen. Der Name hängt von Ihrer Unix-Variante und ihrer Konfiguration ab, aber in der Praxis befinden sich Gerätedateien immer unter /dev
Verzeichnis. Wenn Sie die SD-Karte gemountet haben, können Sie mit
df /media/sdcard1/some/file/on/the/sdcard
Die Gerätedatei befindet sich in der ersten Spalte. Andere Tools können die gleichen Informationen liefern, zum Beispiel Kernel-Log-Meldungen beim Einlegen der SD-Karte oder lsblk
Befehl unter Linux.
Es können Partitionen auf der Karte vorhanden sein. Kopieren Sie in diesem Fall die gesamte Karte, auch wenn nur eine Partition vorhanden ist, da sich möglicherweise Informationen zur Bootzeit außerhalb der Partition befinden. Wenn beispielsweise df
zeigt /dev/sdb1
Kopieren Sie unter Linux /dev/sdb
und nicht nur /dev/sdb1
.
Wenn Sie die SD-Karte herausziehen und wieder einsetzen, hat sie normalerweise den gleichen Gerätedateinamen wie zuvor, aber dies kann nicht garantiert werden.
Stellen Sie vor dem Kopieren Folgendes sicher:
- Das Quellgerät ist nicht gemountet oder nur schreibgeschützt gemountet.
- Das Zielgerät ist überhaupt nicht gemountet.
- Das Zielgerät ist mindestens so groß wie die Quelle. Unter Linux
lsblk
zeigt die Gerätegröße an. - Sie haben das richtige Zielgerät. Beachten Sie, dass der folgende Befehl seinen Inhalt überschreibt, ohne nach einer Bestätigung zu fragen!
Angenommen, Sie haben festgestellt, dass das Quellgerät /dev/sdb
ist und das Zielgerät ist /dev/sdc
. Um den Inhalt zu kopieren, führen Sie den folgenden Befehl als root aus:
cat /dev/sdb >/dev/sdc
Wenn Sie sudo verwenden, wird die Umleitung >
muss als root geschehen, also müssen Sie so etwas wie
sudo sh -c 'cat /dev/sdb >/dev/sdc'
Um sicherzustellen, dass Sie nicht versehentlich das falsche Gerät überschreiben, können Sie alternativ in zwei Schritten vorgehen:
- Geben Sie dem Benutzer (
gatorback
in meinem Beispiel) Berechtigung zum Lesen vom Quellgerät (dev/sdb
in meinem Beispiel) und auf das Quellgerät zu schreiben (/dev/sdc
in meinem Beispiel).sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- Führen Sie den Kopiervorgang ohne sudo durch.
cat /dev/sdb >/dev/sdc
Sie können das Disk-Image in eine Datei kopieren und dann die Image-Datei auf das Zielgerät kopieren. Dies ist nützlich, wenn Sie mehrere Kopien erstellen müssen oder wenn Sie nur einen SD-Kartenleser haben oder um das Risiko eines Kopierens in die falsche Richtung zu verringern.
sudo cat /dev/sdb >sdcard.image
- Ziehen Sie die Quellkarte heraus und stecken Sie die Zielkarte ein.
- Überprüfen Sie optional den Inhalt, indem Sie das Bild mounten, z.
sudo mount -o loop -r sdcard.image /mnt
. sudo sh -c 'cat sdcard.image >/dev/sdb'
Wenn Sie bequem Fortschrittsinformationen sehen möchten, verwenden Sie pv
statt cat
(pv
wird selten standardmäßig installiert, ist aber in den meisten Distributionen als Paket verfügbar).