Me gusta crear una copia de seguridad de la imagen por primera vez que estoy haciendo una copia de seguridad de un sistema. Después de esta primera vez, uso rsync para hacer copias de seguridad incrementales.
Mi copia de seguridad de imagen habitual es la siguiente:
Montar y poner a cero el espacio vacío:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
desmontar y dd el disco mientras lo comprime
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
para que el sistema vuelva a la normalidad, generalmente haré un
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
Esto es realmente sencillo y me permite guardar el 'disco completo' pero realmente solo ahorrar el espacio utilizado.
Aquí está el problema. Digamos que hago lo anterior pero no en un sistema limpio y no obtengo las copias de seguridad de rsync lo suficientemente pronto y hay archivos a los que quiero acceder que están en la imagen. Digamos que no tengo el espacio de almacenamiento para descomprimir y dd la imagen en una unidad, pero quiero montar la imagen para sacar archivos individuales de ella ... ¿Es esto posible?
Normalmente, uno no comprimiría la imagen dd, lo que le permitirá simplemente montar la imagen usando -o loop
... pero este no es mi caso ...
¿Alguna sugerencia para montar el img comprimido sobre la marcha?
¿ Usaría AVFS para 'montar' el archivo gz y luego montar el dd.img interno (no lo creo ... pero necesitaría verificación ...)?
fuente
SquashFS
para este tipo de cosas. También elimina los archivos duplicados.Respuestas:
Depende de si la imagen del disco es una imagen de disco completa o solo una partición.
Lavando la (s) partición (es)
Si el disco está en buenas condiciones de funcionamiento, obtendrá una mejor compresión si lava el espacio vacío del disco con ceros. Si el disco falla, omita este paso.
Si está creando imágenes de un disco completo, entonces querrá lavar cada una de las particiones en el disco.
PRECAUCIÓN: ¡ Tenga cuidado, desea establecer
of
un archivo en la partición montada, NO LA PARTICIÓN MISMA!Hacer una imagen de partición
¿Dónde
sda
está el nombre del dispositivo y1
el número de partición? Ajuste en consecuencia para su sistema si desea crear una imagen de un dispositivo o partición diferente.Hacer una imagen de disco completa
¿Dónde
sda
está el nombre del dispositivo? Ajuste en consecuencia para su sistema si desea crear una imagen de un dispositivo diferente.Compresión
Haga una imagen "squashfs" que contenga la imagen completa sin comprimir.
Compresión Streaming
Para evitar que un archivo temporal separado tenga el tamaño completo del disco, puede transmitirlo a una imagen de squashfs.
Montaje de una imagen de partición comprimida
Primero monte la imagen de squashfs, luego monte la imagen de partición almacenada en la imagen de squashfs montada.
Ahora que tiene la imagen comprimida montada, monte la imagen misma (que está dentro de la imagen de squashfs)
Ahora su imagen está montada debajo
compressed_image
.EDITAR: si simplemente desea restaurar la imagen del disco en una partición en este punto (en lugar de montarla para examinar / leer el contenido), solo
dd
la imagen ensquash_mount/sda1_backup.img
el destino en lugar de hacerlomount
.Montaje de una imagen de disco completo comprimido
Esto requiere que use un paquete llamado kpartx. kpartx le permite montar particiones individuales en una imagen de disco completa.
Primero, monte su partición aplastada que contiene la imagen de disco completa
Ahora necesita crear dispositivos para cada una de las particiones en la imagen de disco completa:
Esto creará dispositivos para las particiones en la imagen de disco completa en
/dev/mapper/loopNpP
donde N es el número asignado para el dispositivo de bucle invertido y P es el número de partición. Por ejemplo:/dev/mapper/loop0p1
.Ahora tiene una manera de montar las particiones individuales en la imagen de disco completa:
fuente
-p
o-pf
para pasarle un pseudo-archivo. Un pseudo archivo se puede usar para cosas como hacer nodos de dispositivos que de otra manera no se pueden hacer sin root (útil para construir imágenes como parte de un proceso de construcción) o para transmitir la salida de algún comando a la imagen. Uno de los ejemplos dados en los documentos (/usr/share/doc/squashfs-tools/examples/pseudo-file.example
en Debian / Ubuntu) esinput f 444 root root dd if=/dev/sda1 bs=1024 count=10
copiar los primeros 10K de una imagen de disco en un archivo llamado "input" en la imagen de squashfs.Si la imagen es de solo lectura, también puede usar nbdkit ( página de manual ) y su complemento xz (xz debería proporcionar una mejor compresión y tiempos de acceso aleatorio que gzip).
Crear la imagen de partición comprimida
Una
--block-size
opción de 16 MiB debería proporcionar un buen rendimiento de acceso aleatorio.Nota: puede usar programas de compresión xz alternativos como pixz que proporciona compresión paralela, solo asegúrese de que divide la salida en múltiples bloques pequeños, de lo contrario nbdkit tiene que descomprimir una gran cantidad de datos. Por ejemplo, a partir de septiembre de 2015, pxz no es compatible con esto.
Servir con nbdkit
Conéctese al servidor NBD
Montarlo solo lectura
Cuando termine
Detenga nbdkit presionando Ctrl+ C(o con kill ).
fuente
Tratar
archivemount
archivemount es un sistema de archivos basado en FUSE para variantes de Unix, incluido Linux. Su propósito es montar archivos (es decir, tar, tar.gz, etc.) en un punto de montaje donde se pueda leer o escribir como con cualquier otro sistema de archivos. Esto hace que el acceso al contenido del archivo, que puede estar comprimido, sea transparente para otros programas, sin descomprimirlos.
http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system
Después de montar el archivo, puede usarlo como archivo normal. Tal vez obtenga una tabla de particiones, o convierta, monte la imagen con las herramientas qemu.
Squashfs útil para arrancar desde la imagen, pero muy complejo para la copia de seguridad.
fuente
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
Esta respuesta complementa la respuesta de Cristian Ciupitu . Si utiliza la compresión xz con un tamaño de bloque razonable, puede acceder a la imagen del disco utilizando guestfish u otras herramientas libguestfs como esta:
fuente
Realmente no. Realmente no puede buscar un bloque específico en el archivo comprimido sin descomprimir todo primero, lo que dificulta el uso de la imagen comprimida como un dispositivo de bloque.
Puede usar algo como
dump
yrestore
(otar
, realmente), todos los cuales usan un formato de transmisión ... para que pueda acceder a archivos individuales escaneando de manera efectiva a través de la secuencia sin comprimir. Significa que si el archivo que desea está al final del archivo comprimido, puede tener que esperar mucho tiempo, pero no requiere que descomprima todo en el disco.El uso
tar
para copias de seguridad puede parecer un poco anticuado, pero obtienes mucha flexibilidad.fuente
Otra adición a la respuesta de Cristian Ciupitu :
Si utiliza
nbdkit
para montar una imagen de disco completa (frente a una imagen de partición), es posible que deba especificar el tamaño de bloque (tamaño de sector del disco) cuando se conecta al servidor NBD, ya que el valor predeterminado es1024
bytes. Para usar512
bytes en su lugar:Después de eso, el disco aparecerá como
/dev/nbd0
, y debería poder ver la tabla de particiones usandofdisk -l
. Sin embargo, las particiones aún no se pueden montar: usekpartx
(de la respuesta de doug65536 ) para crear dispositivos para las particiones, por ejemplo:Finalmente, aparecerán las particiones
/dev/mapper/
y puede montarlas como de costumbre. Asegúrese de usar el modo de solo lectura (-o ro
), ya que el complemento xz solo admite lecturas:fuente