206

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

Вопросы:

  • Существует ли снижение производительности на этапах агрегации / сжатия / распаковки для использования tar инкапсулированного в gzip или bzip2 , по сравнению с использованием формата файла, который выполняет агрегирование и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора одинаково (например, gzip и Deflate похожи).

  • Существуют ли какие-либо особенности формата файлов tar , которых нет в других форматах файлов, таких как .7z и .zip ?

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

18 ответов18

176

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

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

У вас есть файл на диске blah.tar.gz который, скажем, представляет собой 1 ГБ сжатых GZIP данных, который в несжатом виде занимает 2 ГБ (то есть степень сжатия 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

Это будет

  • ПРОЧИТАЙТЕ 1 ГБ сжатого содержимого данных blah.tar.gz
  • ОБРАБОТАТЬ сжатые данные через распаковщик gzip в памяти.
  • Когда буфер памяти заполняется данными из "блоков", ЗАПИШИТЕ несжатые данные в файл blah.tar на диске и повторяйте, пока все сжатые данные не будут прочитаны.
  • Отсоедините (удалите) файл blah.tar.gz

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

Ты бежишь:

tar xvf blah.tar

Это будет

  • ПРОЧИТАЙТЕ 2 ГБ несжатого содержимого данных blah.tar и структур данных формата файла 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 в памяти.
  • Поскольку буфер памяти заполняется, то это будет труба , что данные в памяти, вплоть до формата синтаксического анализа tar файла, который будет считывать информацию о метаданных и т.д. , а также данные несжатых файлов.
  • Когда буфер памяти заполняется в синтаксическом анализаторе файлов tar , он ЗАПИСАЕТ несжатые данные на диск, создавая файлы и каталоги и заполняя их несжатым содержимым.

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

Общее количество данных, которые мы записали на диск в этом процессе, составило 2 ГБ несжатых данных + несколько байтов для метаданных = около 2 ГБ.

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

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

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

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

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

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

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

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

101

На это ответили на переполнение стека.

bzip и gzip работают с отдельными файлами, а не с группами файлов. Обычные старые zip (и pkzip) работают с группами файлов и имеют концепцию встроенного архива.

Философия * nix - это один из небольших инструментов, которые хорошо выполняют определенные задачи и могут быть объединены в цепочку. Вот почему здесь есть два инструмента, которые имеют конкретные задачи, и они разработаны так, чтобы хорошо сочетаться друг с другом. Это также означает, что вы можете использовать tar для группировки файлов, а затем у вас есть выбор инструмента сжатия (bzip, gzip и т.д.).

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

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

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

62

Tar имеет богатый набор операций и модификаторов, которые знают все о файловых системах Unix. Он знает о разрешениях Unix, о различном времени, связанном с файлами, о жестких ссылках, о мягких ссылках (и о возможности того, что символические ссылки могут вводить циклы в графе файловой системы), и позволяет вам указать несколько различных способов управления всеми этими данными ,

  • Вы хотите, чтобы извлеченные данные сохраняли время доступа к файлу? Тар может сделать это. Чтобы сохранить разрешения? Тар может сделать это.

  • Вы хотите сохранить символические ссылки как символические ссылки? Tar делает это по умолчанию. Хотите скопировать цель вместо этого? Тар может сделать это.

  • Вы хотите быть уверены, что данные с жесткими ссылками хранятся только один раз (то есть, чтобы сделать правильные вещи)? Тар делает это.

  • Вы хотите хорошо обрабатывать разреженные файлы? Тар может сделать это.

  • Вы хотите несжатые данные (почему?)? Тар может сделать это. Сжать с помощью gzip? Тар может сделать это. С бзип2? Тар может сделать это. С произвольными программами внешнего сжатия? Тар может сделать это.

  • Вы хотите записать или восстановить на / с необработанного устройства? Формат Tar прекрасно с этим справляется.

  • Хотите добавить файлы в существующий архив? Тар может сделать это. Разобрать два архива, чтобы увидеть, что изменилось? Тар может сделать это. Обновлять только те части архива, которые изменились? Тар может сделать это.

  • Вы хотите быть уверены, что не архивируете более чем одну файловую систему? Тар может сделать это.

  • Вы хотите получить только те файлы, которые новее, чем ваша последняя резервная копия? Тар может сделать это.

  • Вы хотите сохранить имена и номера пользователей и групп? Тар может сделать любой.

  • Вам нужно сохранить узлы устройства (например, файлы в /dev), чтобы после извлечения система работала правильно? Тар может сделать это.

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

28

Вы путаете два разных процесса архивирования и сжатия.

Причины использования архиватора

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

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

может значительно ускорить процесс. Если я знаю, что файлы не могут быть сжаты или если SSH настроен на сжатие, это может сэкономить значительное время процессора. Конечно, можно использовать более современный инструмент сжатия с функцией архивирования и отключить сжатие. Преимущество tar том, что я могу ожидать, что он будет доступен в каждой системе.

Причины использования архиватора со сжатием gzip

Одна из причин, по которой я использую tar с gzip : скорость! Если я хочу перенести несколько ГиБ текстовых файлов из одного места в другое, мне не нужно выдавливать последние байты, поскольку сжатие используется только для транзита, а не для длительного хранения. В этих случаях я использую gzip , который не максимально загружает процессор (в отличие от 7-Zip , например), что означает, что я снова связан с вводом / выводом, а не с процессором. И снова: gzip можно считать доступным везде.

Причины использования tar в пользу scp , rsync и т.д.

Он превосходит scp если вам нужно скопировать много маленьких файлов (например, почтовые каталоги с сотнями тысяч файлов). rsync , какой бы крутой он ни был, может быть доступен не везде. Кроме того, rsync действительно окупается, только если часть файлов - или более старая версия - уже присутствует в месте назначения. Для начальной копии tar является самым быстрым, со сжатием или без, в зависимости от фактических данных.

24

Добавляя к другим хорошим ответам здесь, я предпочитаю комбинацию tar + gzip|bzip2|xz главным образом потому, что эти сжатые файлы похожи на потоки, и вы можете легко их передать.

Мне нужно распаковать файл, доступный в Интернете. В форматах zip или rar мне нужно сначала скачать его, а затем распаковать. С tar.{gz,bz2,xz} я могу скачать и распаковать на одном шаге, без необходимости физического сжатия архива на диске:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Это оставит только несжатые файлы на моем диске и ускорит весь процесс, потому что я не тяну время, чтобы сначала загрузить весь файл, а после его окончания я распаковываю его. Вместо этого я распаковываю его во время загрузки. Вы не можете сделать это с файлами zip или rar .

13

Есть несколько причин придерживаться (GNU) Tar.

Это:

  • Лицензия GPL
  • хорошо в смысле философии Unix
    • универсальный инструмент, способный выполнять несколько задач
  • хорошо документировано и имеет много надежных функций
  • совместим с несколькими алгоритмами сжатия
  • прост в использовании, и люди выработали у него привычки
  • широко доступны
  • Я чувствую тепло и нечеткость внутри при использовании программного обеспечения, запущенного RMS (исключая Emacs)

Если ваша конкретная проблема связана с необходимостью "распаковать" тарбол, прежде чем вы сможете прочитать содержимое, то вы, вероятно, правы. WinRAR и 7-Zip делают это автоматически. Однако существуют простые обходные пути для этой проблемы, такие как документирование содержимого архива в несжатом виде.

11

Кажется, есть некоторое нежелание отвечать на все ваши вопросы напрямую, с очевидным предпочтением использовать ваш вопрос в качестве отправной точки для понтификации. Так что я сделаю это.

Существует ли снижение производительности на этапах агрегации / сжатия / распаковки для использования tar, инкапсулированного в gzip или bzip2, по сравнению с использованием формата файла, который выполняет агрегирование и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора одинаково (например, gzip и Deflate похожи).

Нет. Фактически, поскольку tar и gzip обычно являются двумя процессами, вы даже получаете преимущество в скорости многоядерности, которого не обеспечивает архиватор, такой как zip-файл Info-ZIP. С точки зрения степени сжатия tar+gzip обычно работает заметно лучше, чем zip с deflate, поскольку первый может извлечь выгоду из корреляции между файлами, тогда как последний сжимает файлы отдельно. Это преимущество сжатия приводит к выигрышу в скорости при извлечении, поскольку более сжатый архив распаковывается за меньшее время.

Существуют ли какие-либо особенности формата файлов tar, которых нет в других форматах файлов, таких как .7z и .zip?

Да, tar был разработан для Unix и развивался на протяжении многих лет, чтобы иметь возможность точно записывать и восстанавливать каждую странную и непонятную часть файловых систем Unix, даже более сложную файловую систему Unix Mac OS X. zip может сохранять большую часть метаданных, таких как разрешения, время, владельцы, группы и символические ссылки, но все же не все. Например, ни zip, ни 7z не могут распознать или использовать разреженные файлы, а также не знают и не могут восстановить жесткие ссылки.

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

Здесь много других хороших ответов. Лучше всего то, что он просто работает, и вы можете продолжать обновлять его до лучших форматов сжатия (например, xz) и при этом использовать тот же формат tar и даже ту же утилиту скомпилированного tar. Если вы просто хотите упаковать кучу вещей, а затем распаковать все это на другом конце, то нет никаких оснований использовать что-либо, кроме одного из самых старых, самых полных и наиболее отлаженных кусков программного обеспечения.

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

11

Спектакль

Большим отличием является порядок, в котором сжатие и архивирование выполняются в архивах tar Затем можно при желании отправить архив в компрессор, а zip создает архив и сжимает данные файла в куски по 32 КБ, когда они вставляются в архив. Разбивая данные файла на маленькие порции и сжимая их по отдельности, это позволяет извлекать определенные файлы или части файлов без необходимости распаковывать все в архиве перед этим. Это также не позволяет компрессору создавать очень большой словарь перед его перезапуском. Это означает, что сжатие будет идти быстрее, но не даст такого хорошего соотношения, как сжатие всего с большим размером словаря.

Вы можете визуализировать это, думая о двух файлах, где первые 500 байтов второго файла совпадают с последними 500 байтами первого файла. При использовании метода zip компрессор перезапускается для второго файла, поэтому он не помнит, что первый файл заканчивался теми же данными, поэтому он не может удалить дублирующиеся данные из второго файла.

популярность

Существует множество других форматов, которые имеют ряд преимуществ перед tar . 7-Zip не хранит права доступа к файлам Unix, но dar делает, и zip может, и все три хранят индекс, который позволяет быстро просматривать, извлекать подмножество файлов и обновлять файлы в архиве. Они также могут использовать многоядерные процессоры для сжатия.

Причина, по которой все по-прежнему используют tar по той же причине, что все по-прежнему используют Windows и Flash: людям не нравятся изменения. Без веской причины для изменения люди просто придерживаются того, что они знают. dar не дает достаточных преимуществ, чтобы оправдать публикацию файлов в формате, когда большинство людей уже установили tar , и очень немногие знают о dar , поэтому простая инерция удерживает нас на старом стандарте.

11

Форматы файлов, такие как .zip, требуют, чтобы программа сначала прочитала конец файла, чтобы прочитать каталог с именами файлов. И наоборот, tar хранит эту информацию в сжатом потоке.

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

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

Оба имеют свое применение, в зависимости от того, что вы делаете.

6

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

Это включает в себя все эти функции, которые отсутствуют в одном или нескольких конкурирующих инструментах:

  • владение файлами
  • права доступа к файлу
  • менее распространенные права доступа к файлу (например, setuid, sticky bit)
  • символические ссылки
  • жесткие ссылки
  • записи устройства (т.е. символьные и блочные устройства)
  • разреженные файлы
  • Записи ACL (не поддерживаются всеми версиями)
  • расширенные / пользовательские атрибуты (не поддерживаются всеми версиями)
  • Ярлыки SElinux (поддерживаются не всеми версиями)

Он также имеет параметр --one-file-system который чрезвычайно полезен при создании резервных копий.

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

5

Сегодня у нас есть много сжатых файлов: MP3, JPG, видео, файлы tar.gz, JAR-пакеты, RPM, DEB и так далее. Если вам нужно объединить их в один файл для передачи, тогда полезно иметь утилиту 'tar', которая объединяет только файлы, не пытаясь сжать их.

Мало того, что он тратит время и электричество, пытаясь сжать сжатый файл, но это часто приводит к тому, что файл больше, чем оригинал.

Другое использование этого - улучшить степень сжатия. Например, если вы «tar» связываете файлы журналов, а затем распаковываете результат, вы, скорее всего, получите файл меньшего размера, чем если бы вы сначала сжимали его, а затем связывали с «tar». И, конечно же, используя tar, вы можете выбрать любой алгоритм сжатия, который вам нужен, и указать параметры для оптимизации сжатия для вашего конкретного случая использования.

Я считаю, что tar 'очень актуален сегодня, и я предпочитаю использовать ZIP. В нашем офисе у каждого с Windows установлен 7-zip, поэтому для нас tar-файлы полностью кроссплатформенны.

4

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

Насколько я понимаю, существуют исторические причины (связанные с историей ОС, "защитой" патентов, способностью поставщика программного обеспечения продавать инструменты и т.д.).

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

Если вы прочитаете статью про tar из Википедии, вы увидите еще один интересный факт. В статье признаются некоторые недостатки tar... но не предлагается использовать zip (действительно, формат zip не устраняет эти недостатки), но DAR.

Я закончу с личным контактом. Несколько раз назад мне пришлось создать формат файла для хранения зашифрованных данных. Использовать tar в качестве основы было удобно (другие сделали такой же выбор, например, tar является внутренним форматом агрегации для пакетов .deb). Для меня было очевидно, что пытаться сжимать данные после шифрования совершенно бесполезно, я должен был выполнить сжатие как независимый шаг перед шифрованием, и я не был готов использовать zip-шифрование (я хотел шифрование с двумя ключами с открытым и закрытым ключами), Используя смолу это работало как ветер.

3

tar - это UNIX, а UNIX - это tar

По моему мнению, причина по- прежнему использовать tar сегодня заключается в том, что это один из (возможно, редких) случаев, когда подход UNIX просто сделал его совершенно правильным с самого начала.

Присмотревшись ближе к этапам создания архивов, я надеюсь, вы согласитесь, что способ разделения различных задач здесь - это философия UNIX в своих лучших проявлениях:

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

  • и просто еще один произвольно взаимозаменяемый инструмент (gzip bz2 xz чтобы назвать только несколько опций), который преобразует любой входной поток байтов в другой (мы надеемся) меньший выходной поток.

Использование такого подхода и подхода дает целую пару преимуществ как пользователю, так и разработчику:

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

    Как только выйдет совершенно новый "hyper-zip-utra" или инструмент для сжатия воды, вы уже готовы использовать его, охватывая нового слугу всей мощью tar .

  • Стабильность tar активно использовалась с начала 80-х годов и использовалась на многих операционных системах и машинах.

    Предотвращение необходимости заново изобретать колесо при реализации хранения прав собственности, разрешений, временных отметок и т. П. Снова и снова для каждого нового инструмента архивации не только экономит много (в противном случае излишне затраченных) времени на разработку, но также гарантирует одинаковую надежность для каждого новое приложение.

  • последовательность Пользовательский интерфейс просто остается неизменным все время.

    Нет необходимости помнить, что для восстановления прав доступа с помощью инструмента A вам нужно передать параметр --i-hope-you-rember-this-one а с помощью инструмента B вы должны использовать --this-time-its-another-one while с помощью инструмента C это `--hope-you-didnt-try-with-tool-as-switch.

    Принимая во внимание, что при использовании инструмента D вы бы действительно испортили его, если бы не использовали --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now .

3

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

3

Причина - "закрепление в культуре". Есть множество таких людей, как я, чьи глаза закрываются, если их просят обработать что-либо, кроме сжатого tar-архива или случайного ZIP-файла, если оно пришло из мира Windows.

Я не хочу слышать о 7-Zip, RAR или о чем-либо еще. Если мне нужно установить программу, чтобы распаковать ваш файл, это работа. Я сделаю это, если это приведет к тому, что мне заплатят, или если контент - это то, что я "должен иметь" и не доступен другим способом.

Одним из преимуществ tar является то, что если вы отправляете кому-то тарбол, он мгновенно распознается. Получатель может вводить команды извлечения, используя мышечную память.

Реальный вопрос заключается в следующем: почему некоторые люди так одержимы экономией еще одного байта пространства, что просят всех остальных тратить время на установку какой-то экзотической утилиты и обучение ее использованию? И затем есть глупое использование экзотических форматов сжатия и архивирования. Действительно ли видео H.264 со звуком AAC необходимо поместить в RAR с несколькими частями?

Формат tar может быть старым, но в нем хранится все, что имеет отношение: содержимое файла, пути, временные метки, разрешения и владельцы. Он хранит не только символические ссылки, но и сохраняет жесткую структуру ссылок. Он также хранит специальные файлы, так что архив ленты может использоваться для таких вещей, как каталог minature /dev который используется во время начальной загрузки. Вы можете объединить дистрибутив Linux, формат двоичного пакета которого состоит из ничего, кроме тарбаллов, которые не сжаты относительно корня файловой системы.

3

Много хороших ответов, но все они игнорируют важный факт. Tar обладает устоявшейся экосистемой пользователей и разработчиков в Unix-подобном мире. Это продолжает работать так же, как ZIP продолжает свою экосистему DOS/Windows. Наличие такой экосистемы - это то, что поддерживает технологию, а не ее технические преимущества.

2

Непосредственно отвечая на конкретные вопросы, которые вы задали:

Существует ли снижение производительности на этапах агрегации / сжатия / распаковки для использования tar, инкапсулированного в gzip или bzip2, по сравнению с использованием формата файла, который выполняет агрегирование и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора одинаково (например, gzip и Deflate похожи).

В некоторых случаях наблюдается конкретное улучшение производительности при использовании tar особенно со встроенной библиотекой сжатия (командные строки в стиле tar xvzf или tar xvjf , где используется библиотека сжатия, а не второй процесс). Это происходит от двух основных причин:

  • при обработке большого количества относительно небольших файлов, особенно тех, которые обычно используются при распространении программного обеспечения, существует высокая избыточность. Сжатие многих файлов приводит к более высокому общему сжатию, чем сжатие отдельных файлов. И "словарь" вычисляется один раз для каждого блока ввода, а не для каждого файла.

  • tar понимает файловые системы. Он предназначен для сохранения и восстановления работающей / работоспособной операционной системы. Он глубоко понимает, что именно важно в файловой системе UNIX, и точно фиксирует и восстанавливает это. Другие инструменты ... не всегда, особенно семейство zip, которое лучше предназначено для обмена файлами между семействами ОС, где важен документ, а не точная копия, чувствительная к ОС.

Существуют ли какие-либо особенности формата файлов tar, которых нет в других форматах файлов, таких как .7z и .zip?

Разреженная обработка файлов. Некоторые из прямых библиотек баз данных полагаются на разреженные файлы - файлы, в которых данные номинально являются ГБ, но фактических записанных и сохраненных данных намного, намного меньше, и фактически используется только несколько блоков диска. Если вы используете незнакомый инструмент, то при декомпрессии вы получите огромное потребление дисковых блоков, все из которых содержат нули. Превратить это обратно в редкий файл ... больно. Если у вас даже есть комната, чтобы сделать это. Вам нужен инструмент, который понимает, что такое разреженный файл, и уважает его.

Метаданные. Unix развил некоторые странные вещи за эти годы. 14-символьные имена файлов, длинные имена файлов, ссылки sym-ссылок, липкие биты, биты суперпользователя, унаследованные права доступа к группе и т.д. Tar понимает и воспроизводит их. Инструменты для обмена файлами ... не так много. Многие люди не используют ссылки так, как могли бы ... Если вы когда-либо работали с программным обеспечением, которое использует ссылки, а затем использовали неосведомленный инструмент для резервного копирования и восстановления, теперь у вас есть много независимых файлов вместо одного файла со многими именами. Боль. Ваше программное обеспечение дает сбой, и у вас есть раздувание диска.

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

tar работает. Это делает работу, для которой это разработано, хорошо. Были и другие рекламируемые замены (cpio , pax и т.д.). Но tar установлен практически на все, и библиотеки сжатия, которые он использует, также очень распространены по другим причинам. Ничего другого не произошло, что существенно превосходит то, что делает смола. Без явных преимуществ, большого количества встроенного использования и знаний в сообществе замены не будет. Тар много лет использовался. Если мы получим серьезные изменения в том, как мы думаем о файловых системах, или нетекстовые файлы каким-то образом станут способом передачи кода (в настоящее время не могу себе представить, как, но игнорируйте это ...), то вы можете найти другой инструмент. Но тогда это будет не тот тип ОС, который мы сейчас используем. Это было бы по-другому, организовано по-другому, и для этого потребовались бы свои собственные инструменты.

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

tar со сжатием хрупкая. Вам нужен весь архив, бит за битой. По моему опыту, это не устойчиво. У меня были ошибки с одним битом, в результате чего архивы из нескольких частей стали непригодными для использования. Он не вводит избыточность для защиты от ошибок (что побеждает один из заданных вами вопросов о сжатии данных). Если существует вероятность повреждения данных, вам нужна проверка ошибок с избыточностью, чтобы вы могли восстановить данные. По определению это означает, что вы не максимально сжаты. Вы не можете иметь оба бита данных, которые требуются и несут максимальное значение (максимальное сжатие), и каждый бит данных может быть потерян и восстановлен (избыточность и исправление ошибок). Итак ... какова цель вашего архива? tar отлично подходит для высоконадежных сред и когда архив может быть снова воспроизведен из исходного кода. ИМХ, на самом деле хуже оригинальной вещи, которую предлагают ее названия - архивирование на магнитной ленте. Однобитовые ошибки на ленте (или, что еще хуже, однобитовые ошибки в головке ленты, когда вы теряете один бит на каждый байт всей ленты или архива), приводят к невозможности использования данных. При достаточной избыточности, обнаружении и исправлении ошибок вы можете пережить любую из этих проблем.

Итак ... сколько шума и искажений в среде, которую вы просматриваете, и можно ли использовать источник для восстановления неисправного архива? Ответ, который вы указали, заключается в том, что система не шумит, и этот источник способен восстановить архив. В этом случае, tar достаточно.

tar со сжатием также плохо работает с предварительно сжатыми файлами. Если вы отправляете уже сжатые данные ... просто используйте tar и не беспокойтесь о стадии сжатия - он просто добавляет циклы ЦП, чтобы сделать немного. Это означает, что вам нужно знать, что вы отправляете и почему. Если тебе не все равно. Если вас не волнуют эти особые случаи, то tar точно скопирует данные, а сжатие не сможет сделать ничего полезного, чтобы уменьшить его. Нет больших проблем, кроме некоторых циклов процессора.

-3

ТАР - это Ленточный Архив. Это было вокруг в течение многих десятилетий, и это широко используется и поддерживается. Это зрелый продукт, который отвечает как текущим, так и устаревшим потребностям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .