Crear un disco de arranque desde la imagen de partición ext4

Crear un disco de arranque desde la imagen de partición ext4

Mi objetivo es crear una copia de seguridad de arranque de mi sistema sin reiniciar. Usaré qemu-img para convertir una imagen dd sin formato a vhdx y ejecutarla en Hyper-V.

Si inicio en un liveCD y ejecuto:

dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc

Puedo convertirlo a vhdx y ejecutarlo directamente en Hyper-V sin mucho esfuerzo.

fdisk -l salida:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   2000895   1998848   976M EFI System
/dev/sda2  2000896 500117503 498116608 237.5G Linux filesystem

Sin embargo, no puedes usar ese comando mientras el sistema está en línea, así que estoy usando el controlador dattobd para copiar todo mi sistema de archivos ext4 de esta manera:

dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M

Esto efectivamente copia todos los datos /dev/sda2correctamente, lo he verificado porque el hash es el mismo si uso el liveCD y agrego la /dev/sda2partición. Ahora puedo iniciar en un liveCD y copiar /dev/sda1, esa es la partición EFI, por lo que no cambia muy a menudo a menos que actualice grub o algo relacionado con el kernel de Linux, estoy bien reiniciando solo para hacer una copia de seguridad de esa partición de vez en cuando, pero si Alguien sabe una manera de hacerlo en línea, por favor dímelo.

/dev/sda1Ahora que tengo /dev/sda2dos archivos separados, mi pregunta es ¿cómo puedo ensamblar estos dos en un solo archivo que esencialmente dé el mismo resultado que si se ejecutara dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notruncen un LiveCD? ¿Necesitarías simplemente alinear los bytes perfectamente? He buscado esto por todas partes y no tuve suerte. ¡Cualquier ayuda es muy apreciada!

Respuesta1

Puede montar en bucle la imagen de todo el disco con soporte de partición y luego colocar ddla imagen actualizada sda2en su lugar:

losetup -P /dev/loop0 /nfs/sda.raw  #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0

Alternativamente, su tabla de particiones indica que su primera partición comienza en el sector #2048, por lo que su disco tiene 2048 * 512 bytes = 1 MiB de espacio antes de la primera partición ("cabeza") y 500118192 - 500117503 - 1 = 688 sectores (344 kiB) de espacio al final ("cola") fuera de cualquier partición. (-1 porque el primer sector es #0, no #1)

La primera partición termina en el sector #2000895 y la segunda comienza en #2000896, por lo que no hay espacio no utilizado entre ellos.

Estás utilizando la tabla de particiones GPT, que incluye una copia de seguridad de la tabla de particiones al final del disco, por lo que también será necesario capturar la parte "cola". Comienza desde el sector #500117504 y continúa hasta el final del disco.

Por lo tanto, puede capturar el contenido de las partes "cabeza" y "cola" por separado y luego juntarlo todo:

dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw

A menos que modifique la tabla de particiones, necesitará capturar las partes "principal" y "cola" sólo una vez: no deberían cambiar durante el uso normal del sistema.

información relacionada