¿Existe un formato de compresión que admita operaciones de cola?

12

Estoy buscando un formato de compresión que admita ser taileditado. Lo que significa que no tiene que leer todo el archivo para obtener los últimos X bytes sin comprimir. ¿Es esto posible con alguno de los formatos como bzip2, xz, lzma, etc.?

Una vez codifiqué algo usando gzip que podría hacer esto. Básicamente, en un nivel realmente alto, lo que hizo fue juntar múltiples bloques gzip, luego tuve una utilidad que podía buscar hacia atrás desde el final del archivo hasta cuando comenzó el último bloque. Estas utilidades estándar de gzip pueden leer completamente estos archivos, pero espero que haya algo un poco más estandarizado disponible.

El propósito final de esto es para los archivos de registro que puedo escribir comprimidos y luego poder acceder a tailellos (incluso cuando no se han escrito completamente; es decir, la transmisión) sin tener que esperar a que todo se lea desde el disco o la red.

Patricio
fuente

Respuestas:

5

gzip tiene una opción --rsyncable que hace esencialmente lo mismo . La parte no estándar sería la utilidad "ztail" que reconoce el bloque gzip, pero parece que ya se ha ocupado de eso.

el wabbit
fuente
2
Por supuesto, esa opción efectivamente lo limita a un nivel de compresión de -0.5, incluso si especifica -9.
psusi
¿de dónde sacas la versión de gzip que admite esto? Si esta fue una opción en algún momento, parece que se ha eliminado.
Patrick
Las distribuciones basadas en Debian lo tienen, esto es de Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Hacer archivo compatible con rsync
the-wabbit
Aparentemente, algunos otros mantenedores de distribución (por ejemplo, Fedora) también parecen haber incluido los parches. Y hay un parche para un gzip antiguo aquí: samba.org/netfilter/diary/gzip.rsync.patch que podría aplicarse a una versión más reciente con ligeras modificaciones, si realmente necesita autocompilar.
the-wabbit
Por cierto, las discusiones sugieren que el impacto en la compresión es bastante insignificante (dentro del 2-3%), aunque el kilometraje para un conjunto de datos específico puede variar. Si necesita compresión "adaptable" con algoritmos adaptativos como desinflar, casi no hay forma de restablecer el algoritmo de vez en cuando, por supuesto, esto inducirá un impacto en la eficiencia de la compresión.
the-wabbit
0

FWIW: he desarrollado una herramienta de línea de comando sobre el código fuente zran.c de zlib que crea índices para archivos gzip: https://github.com/circulosmeos/gztool

Puede hacer una cola continua de un archivo gzip con la -Topción. O simplemente una cola de los últimos contenidos y detente, con -t(Muchas otras opciones disponibles).

Tenga en cuenta que para cualquiera de estas acciones gztoolcreará un archivo de índice intercalado con esa acción.

Los índices pueden interrumpirse en cualquier momento y reutilizarse y / o completarse más tarde. Y como gztoolse puede ordenar que extraiga datos de cualquier lugar del archivo, y creará el índice intercalado con esa acción, nunca se pierde tiempo al usarlo.

circulosmeos
fuente