Проблема с .tar.gz
архивами заключается в том, что, когда я пытаюсь просто перечислить содержимое архива, компьютер фактически распаковывает его, что может занять очень много времени, если файл большой.
Другие форматы файлов , такие как .7z
, .rar
, .zip
не имеют этой проблемы. Перечисление их содержания занимает всего одно мгновение.
По моему наивному мнению, это огромный недостаток .tar.gz
формата архива.
Итак, у меня фактически есть 2 вопроса:
- почему люди
.tar.gz
так много используют, несмотря на этот недостаток? - Какой выбор (я имею в виду другое программное обеспечение или инструменты) у меня есть, если я хочу возможность «мгновенного отображения контента»?
tar
compression
gzip
archive
Dave.d
источник
источник
Ответы:
Важно понимать, что здесь есть компромисс.
tar
означает ленточный архиватор . На ленте вы делаете в основном последовательное чтение и запись. В настоящее время ленты используются редко, ноtar
все еще используются для его способности читать и записывать свои данные в виде потока.Ты можешь сделать:
Вы не можете сделать это с
zip
или тому подобное.Вы даже не можете перечислить содержимое
zip
архива, не сохранив его локально в доступном для поиска файле. Думает как:не сработает
Для быстрого чтения содержимого
zip
и т. П. Необходимо создать индекс. Этот индекс может быть сохранен в начале файла (в этом случае он может быть записан только в обычные файлы, а не в потоки) или в конце, что означает, что архиватор должен запомнить все элементы архива перед его печатью в конце и означает, что усеченный архив не может быть восстановлен.Это также означает, что члены архива должны быть сжаты по отдельности, что означает гораздо более низкую степень сжатия, особенно если много маленьких файлов.
Еще один недостаток таких форматов, как
zip
то, что архивирование связано со сжатием, вы не можете выбрать алгоритм сжатия. Посмотрите, какtar
архивы раньше сжимались с помощьюcompress
(tar.Z
), затем сgzip
, затемbzip2
, тогда,xz
когда были разработаны новые более производительные алгоритмы сжатия. То же самое касается шифрования. Кто будет доверятьzip
шифрованию в наше время?Теперь проблема с
tar.gz
архивами заключается не в том, что вам нужно их распаковывать. Распаковка часто происходит быстрее, чем чтение с диска (вы, вероятно, обнаружите, что распечатка содержимого большого архива tgz быстрее, чем распечатка того же распакованного, когда он не кэширован в памяти), но вам нужно прочитать весь архив.Неспособность быстро прочитать индекс - не проблема. Если вы предвидите необходимость часто читать содержимое таблицы архива, вы можете просто сохранить этот список в отдельном файле. Например, во время создания вы можете сделать:
Более серьезной проблемой IMO является тот факт, что из-за последовательного аспекта архива вы не можете извлечь отдельные файлы, не прочитав весь начальный раздел архива, который ведет к нему. IOW, вы не можете делать случайные чтения в архиве.
Теперь, для поиска файлов, это не должно быть так.
Если вы сжимаете свой
tar
архивgzip
, который сжимает его как единое целое, алгоритм сжатия использует данные, которые были видны в начале, чтобы сжимать, поэтому вы должны начать с начала, чтобы распаковать.Но
xz
формат может быть сконфигурирован для сжатия данных в отдельных отдельных чанках (достаточно больших, чтобы сжатие было эффективным), это означает, что до тех пор, пока вы сохраняете индекс в конце этих сжатых чанков, для доступных для поиска файлов вы получаете доступ к несжатые данные случайным образом (по крайней мере, кусками).pixz
(параллельноxz
) использует эту возможность при сжатииtar
архивов, чтобы также добавить индекс начала каждого элемента архива в концеxz
файла.Таким образом, для доступных для поиска файлов вы можете не только получить список содержимого архива tar мгновенно (но без метаданных), если они были сжаты с помощью
pixz
:Но вы также можете извлечь отдельные элементы, не читая весь архив:
Теперь, почему такие вещи, как
7z
илиzip
редко используются в Unix, в основном потому, что они не могут архивировать файлы Unix. Они были разработаны для других операционных систем. Вы не можете сделать точную резервную копию данных, используя их. Они не могут хранить метаданные, такие как владелец (идентификатор и имя), разрешение, они не могут хранить символические ссылки, устройства, fifos ..., они не могут хранить информацию о жестких ссылках и другую информацию метаданных, такую как расширенные атрибуты или ACL.Некоторые из них не могут даже хранить элементы с произвольными именами (некоторые будут задыхаться от обратной косой черты, или новой строки, или двоеточия, или имен файлов, отличных от ascii) (
tar
хотя некоторые форматы также имеют ограничения).Никогда не распаковывайте файл tgz / tar.xz на диск!
В случае , если это не очевидно, один не использовать
tgz
илиtar.bz2
,tar.xz
... архив как:Если
.tar
в вашей файловой системе лежит несжатый файл, значит, вы сделали что-то не так.Весь смысл этих
xz
/bzip2
/gzip
потоковых компрессоров заключается в том, что они могут использоваться на лету, в трубопроводах, как вХотя современные
tar
реализации знают, как вызыватьunxz
/gunzip
/bzip2
самостоятельно, поэтому:обычно также работает (и снова распаковывает данные на лету, а не сохраняет несжатую версию архива на диске).
пример
Вот дерево исходного кода ядра Linux, сжатое в различных форматах.
Во-первых, как отмечалось выше, 7z и zip немного отличаются, потому что они не могут хранить там несколько символических ссылок и пропускают большую часть метаданных.
Теперь несколько моментов для отображения содержимого после очистки системных кэшей:
Вы заметите, что листинг
tar.xz
файла быстрее, чем.tar
даже на этом 7-летнем ПК, поскольку чтение этих дополнительных мегабайт с диска занимает больше времени, чем чтение и распаковка меньшего файла.Тогда хорошо, перечисление архивов с помощью 7z или zip происходит быстрее, но это не проблема, поскольку, как я уже сказал, это легко обойти, сохранив список файлов рядом с архивом:
Даже быстрее чем 7z или zip даже после сброса кешей. Вы также заметите, что совокупный размер архива и его индекс по-прежнему меньше, чем у архивов zip или 7z.
Или используйте
pixz
индексированный формат:Теперь, чтобы извлечь отдельные элементы архива, наихудший сценарий для архива tar - это доступ к последнему элементу:
Это довольно плохо, так как нужно читать (и распаковывать) весь архив. Сравнить с:
Моя версия 7z не может выполнять произвольный доступ, поэтому она выглядит еще хуже, чем
tar.xz
:Теперь, так как мы создали наш
pixz
ранее:Это быстрее, но все еще относительно медленно, потому что архив содержит несколько больших блоков:
Поэтому по-
pixz
прежнему необходимо читать и распаковывать (до) ~ 19 МБ большой кусок данных.Мы можем сделать произвольный доступ быстрее, сделав архивы меньшими блоками (и пожертвовав немного дискового пространства):
источник
.tar.gz
может занять слишком много времени. Особенно если среда медленная. Тогда формат архива становится различием между невозможным и практическим.Корпоративные и академические администраторы часто более заметны, когда дела идут плохо, чем оценивают, когда дела идут эффективно. Такие среды порождают страх экспериментов и презрение к новизне .
dar ( D isk Ar chiver) включает в себя множествофункций, похожихна tar , а также такие усовершенствования, как быстрый произвольный доступ к сжатым архивам, каталогизация AKA, индексация AKA, AKA «мгновенный листинг контента» ...
Смотрите также: форматы сжатия с хорошей поддержкой произвольного доступа в архивах?
источник