В чем преимущество использования формата Tar-файлов сегодня?
Формат архивирования tar - это, в вычислительные годы, настоящий Метузела, но сегодня он все еще активно используется. Что делает формат tar таким полезным еще долго после его создания?
Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..
Вопрос
Читатель SuperUser MarcusJ интересуется форматом tar и почему мы все еще используем его после всех этих лет:
Я знаю, что tar был создан для ленточных архивов, но сегодня у нас есть форматы архивных файлов, которые объединяют файлы и выполняют сжатие в одном и том же логическом формате..
Вопросы:
- Существует ли снижение производительности на этапах агрегации / сжатия / распаковки для использования tar, инкапсулированного в gzip или bzip2, по сравнению с использованием формата файла, который выполняет агрегирование и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора одинаково (например, gzip и Deflate похожи).
- Существуют ли особенности формата файлов tar, которых нет в других форматах, таких как .7z и .zip??
- Поскольку tar является таким старым форматом файлов, и сегодня существуют новые форматы файлов, почему tar (независимо от того, инкапсулирован ли он в gzip, bzip2 или даже в новый xz) все еще так широко используется сегодня в GNU / Linux, Android, BSD и других подобных UNIX операционные системы, для передачи файлов, исходного кода программы и бинарных загрузок, а иногда даже в формате менеджера пакетов?
Это совершенно разумный вопрос; за последние тридцать лет в компьютерном мире многое изменилось, но мы все еще используем формат tar. В чем дело?
Ответ
Участник SuperUser Allquixotic предлагает некоторое представление о долговечности и функциональности формата tar:
Часть 1: Производительность
Вот сравнение двух отдельных рабочих процессов и что они делают.
У вас есть файл на диске
blah.tar.gz
скажем, 1 ГБ сжатых GZIP-данных, которые в несжатом виде занимают 2 ГБ (то есть степень сжатия 50%).То, как вы могли бы создать это, если бы вы делали архивирование и сжатие отдельно, было бы:
файлы tar cf blah.tar…
Это приведет к
blah.tar
которая является простым объединениемфайлы ...
в несжатом виде.Тогда вы бы сделали
gzip blah.tar
Это будет читать содержание
blah.tar
с диска, сжать их с помощью алгоритма сжатия gzip, записать содержимое вblah.tar.gz
, затем отсоедините (удалите) файлblah.tar
.Теперь давайте распаковать!
Способ 1
У тебя есть
blah.tar.gz
, так или иначе.Вы решили запустить:
gunzip blah.tar.gz
Это будет
- ПРОЧИТАЙТЕ 1 ГБ сжатого содержимого данных
blah.tar.gz
.- ПРОЦЕСС сжатых данных через
GZIP
декомпрессор в памяти.- Поскольку буфер памяти заполняется данными «блочного» уровня, ЗАПИШИТЕ несжатые данные в файл
blah.tar
на диске и повторять, пока все сжатые данные не будут прочитаны.- Отключить (удалить) файл
blah.tar.gz
.Теперь у вас есть
blah.tar
на диске, который не распакован, но содержит один или несколько файлов, с очень низкими издержками структуры данных. Размер файла, вероятно, пара байтов больше, чем сумма всех данных файла будет.Ты бежишь:
tar xvf blah.tar
Это будет
- ПРОЧИТАЙТЕ 2 ГБ несжатого содержимого данных
blah.tar
идеготь
структуры данных формата файла, включая информацию о разрешениях файла, именах файлов, каталогах и т. д..- ЗАПИШИТЕ на диск 2 ГБ данных плюс метаданные. Это включает в себя: перевод информации о структуре данных / метаданных в создание новых файлов и каталогов на диске, в зависимости от ситуации, или перезапись существующих файлов и каталогов с новым содержимым данных.
Общие данные мы ЧИТАТЬ с диска в этом процессе было 1 ГБ (для gunzip) + 2 ГБ (для tar) = 3 ГБ.
Общие данные мы НАПИСАЛ на диске в этом процессе было 2 ГБ (для gunzip) + 2 ГБ (для tar) + несколько байтов для метаданных = около 4 ГБ.
Способ 2
У тебя есть
blah.tar.gz
, так или иначе.Вы решили запустить:
tar xvzf blah.tar.gz
Это будет
- ПРОЧИТАЙТЕ 1 ГБ сжатого содержимого данных
blah.tar.gz
, блок за один раз, в память.- ПРОЦЕСС сжатых данных через
GZIP
декомпрессор в памяти.- Когда буфер памяти заполняется, он будет труба эти данные, в памяти, до
деготь
анализатор формата файла, который будет считывать информацию о метаданных и т. д. и данные несжатого файла.- Поскольку буфер памяти заполняется в
деготь
анализатор файлов, он запишет несжатые данные на диск, создав файлы и каталоги и наполнив их несжатым содержимым.Общие данные мы ЧИТАТЬ с диска в этом процессе было 1 ГБ сжатых данных, точка.
Общие данные мы НАПИСАЛ на диск в этом процессе было 2 ГБ несжатых данных + несколько байтов для метаданных = около 2 ГБ.
Если вы заметили, объем дискового ввода-вывода в Способ 2 является идентичный на диск ввода / вывода, выполняемый, скажем,
застежка-молния
или же7-Zip
программы, корректирующие любые различия в степени сжатия.И если степень сжатия является вашей проблемой, используйте
Xz
компрессор для герметизациидеготь
, и у вас есть архив TAR с LZMA2, который так же эффективен, как и самый продвинутый алгоритм, доступный для7-Zip
:-)Часть 2: Особенности
деготь
хранит разрешения UNIX в своих метаданных файла и хорошо известна и проверена на предмет успешной упаковки каталога со всеми видами разрешений, символьных ссылок и т. д. Существует более нескольких случаев, когда может понадобиться скопировать кучу файлов в отдельный файл или поток, но не обязательно сжимать его (хотя сжатие полезно и часто используется).Часть 3: Совместимость
Многие инструменты распространяются в исходном или двоичном виде как .tar.gz или .tar.bz2, потому что это формат файла с «наименьшим общим знаменателем»: так же, как большинство пользователей Windows имеют доступ к распаковщикам .zip или .rar, большинство установок Linux, даже самые простые, будут иметь доступ по крайней мере к гудрону и смоле, независимо от того, сколько лет или урезаны. Даже прошивки Android имеют доступ к этим инструментам.
Новые проекты, ориентированные на аудиторию, использующую современные дистрибутивы, могут очень хорошо распространяться в более современном формате, например .tar.xz (с использованием формата сжатия Xz (LZMA), который сжимает лучше, чем gzip или bzip2), или .7z, что аналогично форматы файлов Zip или Rar, которые сжимают и определяют макет для инкапсуляции нескольких файлов в один файл.
Вы не видите, чтобы .7z использовался чаще по той же причине, по которой музыка не продается в онлайн-магазинах загрузки в совершенно новых форматах, таких как Opus, или видео в WebM. Совместимость с людьми, использующими древние или очень простые системы.
Есть что добавить к объяснению? Звук выключен в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.