On Wed, 15 Apr 2009 17:06:37 +0300
spider wrote:
> >> $ man tar выдает, в частности, следующее:
> >> -r, --append
> >> append files to the end of an archive
> >>
> >> Это значит, что добавить данные в несжатый архив tar можно =>
> >> можно добавить и в сжатый.
> > А вот эта импликация ни разу не очевидна, и tar справедливо скажет
> > "Cannot concatenate compressed archives"
> Так разожмите архив, дополните и опять сожмите результат.
см ниже.
>
> > Если смотреть с точки зрения реализации, то очевидно нужно не просто
> > склеить два tar-архива как файлы внутри gzip (кому-то может
> > показаться, что pipe помогает обойти ограничения, но это не так),
> > как это gzip обычно делает при добавлении, а сначала добавить файл2
> > в архив tar (распакованный, sic!), после чего упаковать результат.
> > Разумеется, это маразм.
> Почему же это маразм?
Потому, что пользователь может ждать совсем не этого. И добавление 10kb
в 10gb может занять время э-э-э... несколько больше ожидаемого (+
место под временные файлы, которого может не быть, или может быть на
момент подачи команды а потом вдруг исчезнуть и т.д.).
Да, мы имеем некоторую потерю степени сжатия (и как следствие -
дискового пространства). Но она не сравнима с возможными потерями
времени.
Обрати внимание, что добавление в gzip реализовано именно через сжатие с
тем же словарём (и склейку), а не через распаковку-склейку-упаковку.
Потому что время и дисковое место на _реальное_добавление_ может
потребоваться совсем не детское.
> Я сразу и вспомнить не могу, есть ли
> какой-нибудь алгоритм сжатия, который допускает добавление в контент
> без его восстановления из сжатого состояния.
ИМХО, многие алгоритмы расширяются довольно тривиально. Для того же
tar-a можно отрезать два нулевых блока при сжатии [затем приклеивать
любой tar при добавлении, как это делает gzip], и автоматом
добавлять хвост при разжимании.
> Более кругло говоря, если архиватор использует некоторую схему
> упаковки контента, а компрессор ее не понимает и не может этот контент
> выделять из контейнера в чистом виде для сжатия, то ничего не
> получится.
Вот именно поэтому если компрессор _понимает_, то в принципе реально без
разжимания.
> > В общем-то я cчитаю возможным реализовать алгоритм добавления в
> > архив внутри tar'a (потому что там можно учесть формат его файлов).
> Алгоритм добавления в tar-архив уже реализован в утилите tar.
"в архив" - имелось ввиду именно в сжатый. Прошу прощения за
некорректное выражение.
>
> > желаемой операции и отдельного архивирования будут равны словарю
> > нового архива
> Зачем файловому архиву словарь? Не путаете ли Вы архивацию и сжатие?
> Это компрессор использует словарь. tar-архив никаких словарей не
> содержит. Это простой список:
Согласен, мы об одном и том же. И здесь я тоже имел ввиду именно сжатый.
>
Timohty Silent
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36026; Возраст листа: 2092; Участников: 1378
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/846099