Kombinieren Sie Partitionen zu einem Image

13

Ich habe 3 Bilder. Jedes Image wurde durch Klonen (von dd) einer Partition erstellt (diese Partitionen wurden mit dem ext3-Dateisystem formatiert). Eine Partition kann mit GRUB1 (CentOS) gebootet werden

Wie kann ich sie zu einem Image kombinieren?

(Ich kann die Partitionsimages mit dem Befehl dd kopieren, aber ich weiß nicht, wie ich eine Partitionstabelle erstellen und das Booten zum Funktionieren bringen soll.)

Dima
quelle
1
Was versuchst du wirklich zu tun? Klonen Sie ein funktionierendes System auf neue Hardware usw.? Waren die drei Partitionen von verschiedenen Einhängepunkten auf einem einzigen System?
Mike Renfro
Was ist das Ziel? Sie können Loopback-Geräte verwenden, um mit Dateisystem-Images zu arbeiten, aber das Ändern von Festplatten-Images anstelle von Partitions- / Dateisystem-Images ist wesentlich schwieriger.
Michael Lowman

Antworten:

15

Erstellen Sie ein Disk-Image. Der folgende Befehl erstellt ein 10G- Sparse-Image :

# dd if=/dev/zero of=mydisk.img bs=1 count=0 seek=10G
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.6554e-05 s, 0.0 kB/s
# ls -lh mydisk.img
-rw-r--r--. 1 root root 10G Jun 17 15:27 mydisk.img

Partitioniere das Image mit fdisk:

# fdisk mydisk.img

Stellen Sie sicher, dass Sie Partitionen erstellen, die mindestens so groß sind wie die Partitionen, die Sie erstellt haben! Für dieses Beispiel habe ich folgendes Layout erstellt:

# fdisk -l mydisk.img
Disk mydisk.img: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 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
Disk identifier: 0x5519250f

     Device Boot      Start         End      Blocks   Id  System
mydisk.img1            2048     2099199     1048576   83  Linux
mydisk.img2         2099200     4196351     1048576   83  Linux

Verwenden Sie kpartxdiese Option , um Geräte zu erstellen, die den einzelnen Partitionen entsprechen:

# kpartx -av mydisk.img
add map loop0p1 (253:3): 0 2097152 linear /dev/loop0 2048
add map loop0p2 (253:4): 0 2097152 linear /dev/loop0 2099200

Dadurch werden Einträge erstellt unter /dev/mapper:

# ls -l /dev/mapper
lrwxrwxrwx. 1 root root       7 Jun 17 15:33 loop0p1 -> ../dm-3
lrwxrwxrwx. 1 root root       7 Jun 17 15:33 loop0p2 -> ../dm-4

Jetzt können Sie Ihre Partitionsimages auf Ihre Partitionen kopieren:

# dd if=image_of_partition_1.img of=/dev/mapper/loop0p1 bs=1M
# dd if=image_of_partition_2.img of=/dev/mapper/loop0p2 bs=1M

Entfernen Sie nun die Gerätezuordnungen:

# kpartx -dv mydisk.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0

Und du bist fertig!

Anmerkungen

  • Sie können dasselbe auch erreichen, indem Sie ddund den seekParameter verwenden (um mit dem Schreiben am entsprechenden Versatz in Ihrer Disk-Image-Datei zu beginnen), anstatt zu verwenden kpartx, aber ich denke, dass die Verwendung kpartxweniger fehleranfällig ist.

  • Dies führt nicht zu einem bootfähigen Image. Wenn Sie das wollen, müssen Sie auch einen Bootloader darauf installieren.

larsks
quelle