
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 --partscan
no 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 dd
el skip=131072
o 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
- Monte la imagen como un dispositivo loopback:
losetup -fP yourImage.img
- Ahora puede acceder directamente a cada partición de la imagen. Si debes usarlo
dd
, puedes hacerlodd if=/dev/loop0p1 of=image.img
, pero creo que te gustaríacat
más. En un shell raíz, simplemente hagacat /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
- 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/loop0
es 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.