Gibt es ein Komprimierungsformat, das Tail-Operationen unterstützt?

12

Ich suche nach einem Komprimierungsformat, das das tailBearbeiten unterstützt . Das heißt, Sie müssen nicht die gesamte Datei lesen, um die letzten X unkomprimierten Bytes zu erhalten. Ist dies mit einem der Formate wie bzip2, xz, lzma usw. möglich?

Ich habe einmal etwas mit gzip codiert, das das kann. Im Grunde genommen bestand das Ergebnis darin, mehrere gzip-Blöcke zusammenzufassen, und dann hatte ich eine Funktion, die vom Ende der Datei bis zum Beginn des letzten Blocks rückwärts suchen konnte. Diese Dateien waren von den Standard-gzip-Dienstprogrammen vollständig lesbar, aber ich hoffe, dass es etwas standardisierteres gibt.

Der ultimative Zweck hierfür sind Protokolldateien, die ich komprimiert tailausgeben und dann in der Lage sein kann (auch wenn sie noch nicht vollständig geschrieben wurden, dh Streaming), ohne warten zu müssen, bis das Ganze von der Festplatte oder vom Netzwerk gelesen wurde.

Patrick
quelle

Antworten:

5

gzip hat eine Option --rsyncable, die im Wesentlichen dasselbe tut . Der nicht standardmäßige Teil wäre das gzip-block-fähige "ztail" -Dienstprogramm, aber anscheinend haben Sie sich bereits damit befasst.

das-wabbit
quelle
2
Natürlich beschränkt diese Option Sie effektiv auf eine Komprimierungsstufe von -0,5, selbst wenn Sie -9 angeben.
Psusi
Woher bekommen Sie die Version von gzip, die dies unterstützt? Wenn dies zu einem bestimmten Zeitpunkt eine Option war, wurde sie anscheinend entfernt.
Patrick
Die Debian-basierten Distributionen haben es - dies ist aus Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Erstelle ein rsync-freundliches Archiv
the-wabbit
Anscheinend haben einige andere Distributionsbetreuer (z. B. Fedora) die Patches ebenfalls enthalten. Und hier gibt es einen Patch für ein altes gzip: samba.org/netfilter/diary/gzip.rsync.patch, der möglicherweise für eine neuere Version mit geringfügigen Änderungen gilt, wenn Sie sich wirklich selbst kompilieren müssen.
the-wabbit
Im Übrigen deuten die Diskussionen darauf hin, dass die Auswirkung auf die Komprimierung eher vernachlässigbar ist (innerhalb von 2-3%), obwohl die Laufleistung für einen bestimmten Datensatz variieren kann. Wenn Sie eine "tailable" Komprimierung mit adaptiven Algorithmen wie "deflate" benötigen, führt kaum ein Weg daran vorbei, den Algorithmus von Zeit zu Zeit zurückzusetzen - dies führt natürlich zu einem Komprimierungseffizienz-Hit.
the-wabbit
0

FWIW: Ich habe ein Befehlszeilentool für den zran.c- Quellcode von zlib entwickelt, mit dem Indizes für gzip-Dateien erstellt werden: https://github.com/circulosmeos/gztool

Mit der -TOption kann ein fortlaufendes Ende einer gzip-Datei erstellt werden . Oder einfach nur einen Schwanz mit den letzten Inhalten und halt, mit -t(; Viele andere Möglichkeiten vorhanden).

Beachten Sie, dass für jede dieser Aktionen gztooleine mit dieser Aktion verschachtelte Indexdatei erstellt wird.

Indizes können jederzeit unterbrochen und wiederverwendet und / oder später vervollständigt werden. Und da gztoolnur der Befehl zum Extrahieren von Daten an einer beliebigen Stelle in der Datei ausgeführt werden kann und der mit dieser Aktion verschachtelte Index erstellt wird, geht bei der Verwendung keine Zeit verloren.

circulosmeos
quelle