Wie verwende ich DD, um eine Partition von einem Disk-Image zu klonen?

Wie verwende ich DD, um eine Partition von einem Disk-Image zu klonen?

Ich habe ein Disk-Image, es ist ein "ganzes" Disk-Image, das mehrere Partitionen enthält, und ich möchte nureinsdavon (nicht die erste ...) auf eine Partition auf einem externen Laufwerk mit mehreren Partitionen (ich klone sie auch nicht auf die erste Partition der Festplatte ...)

Beim FDisking des Images wird Folgendes angezeigt:

# fdisk -l 2013-02-09-wheezy-raspbian.img

Datenträger 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 Bytes
255 Köpfe, 63 Sektoren/Spur, 235 Zylinder, insgesamt 3788800 Sektoren
Einheiten = Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Datenträgerkennung: 0x00014d34

                         Gerät Booten Start Ende Blöcke Id System
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

und das Blockgerät sieht folgendermaßen aus:

# fdisk -l /dev/sdc

Datenträger /dev/sdc: 8014 MB, 8014266368 Bytes
247 Köpfe, 62 Sektoren/Spur, 1022 Zylinder, insgesamt 15652864 Sektoren
Einheiten = Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Datenträgerkennung: 0x00000000

   Gerät Booten Start Ende Blöcke Id System
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Linux
#

Ich möchte, dass die zweite Partition des Images die zweite Partition des Blockgeräts ersetzt. Machen Sie sich keine Sorgen über den beschädigten freien Speicherplatz, den ich mit GParted bereinigen werde, und ich brauche es sowieso für etwas anderes.

Antwort1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

Wenn --partscandas nicht funktioniert, können Sie auch eines der folgenden verwenden:

# partx -a /dev/loop7
# kpartx /dev/loop7

oder ähnliche Partitionszuordnungslösungen.

Sie sollten es wahrscheinlich zuerst montieren, um zu sehen, ob es das Richtige ist oder was.

Natürlich können Sie auch die Ausgabe von fdisk lesen und dddas skip=131072oder was auch immer direkt eingeben, d. h. so viele Eingabeblöcke überspringen lassen, dass mit dem Lesen dort begonnen wird, wo sich die Partition befindet. Mit einem Loop-Gerät ist es aber schöner, tatsächliche Partitionen zu sehen.

Antwort2

So etwas sollte funktionieren:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

Wenn= legt das Bild fest, das Sie klonen möchten

von= legt die Zielpartition fest, auf die Sie das Image klonen möchten

Antwort3

  1. Mounten Sie das Image als Loopback-Gerät:losetup -fP yourImage.img
  2. Sie können nun auf jede Partition des Images direkt zugreifen. Wenn Sie verwenden müssen dd, können Sie verwenden dd if=/dev/loop0p1 of=image.img, aber ich denke, das wäre besser cat. In einer Root-Shell führen Sie einfach aus cat /dev/loop0p1 > image.img. Beide Beispiele gehen davon aus, dass Sie die erste Partition möchten und das Ihnen zugewiesene Loopback-Gerät war/dev/loop0
  3. Wenn Sie mit dem Loopback-Gerät fertig sind, können Sie es mit trennen losetup -d /dev/loop0. Auch hier wird davon ausgegangen, dass es /dev/loop0sich um Ihr Loopback-Gerät handelt.

Antwort4

Mit diesem Tool können Sie auch nur die zweite Partition in ein separates Image kopieren.

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

und danach können Sie es anstelle der Partition auf der Festplatte kopieren

dd if=second.img of=/dev/sdc2 bs=512

oder Sie können es sogar mit einem Befehl tun

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

Stellen Sie einfach sicher, dass Sie /dev/sdc2 aushängen, bevor Sie darauf schreiben.

verwandte Informationen