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

9

Tengo una imagen de disco, es una imagen de disco "completa", por ejemplo, contiene múltiples particiones, y quiero clonar solo una de ellas (no la primera ...) en una partición en una unidad externa con múltiples particiones ( Tampoco lo estoy clonando 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 / vía, 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 del disco: 0x00014d34

                         Dispositivo Arranque Inicio Fin Bloques Id Sistema
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 bloqueo se ve así:

# fdisk -l / dev / sdc

Disco / dev / sdc: 8014 MB, 8014266368 bytes
247 cabezas, 62 sectores / vía, 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 del disco: 0x00000000

   Dispositivo Arranque Inicio Fin Bloques Id Sistema
/ dev / sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/ dev / sdc2 131072 15652863 7760896 83 Linux
# #

Quiero que la segunda partición de la imagen reemplace a la segunda partición del dispositivo de bloque. No se preocupe por el espacio libre corrompido, usaré GParted para limpiar eso, y lo necesito para otra cosa de todos modos.

JamesTheAwesomeDude
fuente
¡especifique exactamente dónde desea que se clone su partición y dónde están sus archivos de imagen!
fromnaboo

Respuestas:

8
# 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 puede usar uno de:

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

o soluciones de mapeo de particiones similares.

Probablemente deberías montarlo primero solo 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, omitir tantos 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.

Frostschutz
fuente
Su losetupcomando no funcionó: decía una opción no reconocida --find. Quité eso, decía que no lo reconocía --show. Quitar eso hizo que se quejara --partscan, en ese momento me di cuenta de que el comando no iba a hacer nada por mí en el corto plazo. Decidí probar los otros, pero ambos partxy kpartxdevolver "comando no encontrado".
JamesTheAwesomeDude
Simplemente correría dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, pero eso vuelve dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument.
JamesTheAwesomeDude
1
skipdepende de bs, así que si usaste bs=1M(o tienes un alias que hace esto), eso explicaría por qué no funciona. tratar con bs=512. Además, ¿por qué 122880 cuando fdisk dice 131072? También mi pérdida es losetup from util-linux 2.22.2. Lo mismo para Partx. kpartx es de herramientas multirrutas (mapeador de dispositivos usados).
frostschutz
kpartxes para LVM. partprobetambién hará el trabajo, desde el paquete separado.
psusi
@frostschutz Eso fue 12280 bytes desde el inicio del archivo de imagen.
JamesTheAwesomeDude
0

Algo como esto debería funcionar:

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

if = establece la imagen que desea clonar

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

fromnaboo
fuente
1
Obtuve el error esperado:dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
JamesTheAwesomeDude
¿reemplazó /path/to/2013-02-09-wheezy-raspbian.img2 con su ruta real al archivo de imagen? : |
fromnaboo
1
**** facepalm **** Sí, acabo de agregar el 2 al final, como dijiste .
JamesTheAwesomeDude
esto no funciona, dd no ve particiones en un archivo de imagen como ese
Michal Artazov
0
  1. Monte la imagen como un dispositivo de bucle invertido: losetup -fP yourImage.img
  2. Ahora puede acceder a cada partición de la imagen directamente. Si debe usar dd, puede hacerlo dd if=/dev/loop0p1 of=image.img, pero creo que le gustaría catmás. En un shell de raíz, simplemente hazlo cat /dev/loop0p1 > image.img. Ambos ejemplos suponen que desea la primera partición, y el dispositivo de bucle invertido que le asignaron fue/dev/loop0
  3. Una vez que haya terminado con el dispositivo de bucle invertido, puede desconectarlo losetup -d /dev/loop0. Una vez más, esto supone que /dev/loop0es su dispositivo de bucle invertido.
John Leuenhagen
fuente
0

Podrías hacerlo:

sudo partx --add -v 2013-02-09-wheezy-raspbian.img 
# time sudo dd if=/dev/loop0p1 |pv -s 80M |sudo dd of=/dev/sdc1
time sudo dd if=/dev/loop0p2 |pv -s 4G |sudo dd of=/dev/sdc2
sudo partx --delete -v /dev/loop0
Frank Breitling
fuente
0

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 después de eso 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 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.

Michal Artazov
fuente