Solución:
Puedes usar squashfs
para comprimir imágenes de disco y luego montarlas.
Crea la imagen del disco
Si aún no tiene una imagen de disco, use dd
para crear uno:
dd if=/dev/sda1 of=/tmp/sda1.img bs=4M
Comprime la imagen con squashfs
Instalar en pc squashfs
:
apt-get install squashfs-tools
Comprime la imagen:
mksquashfs /tmp/sda1.img /tmp/sda1.squash.img
O transmita la compresión (no necesita un archivo dd temporal)
mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'
Felicitaciones a terminator14 en UbuntuForums.org. Definiciones / Explicaciones:
-
empty-dir
– directorio “fuente”. Básicamente en nuestro caso, solo un directorio vacío para satisfacer el formato arg de entrada de mksquashfs -
squash.img
– el destino y el nombre de archivo del archivo squashfs de salida -
sda_backup.img
– el nombre de la copia de seguridad dd DENTRO del archivo squashfs -
f
– especifica que sda_backup.img es un archivo normal (a diferencia de un directorio, dispositivo de bloque o dispositivo de caracteres) -
444
– permisos del archivo sda_backup.img dentro de la imagen squashfs -
root root
– UID y GID para el archivo sda_backup.img dentro de la imagen de squashfs. Puede especificarse mediante números decimales o por nombre -
dd if=/dev/sda bs=4M
– el comando dd usado para leer el dispositivo que queremos respaldar
Montar la imagen
Primero monte el squashfs
imagen:
mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash
Esto presentará la imagen de disco sin comprimir para que la monte:
mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1
O si es una imagen de disco completa (particionada), puede usar losetup
para adjuntar la imagen dd a un dispositivo de bucle (posiblemente opcional) y luego kpartx -a
o partprobe
para buscar y separar las particiones para separar dispositivos, o incluso vgscan
/ vgchange -ay
si hay LVM.
Pude conseguir un servidor NBD para “servir” una versión sin comprimir de un archivo .gz o .xz. No estoy seguro de si tiene que leer todo el archivo comprimido con mucha frecuencia (solo probado hasta ahora con archivos pequeños en RAM) pero al menos funciona sin tener que extraer una copia completa sin comprimir.
Visualización de una imagen dd comprimida en gz / xz “sobre la marcha”
-
Instalar nbdkit y cliente
apt install nbdkit nbd-client
-
Cree un archivo de demostración de estilo “dd”: un archivo de 50M vacío con un sistema de archivos ext y comprímalo (Opcional solo para pruebas)
fallocate -l 50M 50m mkfs.ext3 -v 50m
Luego comprime con gzip o xz
gzip -vk9 50m xz -v9k 50m
Nota: una
xz
opción de--block-size=16MiB
debería ofrecer un mejor rendimiento de acceso aleatorio, pero a expensas de una menor compresión (¿quizás un 1%?). Consulte la descripción del complemento xz de nbdkit. -
Ejecute el servidor en una imagen COMPRIMIDA
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
o para xz
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
los
--no-fork
le dice al servidor “No se bifurque en el fondo” por lo que ver posibles mensajes de error y eliminarlo con CTRL-C es un poco más fácil.-v
puede / mostrará demasiados mensajes de estado, especialmente al leer. -
Ejecutar el cliente (en otra terminal / ventana)
sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
los
-nofork
es parecido a-no-fork
arriba, pero pude no matar al cliente con CTRL-C,kill <pid>
, osudo kill <pid>
. Finalizar el servidor con CTRL-C detuvo tanto al servidor como al cliente. -
Observa eso
/dev/nbd0
ahora es idéntica a la imagen SIN COMPRIMIR$ sudo diff -s /dev/nbd0 ~/Downloads/50m Files /dev/nbd0 and /home/user/Downloads/50m are identical
/dev/nbd0
ahora se puede utilizar como la imagen sin comprimir; montado, leer / copiar condd
, o usarkpartx
,partprobe
,vgscan
/vgchange
, etc!
Gracias a Cristian Ciupitu en Unix y Linux, aunque tomó un poco más de investigación para encontrar el complemento y hacer que todo funcionara.