Saltar al contenido

¿Cómo montar una imagen de disco comprimida?

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”

  1. Instalar nbdkit y cliente

    apt install nbdkit nbd-client
    
  2. 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.

  3. 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.

  4. 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>, o sudo kill <pid>. Finalizar el servidor con CTRL-C detuvo tanto al servidor como al cliente.

  5. 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 con dd, o usar kpartx, 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *