¿Cómo usar DD para clonar una partición de una imagen de disco?

¿Cómo usar DD para clonar una partición de una imagen de disco?

Tengo una imagen de disco, es una imagen de disco "completa", por ejemplo, contiene varias particiones y quiero clonar solounode ellos (no el primero...) en una partición de un disco externo con varias particiones (tampoco lo voy a clonar en la primera partición del disco...)

FDisk'ing la imagen da esto:

# fdisk -l 2013-02-09-wheezy-raspbian.img

Disco 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 bytes
255 cabezas, 63 sectores/pista, 235 cilindros, total 3788800 sectores
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Identificador de disco: 0x00014d34

                         Dispositivo Arranque Inicio Bloques finales Sistema de identificación
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

y el dispositivo de bloque se ve así:

# fdisk -l /dev/sdc

Disco /dev/sdc: 8014 MB, 8014266368 bytes
247 cabezas, 62 sectores/pista, 1022 cilindros, total 15652864 sectores
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Identificador de disco: 0x00000000

   Dispositivo Arranque Inicio Bloques finales Sistema de identificación
/dev/sdc1 2048 131071 64512 y W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Linux
#

Quiero que la segunda partición de la imagen reemplace la segunda partición del dispositivo de bloque. No se preocupe por el espacio libre corrupto que queda al final, usaré GParted para limpiarlo y, de todos modos, lo necesito para otra cosa.

Respuesta1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

Si --partscanno funciona, también puedes usar uno de:

# partx -a /dev/loop7
# kpartx /dev/loop7

o soluciones similares de mapeo de particiones.

Probablemente deberías montarlo primero sólo para ver si es lo correcto o qué.

Por supuesto, también puede leer la salida de fdisk y dar ddel skip=131072o lo que sea directamente, es decir, hacer que se salte esa cantidad de bloques de entrada para que comience a leer en el lugar donde se encuentra la partición; pero es mejor ver particiones reales con un dispositivo de bucle.

Respuesta2

Algo como esto debería funcionar:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

si= establece la imagen que desea clonar

de= establece la partición de destino donde desea clonar la imagen

Respuesta3

  1. Monte la imagen como un dispositivo loopback:losetup -fP yourImage.img
  2. Ahora puede acceder directamente a cada partición de la imagen. Si debes usarlo dd, puedes hacerlo dd if=/dev/loop0p1 of=image.img, pero creo que te gustaría catmás. En un shell raíz, simplemente haga cat /dev/loop0p1 > image.img. Ambos ejemplos suponen que desea la primera partición y que el dispositivo de bucle invertido que se le asignó era/dev/loop0
  3. Una vez que haya terminado con el dispositivo loopback, puede desconectarlo con losetup -d /dev/loop0. Una vez más, esto supone que ese /dev/loop0es su dispositivo loopback.

Respuesta4

Puede copiar solo la segunda partición a una imagen separada con esto

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

y luego puedes copiarlo en lugar de la partición en el disco

dd if=second.img of=/dev/sdc2 bs=512

o incluso puedes hacerlo con un solo comando

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

Solo asegúrese de desmontar /dev/sdc2 antes de escribir en él.

información relacionada