
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/sda2
correctamente, lo he verificado porque el hash es el mismo si uso el liveCD y agrego la /dev/sda2
partició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/sda1
Ahora que tengo /dev/sda2
dos 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,notrunc
en 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 dd
la imagen actualizada sda2
en 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.