¿Cómo puedo dividir una imagen de unidad creada con 'dd' en archivos separados para cada partición?

9

Creé una imagen de una unidad defectuosa con:

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

La unidad tenía solo dos particiones:

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

¿Cómo puedo dividir la imagen (image001.dd) en dos o tres archivos (1: MBR; 2: Partición 1; 3: Partición 2) para poder montar los sistemas de archivos en ella?

Una solución que encontré que no funcionaría para mí es usar splitpara crear muchos archivos de 512K, luego catvolver a unirlos en tres archivos (1: 512K, 2: 105M, 3: el resto), pero no tengo el espacio en disco para eso.

Historia:
ya he copiado toda la imagen en una nueva unidad, y arranca y funciona principalmente. Parece que el FS estaba dañado en la vieja unidad que fallaba, y ddcopié las partes dañadas (como debería), y las escribí en la nueva unidad. Mi solución es montar el FS que copié y copiar solo los archivos (usando rsynco algo) para que con suerte no copie los bits malos.

ACTUALIZACIÓN 1 : Lo he intentado dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1pero me mountquejo NTFS signature is missing, así que creo que no lo hice bien.

Joe A
fuente

Respuestas:

17

No necesita dividir esto en absoluto.

Use partedpara obtener detalles sobre la tabla de particiones:

parted image001.dd

En parted, cambie a unidades de bytes con el comando u, entonces B. Después de eso, emita el comando print.

Obtendrá una salida similar a esta (la salida es de un sistema real, no de una imagen):

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)

Puede usar el Startnúmero como un desplazamiento para un montaje de bucle invertido:

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

montaría la tercera partición en /mnt/rescue.

Sven
fuente
Tanto esto como kpartxresolver mi problema. Elegí esta respuesta porque me imagino que partedes más común que kpartx, sin embargo, kpartxes un poco más fácil.
Joe A
16

Es mucho mejor simplemente usar la kpartxherramienta.

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

Ejemplo:

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

En este punto puedo montar /dev/mapper/loop0p2.

Después de desmontar, llame kpartx -d whole_diskpara limpiar.

Kupson
fuente
1
+1 Esto es bueno, nunca escuché de esa herramienta.
Sven
¡Tanto esta como la respuesta de SvenW a continuación funcionan muy bien! Ambos me permiten montar una partición dentro de la imagen del disco.
Joe A