Jak mogę podzielić obraz dysku utworzony za pomocą „dd” na osobne pliki dla każdej partycji?

9

Stworzyłem obraz awarii dysku za pomocą:

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

Dysk miał tylko dwie partycje:

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

Jak mogę podzielić obraz (image001.dd) na dwa lub trzy pliki (1: MBR; 2: Partycja 1; 3: Partycja 2), aby móc w nim zamontować systemy plików?

Rozwiązaniem, które dla mnie nie zadziała, jest splitutworzenie wielu plików 512 KB, a następnie z catpowrotem razem w trzy pliki (1: 512 K, 2: 105 M, 3: pozostałe), ale nie mam miejsce na dysku.

Historia:
Skopiowałem już cały obraz na nowy dysk, który uruchamia się i działa głównie. Wygląda na to, że FS został uszkodzony na starym uszkodzonym dysku i ddskopiował uszkodzone części (tak jak powinien), a ja zapisałem je na nowym dysku. Moim rozwiązaniem jest zamontowanie skopiowanego FS i skopiowanie tylko plików (za pomocą rsynclub czegoś), aby mam nadzieję, że nie skopiuję złych bitów.

AKTUALIZACJA 1 : Próbowałem, dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1ale mountnarzekam NTFS signature is missing, więc myślę, że nie zrobiłem tego dobrze.

Joe A.
źródło

Odpowiedzi:

17

Nie musisz tego wcale dzielić.

Użyj, partedaby uzyskać szczegółowe informacje na temat tablicy partycji:

parted image001.dd

W partedprzełączyć do jednostek bajtowych z poleceniem u, następnie B. Następnie wydaj polecenie print.

Otrzymasz wyjście, które wygląda następująco (wyjście pochodzi z rzeczywistego systemu, a nie obrazu):

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)

Możesz użyć tej Startliczby jako przesunięcia dla montażu pętli zwrotnej:

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

zamontuje trzecią partycję na /mnt/rescue.

Sven
źródło
Zarówno to, jak i kpartxrozwiązanie mojego problemu. Wybrałem tę odpowiedź, ponieważ wyobrażam sobie, że partedjest to częstsze niż kpartx, choć kpartxjest nieco łatwiejsze.
Joe A
16

O wiele lepiej jest po prostu użyć kpartxnarzędzia.

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
    ...

Przykład:

# 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)

W tym momencie mogę zamontować /dev/mapper/loop0p2.

Po odmontowaniu wezwania kpartx -d whole_diskdo posprzątania.

kupson
źródło
1
+1 To jest miłe, nigdy nie słyszałem o tym narzędziu.
Sven
Zarówno to, jak i odpowiedź SvenW poniżej działają bardzo dobrze! Oba pozwalają mi zamontować partycję w obrazie dysku.
Joe A