Existe-t-il un format de compression qui prend en charge les opérations de queue?

12

Je recherche un format de compression qui prend en charge la tailmodification. Cela signifie que vous n'avez pas besoin de lire l'intégralité du fichier pour obtenir les X derniers octets non compressés. Est-ce possible avec n'importe quel format comme bzip2, xz, lzma, etc.?

Une fois, j'ai codé quelque chose en utilisant gzip qui pourrait le faire. Fondamentalement, à un niveau très élevé, ce qu'il a fait, c'est cat plusieurs blocs gzip ensemble, puis j'ai eu un utilitaire qui pouvait chercher en arrière depuis la fin du fichier jusqu'au début du dernier bloc. Ces fichiers étaient entièrement lisibles par les utilitaires gzip standard, mais j'espère qu'il y a quelque chose d'un peu plus standardisé disponible.

Le but ultime pour cela est pour les fichiers journaux que je peux écrire compressés, puis pouvoir y tailaccéder (même lorsqu'ils n'ont pas été entièrement écrits, c'est-à-dire en streaming) sans avoir à attendre que tout soit lu sur le disque ou le réseau.

Patrick
la source

Réponses:

5

gzip a une option --rsyncable qui fait essentiellement la même chose . La partie non standard serait l'utilitaire "ztail" compatible avec gzip-block, mais il semble que vous l'ayez déjà traité.

le-wabbit
la source
2
Bien sûr, cette option vous limite effectivement à quelque chose comme le niveau de compression -0,5, même si vous spécifiez -9.
psusi
où obtenez-vous la version de gzip qui prend en charge cela? Si c'était une option à un moment donné, elle semble avoir été supprimée.
Patrick
Les distributions basées sur Debian en ont - elles proviennent d'Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Créer une archive compatible avec rsync
the-wabbit
Apparemment, certains autres mainteneurs de distribution (par exemple Fedora) semblent avoir également inclus les correctifs. Et il y a un patch pour un vieux gzip ici: samba.org/netfilter/diary/gzip.rsync.patch qui pourrait s'appliquer à une version plus récente avec de légères modifications, si vous avez vraiment besoin de l'auto-compilation.
the-wabbit
BTW, les discussions suggèrent que l'impact sur la compression est plutôt négligeable (2-3%), bien que le kilométrage pour un ensemble de données spécifique puisse varier. Si vous avez besoin d'une compression "disponible" avec des algorithmes adaptatifs comme le dégonflage, il n'y a pratiquement aucun moyen de réinitialiser l'algorithme de temps en temps - bien sûr, cela induira un impact d'efficacité de compression.
le-wabbit du
0

FWIW: J'ai développé un outil de ligne de commande sur le code source de zlib zran.c qui crée des index pour les fichiers gzip: https://github.com/circulosmeos/gztool

Il peut faire une queue continue d'un fichier gzip avec -Toption. Ou juste une queue du dernier contenu et arrêtez avec -t(Beaucoup d'autres options disponibles).

Notez que pour l'une de ces actions gztool, un fichier d'index entrelacé avec cette action sera créé.

Les index peuvent être interrompus à tout moment et réutilisés et / ou complétés ultérieurement. Et comme gztoolon peut simplement commander d'extraire des données de n'importe quel endroit du fichier et de créer l'index entrelacé avec cette action, il n'y a jamais de temps perdu lors de son utilisation.

circulosmeos
la source