Существует ли формат сжатия, который поддерживает операции с хвостом?

12

Я ищу формат сжатия, который поддерживает tailредактирование. Это означает, что вам не нужно читать весь файл, чтобы получить последние X несжатых байтов. Это возможно с любым из форматов, таких как bzip2, xz, lzma и т. Д.?

Однажды я написал что-то, используя gzip, который мог это сделать. На самом деле, на самом высоком уровне он собирал несколько блоков gzip вместе, затем у меня была утилита, которая могла искать назад от конца файла до момента начала последнего блока. Эти файлы были полностью читаемы стандартными утилитами gzip, но я надеюсь, что есть что-то более стандартизированное.

Конечная цель для этого - для файлов журналов, которые я могу записать в сжатом виде, а затем иметь возможность к tailним (даже если они не были полностью записаны, т.е. потоковые), не дожидаясь, пока все это будет прочитано с диска или сети.

Патрик
источник

Ответы:

5

У gzip есть опция --rsyncable, которая делает то же самое . Нестандартной частью была бы утилита ztail с поддержкой gzip-block, но, похоже, вы уже имели дело с этим.

заместитель Wabbit
источник
2
Конечно, эта опция эффективно ограничивает уровень сжатия -0,5, даже если вы укажете -9.
psusi 19.09.11
где вы получаете версию gzip, которая поддерживает это? Если это был вариант в какой-то момент, он, кажется, был удален.
Патрик
В дистрибутивах на основе Debian он есть - это из Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Создать rsync-дружественный архив
the-wabbit
По-видимому, некоторые другие сопровождающие дистрибутивов (например, Fedora), похоже, также включили исправления. И здесь есть патч для старого gzip: samba.org/netfilter/diary/gzip.rsync.patch, который может применяться к более поздней версии с небольшими изменениями, если вам действительно нужно самостоятельно скомпилировать.
The Wabbit
Кстати, дискуссии показывают, что влияние на сжатие незначительно (в пределах 2-3%), хотя пробег для конкретного набора данных может варьироваться. Если вам нужно «настраиваемое» сжатие с адаптивными алгоритмами, такими как deflate, вряд ли можно время от времени переустанавливать алгоритм - конечно, это вызовет снижение эффективности сжатия.
The Wabbit
0

FWIW: я разработал инструмент командной строки на основе исходного кода zlib zran.c, который создает индексы для файлов gzip: https://github.com/circulosmeos/gztool

Это может сделать непрерывный хвост файла gzip с -Tопцией. Или просто хвост последнего содержимого и остановка с помощью -t(доступно много других опций).

Обратите внимание, что для любого из этих действий gztoolбудет создан индексный файл, чередующийся с этим действием.

Индексы могут быть прерваны в любое время и использованы повторно и / или завершены позже. И как gztoolможно просто получить команду извлекать данные из любого места в файле и создать индекс, чередующийся с этим действием, при его использовании никогда не теряется время.

circulosmeos
источник