Klonen von SD-Karten mit dem Befehl dd

48

Ich versuche, eine SD-Karte zu klonen, die möglicherweise mehrere Partitionen enthält, von denen einige Ubuntu nicht erkennen kann. Im Allgemeinen möchte ich das gesamte Volume klonen, nicht nur eine Partition. Also mounte ich die SD-Karte und sehe so etwas im Log Viewer:

kernel: [  262.025221]  sdc: sdc1 sdc2

alex@u120432:~$ ls /dev/sdc*
/dev/sdc  /dev/sdc1  /dev/sdc2

Da ich die gesamte Festplatte kopieren möchte, führe ich Folgendes aus:

dd if=/dev/sdc of=sdimage.img bs=4M

Die Datei sdimage.img mit 7,9 GB (7.944.011.776 Byte) wird erstellt (die SD-Karte hat 8 GB). Jetzt mounte ich eine andere SD-Karte und führe aus:

dd if=sdimage.img of=/dev/sdc bs=4M

Das Problem ist, dass der zweite Befehl dd irgendwann hängen bleibt und nie erfolgreich ist. Danach kann ich den Computer nicht mehr neu starten oder herunterfahren und muss nur noch die Stromversorgung ausschalten.

Ist das der richtige Ansatz? Vielleicht gibt es eine andere Möglichkeit, eine SD-Karte zu klonen?

Betriebssystem: Ubuntu 12.04 (Precise Pangolin), 32 Bit.

Alex F
quelle
Können Sie die erstellte IMG-Datei einbinden und prüfen, ob sie korrekt erstellt wurde?
Milan Todorovic
@MilanTodorovic - wie kann ich das machen?
Alex F
Wenn ich mich richtig erinnere: mount -o loop sdimage.img / path / to / mount. Überprüfen Sie dann, ob Sie die img-Datei korrekt durchsuchen können.
Milan Todorovic
@MilanTodorovic: Ich habe sudo mount -o sdimage.img / dev / mydisk ausprobiert und habe: mount: kann / dev / mydisk nicht in / etc / fstab oder / etc / mtab finden Möglicherweise muss ich vorher einen Dev-Eintrag erstellen. Können Sie dies als Antwort mit einigen Details posten? Vielen Dank.
Alex F
1
Sie sollten dd nicht auf gemounteten Geräten verwenden. Hängen Sie zuerst alle Partitionen aus, dann sollte Ihr Befehl funktionieren.
Ubfan1

Antworten:

29

Sie sollten dd nicht auf gemounteten Geräten verwenden. Hängen Sie zuerst alle Partitionen aus, dann sollte Ihr Befehl funktionieren.

ubfan1
quelle
2
Warum ist das Gegenteil für mich? Ich habe Ubuntu 12.10 und der Befehl hat funktioniert nur mit Partitionen montiert ...
Luca Davanzo
1
@Velthune Bist du dir da sicher? Wenn ja, würde ich vorschlagen, Ihre eigene Frage zu stellen.
Realität
25

Legen Sie die Original-SD-Karte ein und überprüfen Sie den Namen des Geräts (normalerweise mmcblkXoder sdcX):

sudo fdisk -l

Sie könnten sehen:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       2048  2099199  2097152    1G  c W95 FAT32 (LBA)
/dev/mmcblk0p2      2099200 31116287 29017088 13.9G 83 Linux

In meinem Fall ist die SD-Karte /dev/mmcblk0(die *p1und *p2sind die Partitionen).

Nun müssen Sie das Gerät aushängen:

sudo umount /dev/mmcblk0

So erstellen Sie ein Image des Geräts:

sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img

Dies wird eine Weile dauern.

Sobald es fertig ist, legen Sie die leere SD-Karte ein. Wenn das Gerät anders ist (USB oder ein anderer SD-Kartenleser), überprüfen Sie den Namen und entfernen Sie die Bereitstellung:

sudo fdisk -l
sudo umount /dev/mmcblk0

Schreiben Sie das Bild auf das Gerät:

sudo dd if=~/sd-card-copy.img of=/dev/mmcblk0

Die Schreiboperation ist viel langsamer als zuvor.

Alon Fleider
quelle
4
Wenn Sie große Datenmengen kopieren, sollten Sie eine größere Blockgröße als die Standardblockgröße festlegen, da Sie andernfalls möglicherweise sehr lange warten müssen. sudo dd if=/dev/mmcblk0 of=~/sd-card-copy.img bs=4M
Xaedes
13

Ich verwende dd tool, um USB-Sticks mit mehreren Partitionen zu klonen. Hier ist mein Befehl:

sudo dd if=/dev/sdb of=/dev/sdc bs=4096 conv=notrunc,noerror

notrunc - Kürzen Sie die Ausgabedatei nicht.
noerror - Fahren Sie nach Lesefehlern fort

Tommyk
quelle
Benötigt das nicht zwei SD-Kartenleser?
Peter Mortensen
1
@PeterMortensen Ja, viele von uns verwenden diese 4-in-1-Adapter.
Teque5
9

dd ist in Ordnung, aber ich bevorzuge cat /dev/sdc/ > ~/backup.iso Wenn Sie es wieder auf eine SD-Karte legen möchten, einfach ausführencat ~/backup.iso > /dev/sdc

Realität
quelle
Beide SD sind 8 GB. cat kann verwendet werden, um ein SD-Image zu erstellen, aber um ein anderes SD-Image zu erstellen, sollte ich dd verwenden, oder?
Alex F
0

Die folgenden Schritte haben bei Ubuntu funktioniert, um die Image-Datei ( ~/raspberrypi2.imgin meinem Fall) auf einer neuen SD-Karte wiederherzustellen (inspiriert von Alons Antwort oben):

  1. Legen Sie die Micro-SD-Karte über den Kartenleser ein.
  2. Öffnen Sie die Disks-App.
  3. Schnelles Formatieren der gesamten Karte (keine bestimmte Partition).
  4. Schließen Sie die Datenträger.
  5. Terminal öffnen und ausführen:

    sudo fdisk -l
    

Relevante Ausgabe (die zeigte, dass es aufgrund des schnellen Formats der gesamten Karte keine Partitionen gab):

Disk /dev/sdb: 7.4 GiB, 7948206080 bytes, 15523840 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 
Disk identifier: 0x6957f2f2

sudo dd if=~/raspberrypi2.img of=/dev/sdb

Dieser Schritt dauert einige gute Minuten (auch bei USB3). Stellen Sie sicher, dass Sie es nicht durch einen Vorgang unterbrechen, der das Laden auslöst (Öffnen der Apps "Dateien" oder "Festplatten").

Vielen Dank für alle Antworten.

BoazC
quelle