
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 --partscan
das 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 dd
das skip=131072
oder 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
- Mounten Sie das Image als Loopback-Gerät:
losetup -fP yourImage.img
- Sie können nun auf jede Partition des Images direkt zugreifen. Wenn Sie verwenden müssen
dd
, können Sie verwendendd if=/dev/loop0p1 of=image.img
, aber ich denke, das wäre bessercat
. In einer Root-Shell führen Sie einfach auscat /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
- 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/loop0
sich 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.