Imagen de disco comprimida en Linux

Imagen de disco comprimida en Linux

Acabo de adquirir mi nueva computadora con un disco duro mucho más grande. Creo que copié todos los archivos importantes, pero para estar seguro, me gustaría conservar una imagen de mi disco anterior. Para ahorrar espacio, me gustaría comprimirlo pero no encontré una opción para montar una imagen comprimida.

Mis metas:

  • El resultado debe ser de fácil acceso.
  • No es necesario descomprimirlo todo antes de poder acceder a nada.
  • Los archivos deben ser fáciles de localizar, sin archivos TAR/CPIO
  • El espacio necesario debe ser menor que simplemente copiar los archivos.

Entonces, idealmente estoy buscando un sistema de archivos comprimido de solo lectura que pueda crear en un archivo y que crezca automáticamente.

Respuesta1

Utilice un software de análisis forense comoGUYMAGER(código abierto, sourceforge.net). Tiene una interfaz de usuario agradable que permite crear rápidamente una imagen de disco comprimida de un disco duro completo.

Utilice "Imagen forense avanzada (.aff)". Esto crea un único archivo comprimido (bueno, también crea un archivo .info).

Para modificar la tasa de compresión predeterminada 1 (la más rápida, pero la mínima compresión). Si tienes una computadora rápida con muchos núcleos, puedes cambiar esto creando /etc/guymager/local.cfg:

AffCompression = 3

9es la mejor compresión pero la más lenta. 3Da una buena compresión con buen rendimiento.

Actualizar

El montaje no es tan sencillo como parece. Primero que nada, necesitasAFFLIB(Ubuntu:) aptitude install afflib-tools. Ahora puede obtener la imagen del disco sin formato con[affuse][3] <image> <mount-point>

Pero por alguna razón, falla el montaje de la imagen sin formato. parteddice que la primera partición comienza con 1048576Bpero

mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup

falla con el habitual error de montaje inútil:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

y dmesgdice:

EXT4-fs (loop0): VFS: Can't find ext4 filesystem

Respuesta2

Como sugiere Matthias Krull en el comentario anterior, qcow2 puede ser un buen formato que admite la compresión para almacenar una imagen de disco. Será compatible durante bastante tiempo ya que es el formato para imágenes de disco de máquinas virtuales QEMU. Aquí hay un comando de ejemplo que comprime /dev/sdaal archivo de imagen comprimido sda.qcow2. De forma predeterminada, se utiliza la compresión zlib, pero creo que zstd puede tener una mejor relación de compresión. Se utilizan 8 subprocesos para aumentar el rendimiento, pero debe cambiarlo según la cantidad de núcleos de procesador que tenga.

qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
  /dev/sda sda.qcow2

Acceda a la imagen como un dispositivo de bloqueo de solo lectura. Se puede utilizar NBD, dispositivo de bloqueo de red, de la siguiente manera:

modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0

Luego, el sistema de archivos se puede montar normalmente usando mountel dispositivo apropiado en formato /dev/mapper.

Respuesta3

Para los sistemas de archivos que admiten la compresión de bloques, una opción es almacenar la imagen del disco directamente como un archivo. Sé que BTRFS admite esto, pero probablemente otros también. En el caso de BTRFS, probablemente necesitará habilitar la opción de montaje compress-forcepara anular la heurística no comprimible. También querrás crear un archivo disperso. Esto se puede hacer con dd, como en este ejemplo:

dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache

Esto creará un archivo disperso, por lo que los sectores cero no ocuparán espacio y BTRFS comprimirá bloques que sean comprimibles (suponiendo que lo haya activado). La compsizeherramienta se puede utilizar para ver cuánto está comprimido el archivo. El uso dusolo mostrará el tamaño del archivo sin comprimir menos los agujeros, por lo que no será exacto.

Para montar cualquier sistema de archivos en la imagen, se puede utilizar lo siguiente:

LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition

Si no utiliza un sistema de archivos que tenga compresión nativa, por ejemplo. ext4, aún puedes usar este método, envolviendo la imagen del disco en una imagen del sistema de archivos BTRFS. Eso podría verse así:

truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above

Este método permite un mayor control sobre los algoritmos de compresión y el nivel de compresión que el método que utiliza qemu-img convert, que solo permite la selección del método de compresión, no del nivel, y tiene menos métodos de compresión disponibles.

información relacionada