Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

В чем преимущества использования формата файлов Tar сегодня?

Оригинал: What Is the Advantage of Using the Tar File Format Today?
Автор: Chris Hoffman
Дата публикации: 26 марта 2013 г.
Перевод: Н.Ромоданов
Дата перевода: июнь 2014 г.

Формат архивирования tar, если его сравнивать со временем существования вычислительной техники, является почтенным долгожителем, который сегодня все еще находится в активной эксплуатации. Что же делает формат tar настолько полезным в течение такого продолжительного времени после его создания?

Сегодня в разделе «Вопрос & Ответ» мы рады представить сайт SuperUser - подразделение Stack Exchange, группы веб-сайтов Q&A поддерживаемых сообществом.

Вопрос

Читатель сайта SuperUser, MarcusJ, интересуется форматом tar и тем, почему мы до сих пор используют его в течение всех этих лет:

Я знаю, что формат tar был создан в те времена, когда данных хранились на ленточных архивах, но сегодня у нас есть форматы архивирования файлов, в которых в рамках одного и того же логического формата файла можно сохранять сразу несколько файлов и выполнять сжатие.

Вопросы:

  • Есть ли потери производительности на этапах агрегирования / сжатия / распаковывания при использовании формата tar, заключенного в формате gzip или bzip2 по сравнению с использованием формата файла, в котором агрегирование и сжатие происходит в одной той же структуре данных? Предположим, что сравниваемое время работы алгоритмов сжатия идентично (например, gzip и Deflate являются аналогичными).
  • Есть ли особенности формата tar, которых нет в других форматах файлов, например, в .7z и .zip?
  • Раз формат tar настолько старый, а сегодня существуют и новые форматы файлов, почему формат tar (независимо от того, используется ли он внутри форматов gzip, bzip2 или даже нового формата xz) до сих пор так широко используется сегодня на операционных системах GNU/Linux, Android, BSD и другие подобных системах UNIX для передачи файлов, загрузки исходных или двоичных кодов, а иногда даже в качестве формата менеджера пакетов?

Это резонный вопрос; за последние тридцать лет в компьютерном мире так много изменилось, но мы до сих пор используем формат tar. Так что же это за история?

Ответ

Allquixotic, член сообщества SuperUser, дает нам некоторое разъяснение о причинах продолжительного использования и функциональных возможностях формата tar:

Часть 1: Производительность

Сравним два отдельных рабочих процесса и то, что они делают.

У вас есть файл на диске blah.tar.gz, в котором, скажем, данные размером 1 GB, сжатые с помощью gzip, занимают 2 GB, когда они распаковываются (так степень сжатия равна 50%).

Способ, с помощью которого вы можете создать его, если будете делать архивирование и сжатие отдельно, будет выглядеть так:

tar cf blah.tar files ...

В результате будет получен файл blah.tar, который является простое совокупностью файлов files ... в несжатом виде.

Затем вам следует сделать следующее

gzip blah.tar

В результате с диска будет прочитано содержимое файла blah.tar, которое будет сжато с помощью алгоритма gzip, содержимое будет записано в файл blah.tar.gz, после чего ссылка на файл blah.tar будет удалена (файл удаляется).

Теперь давайте выполним распаковку!

Способ 1

Так или иначе у вас есть файл blah.tar.gz.

Вы решили выполнить команду:

gunzip blah.tar.gz

Вы будете выполнять следующее:

  • ПРОЧИТАЕТЕ 1GB сжатых данных из содержимого blah.tar.gz;
  • ОБРАБОТАЕТЕ в памяти сжатые данные с помощью распаковщика gzip;
  • как только буфер памяти будет заполнен «блоком» ценных данных, ЗАПИСЫВАЕТЕ распакованные данные в файл blah.tar на диске и будет повторять процедуру до те пор, пока не будут прочитаны все сжатые данные;
  • удалите ссылку на файл blah.tar.gz (удалите файл).

Теперь, у вас на диске есть файл blah.tar, который является несжатым, но в нем содержится один или несколько файлов, причем с очень низкими накладными расходами на поддержку структуры данных. Размер файла, вероятно, на несколько байт больше, чем сумма всех данных, которые должны быть в файле.

Вы запускаете следующую команду:

tar xvf blah.tar

