Comment puis-je diviser une image de lecteur créée avec 'dd' en fichiers séparés pour chaque partition?

9

J'ai créé une image d'un disque défectueux avec:

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

Le lecteur n'avait que deux partitions:

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

Comment puis-je diviser l'image (image001.dd) en deux ou trois fichiers (1: MBR; 2: Partition 1; 3: Partition 2) afin de pouvoir y monter les systèmes de fichiers?

Une solution que j'ai trouvée qui ne fonctionnerait pas pour moi consiste à splitcréer de nombreux fichiers de 512 Ko, puis à catles regrouper en trois fichiers (1: 512 Ko, 2: 105 M, 3: le reste), mais je n'ai pas l'espace disque pour cela.

Historique:
J'ai déjà copié l'image entière sur un nouveau disque, et elle démarre et fonctionne principalement. Il semble que le FS a été corrompu sur l'ancien disque défectueux et a ddcopié les parties corrompues (comme il se doit), et je les ai écrites sur le nouveau disque. Ma solution est de monter le FS que j'ai copié et de ne copier que les fichiers (en utilisant rsyncou quelque chose) afin que j'espère ne pas copier les mauvais bits.

MISE À JOUR 1 : J'ai essayé dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1mais je m'en mountplains NTFS signature is missing, donc je pense que je ne l'ai pas bien fait.

Joe A
la source

Réponses:

17

Vous n'avez pas du tout besoin de diviser cela.

Utilisez partedpour obtenir des détails sur la table de partition:

parted image001.dd

Dans parted, passez aux unités d'octets avec la commande u, puis B. Après cela, exécutez la commande print.

Vous obtiendrez une sortie qui ressemble à ceci (la sortie provient d'un système réel, pas d'une 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)

Vous pouvez utiliser le Startnombre comme décalage pour un montage en boucle:

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

monterait la troisième partition à /mnt/rescue.

Sven
la source
À la fois cela et kpartxrésoudre mon problème. J'ai choisi cette réponse parce que j'imagine que partedc'est plus courant que kpartx, cependant, kpartxc'est un peu plus facile.
Joe A
16

Il est préférable d'utiliser simplement l' kpartxoutil.

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

Exemple:

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

À ce stade, je peux monter /dev/mapper/loop0p2.

Après démontage, appelez kpartx -d whole_diskpour nettoyer.

kupson
la source
1
+1 C'est bien, je n'ai jamais entendu parler de cet outil.
Sven
Les deux réponses de SvenW ci-dessous fonctionnent très bien! Les deux me permettent de monter une partition dans l'image du lecteur.
Joe A