Realizo una copia de seguridad nocturna de mi servicio de alojamiento web como .tar.gz. Los datos cambian muy poco cada noche (<10 MB).
Me gustaría archivar estos archivos y deduplicar archivos (compresión sólida) en varios archivos .tar.gz sin extraer cada archivo de copia de seguridad individual.
Ejemplo simplificado:
2013-02-24.tar.gz
contiene a.pdf
2013-02-25.tar.gz
contiene a.pdf
yb.pdf
Quiero comprimir, archivar 2013-02-24.tar.gz
y 2013-02-25.tar.gz
almacenar a.pdf
solo una vez.
La única forma de hacer funcionar la deduplicación fue descomprimir ambos .tar.gz y empaquetarlos nuevamente (usando una compresión sólida). Pero este es un paso adicional y probablemente borrará la información del sistema de archivos debido a diferentes sistemas operativos. Simplemente tar/gz ambos archivos .tar.gz no funcionarán, el tamaño final de este archivo será la suma de ambos archivos .tar.gz originales.
¿Existe alguna forma de utilizar la deduplicación en el contenido de varios archivos .tar.gz?
Respuesta1
Llegué tarde a la fiesta, pero los requisitos parecen reducirse esencialmente a esto:
- Deduplicar el contenido del archivo tarball
- Debe poder restaurar archivos gzip originales.
Al principio esto parece imposible. La deduplicación generalmente depende de poder trabajar con archivos sin comprimir. Pero luego me di cuenta de que si puedes confiar en que gunzip/gzip produzca exactamente el mismo archivo (mejor pruébalo), entonces puedes usarcopia de seguridad, que en realidad está diseñado para deduplicar archivos comprimidos. Entonces:
gunzip
los tarballs que obtienesgzip
los archivos comprimidos nuevamente para verificar que sean coincidencias exactas (debería serlo si la implementación de gzip es la misma, pero el nivel de compresión podría variar, por ejemplo, por lo que es posible que deba averiguarlo)- Alimenta las bolas tar para
zbackup
Respuesta2
No creo que puedas hacer lo que estás intentando hacer "fácilmente".
Si los archivos .tgz son lo suficientemente similares, es posible que pueda usar xdelta y hacer una copia de seguridad completa del primer archivo y luego un xdelta con la diferencia entre el primer y el segundo archivo.
Una solución parcial alternativa sería usar rzip (o lrzip ??), que está diseñado para encontrar compresión en archivos muy grandes; aunque no es ideal, probablemente será significativamente más pequeño que lo que está usando en este momento, a expensas de la CPU y memoria.
Respuesta3
Yo uso squashfs para un propósito similar:
mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory
Respuesta4
Hay una excelentesoluciónque hace lo que pides, deduplica bloques dentro de múltiples archivos TAR. Esto no sólo elimina los archivos que no han sido modificados, sino que también almacena sólo las partes modificadas de archivos similares.
Sin embargo, es una solución cliente/servidor donde el servidor es una oferta paga. Pero debido a la deduplicación, es muy asequible, además ofrece cifrado y almacena los archivos de forma segura.
El cliente usa el código tar normal, por lo que el comando es muy fácil de usar.