Вы будете выполнять следующее

  • ЧИТАТЬ 2GB несжатых данных содержимого файла blah.tar и структур данных формата файла tar, в том числе сведения о правах доступа к файлам, именах файлов, каталогов и т.д;
  • ЗАПИСЫВАТЬ на диск 2GB данных плюс метаданные; это включает в себя следующее: перевод информации о структуре данных / метаданных в зависимости от обстоятельств в процесс создания новых файлов и каталогов на диске или в процесс перезаписи существующих файлов и каталогов с новым содержанием данных.

Общее количество данных, которые мы ПРОЧИТАЛИ с диска в этом процессе, равно 1 GB (для gunzip) + 2 GB (для tar) = 3 GB.

Общее количество данных, которые мы ЗАПИСАЛИ на диск в этом процессе, было 2 GB (для gunzip) + 2GB(для tar) + несколько байтов для метаданных = около 4 GB.

Способ 2

Так или иначе у вас есть файл blah.tar.gz.

Вы решили запустить следующую команду:

tar xvzf blah.tar.gz

Вы будете выполнять следующее:

  • ЧИТАТЬ в память 1GB сжатых данных содержимого файла blah.tar.gz, по блоку за один раз;
  • ОБРАБАТЫВАТЬ в памяти сжатые данные с помощью распаковщика gzip;
  • После того, как буфер будет заполнен, его содержимое через конвейер, работающий в памяти, будет передаваться в парсер файла формата tar, который будет читать информацию о метаданных и т.д. и распаковывать данные файла;
  • Как только в парсере файла tar буфер памяти будет заполнен, будет выполнена ЗАПИСЬ несжатых данных на диск, при этом будут создаваться файлы и каталоги и они будут заполняться несжатым содержимым.

Общее количество данных, которые мы ПРОЧИТАЛИ с диска в этом процессе, было равно 1 GB сжатых данных, и точка.

Общее количество данных, которые мы ЗАПИСАЛИ на диск в этом процесс, было равно 2 GB несжатых данных + несколько байт для метаданных = около 2 GB.

Если вы заметили, объем дискового ввода/вывода во втором способе идентичен объему дискового ввода/вывода, выполняемому, скажем, программами Zip или 7-Zip, прочем с выбором любой степени сжатия.

И если вас волнует степень сжатия, то используйте компрессор Xz, который инкапсулирует файл tar, и у вас будет архив TAR со сжатием LZMA2, которой будет настолько же эффективным, как наиболее передовой алгоритм, доступный для 7-Zip :-)

Часть 2: Особенности

Формат tar сохраняет права доступа системы UNIX внутри своих метаданных файла, что очень хорошо известно и проверено с помощью успешной упаковки каталога со всеми видами различных прав доступа, символическими ссылками и т.д. Это больше, чем просто собрать вместе кучу файлов в один файл или поток, причем его можно не сжимать (хотя сжатие полезно и часто используется).

Часть 3: Совместимость

Многие инструментальные средства распространяются в исходном или двоичном коде в форматах .tar.gz или .tar.bz2, поскольку это самые простые и наиболее распространенные форматы: точно также, как большинство пользователей системы Windows имеют доступ к распаковщикам .zip или .rar, в большинстве инсталляций Linux, даже самых ограниченных, будет доступ по меньшей мере к иметь доступ к tar и gunzip независимо от того, сколько им лет или насколько они ограничены. Даже в прошивках системы Android есть доступ к этим инструментам.

Новые проекты для аудиторий, работающих с современными дистрибутивами, вполне могут распространяться в более современном формате, например, в формате .tar.xz (используя формат сжатия Xz (LZMA), которая сжимает лучше, чем gzip или bzip2), или .7z, который похож на форматы файлов Zip или Rar тем, что он выполняет сжатие и определяет, каким образом нескольких файлов будут размещены в одном файле.

Вы видите, что формат .7z используется чаще, по той же причине, по которой музыка не продается в онлайн магазинах в совершенно новых форматах, таких как Opus, или видео в WebM. Это нужно для совместимости с очень старыми или очень ограниченными системами.

Есть, что добавить к объяснению? Что не прозвучало в комментариях. Хотите, чтобы прочитать больше ответов от других технически подкованных пользователей сообщества Stack Exchange? Ознакомьтесь с дискуссией в полном объеме здесь.