Wie kann ich ein mit 'dd' erstelltes Laufwerk-Image für jede Partition in separate Dateien aufteilen?

9

Ich habe ein Image eines fehlerhaften Laufwerks erstellt mit:

dd if=/dev/sde of=/mnt/image001.dd

Das Laufwerk hatte nur zwei Partitionen:

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *           1          13      102400    7  HPFS/NTFS
/dev/sde2              13       60802   488282112    7  HPFS/NTFS

Wie kann ich das Image (image001.dd) in zwei oder drei Dateien (1: MBR; 2: Partition 1; 3: Partition 2) aufteilen , damit ich die Dateisysteme darin einbinden kann?

Eine Lösung, die ich gefunden habe und die für mich nicht funktionieren würde, besteht darin split, viele 512K-Dateien zu erstellen und sie dann catwieder zu drei Dateien zusammenzufügen (1: 512K, 2: 105M, 3: der Rest), aber ich habe keine der Speicherplatz dafür.

Verlauf:
Ich habe bereits das gesamte Image auf ein neues Laufwerk kopiert und es bootet und funktioniert meistens. Es scheint, dass der FS auf dem alten fehlerhaften Laufwerk ddbeschädigt wurde und die beschädigten Teile kopiert hat (wie es sollte), und ich habe sie auf das neue Laufwerk geschrieben. Meine Lösung besteht darin, den von mir kopierten FS zu mounten und nur die Dateien (mit rsyncoder so) zu kopieren, damit ich hoffentlich die fehlerhaften Bits nicht kopiere.

UPDATE 1 : Ich habe es versucht dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1, mountbeschwere mich aber NTFS signature is missing, also denke ich, dass ich es nicht richtig gemacht habe.

Joe A.
quelle

Antworten:

17

Sie müssen dies überhaupt nicht aufteilen.

Verwenden Sie parteddiese Option , um Details zur Partitionstabelle abzurufen:

parted image001.dd

In dem partedSchalter , um Byte - Einheiten mit dem Befehl u, dann B. Geben Sie danach den Befehl ein print.

Sie erhalten eine Ausgabe, die so aussieht (die Ausgabe stammt von einem tatsächlichen System, nicht von einem Image):

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 25165824000B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type     File system     Flags
 2      1048576B      400556031B    399507456B    primary  ext4            boot
 3      400556032B    21165506559B  20764950528B  primary  ext4
 1      21165506560B  25164775423B  3999268864B   primary  linux-swap(v1)

Sie können die StartZahl als Offset für einen Loopback-Mount verwenden:

mount -o loop,ro,offset=400556032 image001.dd /mnt/rescue

würde die dritte Partition an mounten /mnt/rescue.

Sven
quelle
Beides und kpartxmein Problem lösen. Ich habe diese Antwort gewählt, weil ich mir vorstellen würde, dass dies partedhäufiger vorkommt kpartx, aber kpartxetwas einfacher ist.
Joe A
16

Es ist viel besser, einfach ein kpartxWerkzeug zu verwenden.

usage : kpartx [-a|-d|-l] [-v] wholedisk
    -a add partition devmappings
    -d del partition devmappings
    -l list partitions devmappings that would be added by -a
    ...

Beispiel:

# kpartx -l whole_disk # only listing
loop0p1 : 0 518144 /dev/loop0 2048
loop0p2 : 0 3674112 /dev/loop0 520192
# kpartx -a whole_disk 
# file -sL /dev/mapper/loop0p*
/dev/mapper/loop0p1: Linux/i386 swap file (new style), version 1 (4K pages), size 64767 pages, no label, UUID=e4990860-c87d-4850-9e8d-ecb0a0506516
/dev/mapper/loop0p2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

An dieser Stelle kann ich montieren /dev/mapper/loop0p2.

Nach dem Abmelden Anruf kpartx -d whole_diskzum Aufräumen.

Kupson
quelle
1
+1 Das ist schön, ich habe noch nie von diesem Tool gehört.
Sven
Beides und die Antwort von SvenW unten funktionieren sehr gut! Mit beiden kann ich eine Partition im Laufwerk-Image bereitstellen.
Joe A