GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la compresión Gzip no elimina los fragmentos de datos duplicados?

Nicole Hamilton señala correctamente que gzip no encontrará datos duplicados distantes debido a su pequeño tamaño de diccionario.

bzip2 es similar, porque está limitado a 900 KB de memoria.

En su lugar, intente:

Algoritmo LZMA/LZMA2 (xz , 7z )

El algoritmo LZMA pertenece a la misma familia que Deflate, pero utiliza un tamaño de diccionario mucho más grande (personalizable; el valor predeterminado es algo así como 384 MB). El xz La utilidad, que debe instalarse de forma predeterminada en las distribuciones de Linux más recientes, es similar a gzip y usa LZMA.

Como LZMA detecta redundancia de mayor alcance, podrá deduplicar sus datos aquí. Sin embargo, es más lento que Gzip.

Otra opción es 7-zip (7z , en el p7zip paquete), que es un archivador (en lugar de un compresor de flujo único) que usa LZMA de forma predeterminada (escrito por el autor de LZMA). El archivador 7-zip ejecuta su propia deduplicación a nivel de archivo (busca archivos con la misma extensión) al archivar en su .7z formato. Esto significa que si está dispuesto a reemplazar tar con 7z , obtendrá archivos idénticos deduplicados. Sin embargo, 7z no conserva las marcas de tiempo, permisos o xattrs de nanosegundos, por lo que es posible que no se adapte a sus necesidades.

lrzip

lrzip es un compresor que preprocesa los datos para eliminar la redundancia de larga distancia antes de enviarlos a un algoritmo convencional como Gzip/Deflate, bzip2, lzop o LZMA. Para los datos de muestra que proporciona aquí, no es necesario; es útil cuando los datos de entrada son más grandes de lo que cabe en la memoria.

Para este tipo de datos (fragmentos incompresibles duplicados), debe usar lzop compresión (muy rápida) con lrzip , porque no hay ningún beneficio en esforzarse más para comprimir datos completamente aleatorios una vez que se han eliminado los duplicados.

Bup y Obnam

Dado que etiquetó la copia de seguridad de la pregunta, si su objetivo aquí es hacer una copia de seguridad de los datos, considere usar un programa de copia de seguridad de deduplicación como Bup u Obnam.


Gzip gzip se basa en el algoritmo DEFLATE, que es una combinación de codificación LZ77 y Huffman. Es un algoritmo de compresión de datos sin pérdidas que funciona transformando el flujo de entrada en símbolos comprimidos utilizando un diccionario construido sobre la marcha y buscando duplicados. Pero no puede encontrar duplicados separados por más de 32K. Esperar que detecte duplicados con 1 MB de diferencia no es realista.


gzip no encontrará duplicados, incluso xz con un tamaño de diccionario enorme no lo hará. Lo que puedes hacer es usar mksquashfs - esto de hecho ahorrará el espacio de los duplicados.

Algunos resultados de pruebas rápidas con xz y mksquashfs con tres archivos binarios aleatorios (64 MB) de los cuales dos son iguales:

Configuración:

mkdir test
cd test
dd if=/dev/urandom of=test1.bin count=64k bs=1k
dd if=/dev/urandom of=test2.bin count=64k bs=1k
cp test{2,3}.bin
cd ..

Calabazas:

mksquashfs test/ test.squash
> test.squash - 129M

xz:

XZ_OPT='-v --memlimit-compress=6G --memlimit-decompress=512M --lzma2=preset=9e,dict=512M --extreme -T4 ' tar -cJvf test.tar.xz test/
> test.tar.xz - 193M

Linux
  1. ¿Por qué `\d` no funciona en expresiones regulares en sed?

  2. ¿Por qué Bash `(())` no funciona dentro de `[[]]`?

  3. ¿Por qué el puente de Linux no funciona?

  4. ¿Por qué wget no verifica los certificados SSL?

  5. ¿Por qué se usa Swap cuando queda mucha memoria libre?

zstd:algoritmo de compresión de datos de código abierto en Linux

Cómo habilitar la compresión GZIP en Nginx

Cómo habilitar la compresión Gzip en Nginx

Los 15 mejores administradores de compresión o archivo para el sistema Linux

¿Por qué a gdb no le gustan los alias?

¿Por qué usar innodb_file_per_table?