Comprimir una carpeta pero no comprimir tipos de archivos específicos, sino incluirlos en el archivo gz

Comprimir una carpeta pero no comprimir tipos de archivos específicos, sino incluirlos en el archivo gz

Estoy usando tar con pigz para comprimir una carpeta y guardar una copia de seguridad. Tamaño de esta carpeta ~250 GB o más. Esta carpeta tiene una variedad de contenido que incluye numerosos archivos de texto y de registro, ISO y archivos zip en muchas subcarpetas diferentes. La compresión completa de esta carpeta tarda alrededor de 1 hora (o más a veces). En este momento uso esto en un script.

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

Quiero reducir el tiempo de compresión excluyendo la compresión en archivos ISO y zip. Quiero que (ISO y archivos zip) se incluyan en el archivo gzip como tal (sin comprimir).

Mi pregunta es esta:¿Es posible comprimir archivos selectivamente según el tipo y aún así incluir archivos sin comprimir en la salida gzip? ¿Cómo probar esto?

Respuesta1

No, no puedes. Al menos no directamente.

tarno hace ninguna compresión. Simplemente lee parte del sistema de archivos (virtual) y genera una secuencia coherente a partir de él. Esta secuencia a menudo se pasa a una herramienta/biblioteca de compresión, por ejemplo gzip/libz. La parte de compresión no ve ni conoce archivos individuales. Simplemente comprime la secuencia generada por tar. Por lo tanto, no puede agregar compresión selectiva a su enfoque actual.

Lo que puedes hacer es construir incrementalmente el archivo tar, comprimiendo cada archivo individualmente y luego agregándolo al archivo tar. Al hacerlo, puede optar por agregar (por ejemplo) imágenes ISO sin comprimir al archivo. Sin embargo, tenga en cuenta que el archivo tar en sí no se comprimirá. En consecuencia, después de descomprimirlo, también tendrás que descomprimir cada archivo individualmente, cuando corresponda.

¿Cuánto tiempo se pierde realmente comprimiendo archivos isos y zip? Dado tar | pigz > <file>el procesamiento de la transmisión, supongo que no estás perdiendo tanto tiempo. Hay bloques escritos en el disco, mientras los siguientes bloques se comprimen, mientras se construye la secuencia. Está sucediendo en paralelo.

Quizás puedas optimizar tu estrategia:

Puede colocar todos los archivos iso y zip en directorios dedicados y luego crear su archivo en tres pasos: tar y comprimir el resto, agregar el directorio iso y agregar el directorio zip. El archivo resultante aún necesita un largo procedimiento de extracción para descomprimir el archivo externo y luego descomprimir y descomprimir el archivo interno. Sin embargo, esto es más factible que descomprimir cada archivo individual.

O ajusta los comandos: ¿Tiene que ser un archivo tar de un sistema de archivos o podría usarlo ddpara hacer una copia de seguridad de toda la partición? Hacer una copia de seguridad de toda la partición tiene la ventaja de realizar lecturas continuas de los discos, lo que puede ser más rápido que trabajar con el sistema de archivos. Estoy seguro de que puede ajustarse pigzpara trabajar con fragmentos más grandes, lo que debería acelerarlo, si los archivos iso y zip son su problema. Además, puede agregar algo de almacenamiento en búfer (por ejemplo mbuffer), antes de escribir el resultado en el disco para optimizar aún más el acceso a los medios.

información relacionada