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

    В чем преимущество использования формата 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? Ознакомьтесь с полным обсуждением здесь.