Come posso dividere un'immagine di unità creata con 'dd' in file separati per ogni partizione?


9

Ho creato un'immagine di un'unità guasta con:

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

L'unità aveva solo due partizioni:

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

Come posso dividere l'immagine (image001.dd) in due o tre file (1: MBR; 2: Partition 1; 3: Partition 2) in modo da poter montare i filesystem al suo interno?

Una soluzione che ho trovato che non avrebbe funzionato per me è quella di utilizzare splitmolti file da 512K, quindi catriunirli in tre file (1: 512K, 2: 105M, 3: il resto), ma non ho lo spazio su disco per quello.

Storia:
ho già copiato l'intera immagine su una nuova unità e si avvia e funziona principalmente. Sembra che FS sia stato danneggiato sul vecchio disco guasto e abbia ddcopiato le parti danneggiate (come dovrebbe) e le ho scritte sul nuovo disco. La mia soluzione è montare l'FS che ho copiato e copiare solo i file (usando rsynco qualcosa del genere) in modo che, spero , non copi i bit cattivi.

AGGIORNAMENTO 1 : Ci ho provato dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1ma mi mountlamento NTFS signature is missing, quindi penso di non averlo fatto bene.

Risposte:


17

Non è necessario dividerlo affatto.

Utilizzare partedper ottenere dettagli sulla tabella delle partizioni:

parted image001.dd

In parted, passa alle unità byte con il comando u, quindi B. Successivamente, emettere il comando print.

Otterrai un output simile al seguente (l'output proviene da un sistema reale, non un'immagine):

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)

È possibile utilizzare il Startnumero come offset per un montaggio loopback:

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

monterebbe la terza partizione su /mnt/rescue.


Sia questo che kpartxrisolvere il mio problema. Ho scelto questa risposta perché immagino che partedsia più comune di kpartx, tuttavia kpartxè un po 'più facile.
Joe A

16

È molto meglio semplicemente usare lo kpartxstrumento.

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

Esempio:

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

A questo punto posso montare /dev/mapper/loop0p2.

Dopo aver smontato la chiamata kpartx -d whole_diskper ripulire.


1
+1 Questo è carino, non ho mai sentito parlare di quello strumento.
Sven

Sia questa una risposta di SvenW qui sotto funziona molto bene! Entrambi mi permettono di montare una partizione all'interno dell'immagine dell'unità.
Joe A
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.