Вопрос В чем преимущество использования «tar» сегодня?
я знаю это tar
был сделан для ленточных архивов в тот же день, но сегодня у нас есть форматы архивных файлов, которые объединяют файлы и выполняют сжатие в одном и том же формате логических файлов.
Вопросов:
Существует ли ограничение производительности на этапах агрегации / сжатия / декомпрессии для использования tar
инкапсулированный в gzip
или bzip2
, по сравнению с использованием формата файла, который выполняет агрегацию и сжатие в одной и той же структуре данных? Предположим, что время работы сравниваемого компрессора идентично (например, gzip и Deflate аналогичны).
Существуют ли особенности tar
формат файла, который поддерживает другие форматы файлов, такие как .7z
а также .zip
не иметь?
поскольку tar
такой старый формат файла, и новые форматы файлов существуют сегодня, почему tar
(инкапсулированный в gzip
, bzip2
или даже новых xz
), который так широко используется сегодня в GNU / Linux, Android, BSD и других подобных операционных системах UNIX, для передачи файлов, загрузки исходных кодов и бинарных загрузок, а иногда и в виде формата диспетчера пакетов?
206
2018-03-14 14:33
происхождения
ответы:
Часть 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
декомпрессора в памяти.
- Поскольку буфер памяти заполняет «ценность блока», WRITE несжатые данные в файл
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
, и у вас есть LZMA2'ed TAR, который так же эффективен, как и самый продвинутый алгоритм, доступный для 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 чаще используются по той же причине, что музыка не продается из магазинов онлайн-загрузки в совершенно новых форматах, таких как опус, или видео в WebM, Совместимость с людьми, использующими древние или очень простые системы.
173
2018-03-14 17:09
Эта был дан ответ на переполнение стека,
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 чаще используются по той же причине, что музыка не продается из магазинов онлайн-загрузки в совершенно новых форматах, таких как опус, или видео в WebM, Важна совместимость с людьми, использующими древние или очень простые системы.
100
2017-08-19 08:50
У Tar есть богатый набор операций и модификаторов, которые знают все о файловых системах Unix. Он знает о разрешениях Unix, о разных временах, связанных с файлами, о жестких ссылках, о программных ссылках (и о возможности того, что символические ссылки могут вводить циклы в графике файловой системы) и позволяет указать несколько разных способов управления всеми этими данными ,
Вы хотите, чтобы извлеченные данные сохраняли время доступа к файлу? Тар может это сделать. Чтобы сохранить разрешения? Тар может это сделать.
Вы хотите сохранить символические ссылки как символические ссылки? Тар делает это по умолчанию. Хотите скопировать цель вместо этого? Тар может это сделать.
Вы хотите быть уверенным, что данные с жесткой привязкой сохраняются только один раз (то есть, чтобы делать правильные вещи)? Тар делает это.
Вы хотите хорошо обрабатывать разреженные файлы? Тар может это сделать.
Вы хотите несжатые данные (почему?)? Тар может это сделать. Сжать с помощью gzip? Тар может это сделать. С bzip2? Тар может это сделать. С произвольными программами внешнего сжатия? Тар может это сделать.
Вы хотите написать или восстановить на / из необработанного устройства? Формат Тэра отлично подходит.
Вы хотите добавить файлы в существующий архив? Тар может это сделать. Чтобы разделить два архива, чтобы увидеть, что изменилось? Тар может это сделать. Обновить только те части архива, которые изменились? Тар может это сделать.
Вы хотите, чтобы убедиться, что вы не архивируете более чем одну файловую систему? Тар может это сделать.
Вы хотите захватить только файлы, которые новее, чем ваша последняя резервная копия? Тар может это сделать.
Вы хотите сохранить имена и номера пользователей и групп? Тар может сделать одно.
Нужно ли сохранять узлы устройств (например, файлы в /dev
), так что после извлечения система будет работать правильно? Тар может это сделать.
Тар развивается, чтобы обрабатывать множество и множество вариантов использования на протяжении десятилетий и действительно знает много о том, что люди хотят делать с файловыми системами Unix.
61
Вы смешиваете два разных процесса архивирование а также компрессия,
Причины использования архиватора
Одна из причин использования архивации без сжатия - это, например,
файлов копируется с одного узла на другой. Команда, подобная следующей
tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"
может значительно ускорить работу. Если я знаю, что файлы не могут быть
сжатый или если SSH настроен с сжатием, он может сэкономить значительный процессор
время. Конечно, можно использовать более современный инструмент для сжатия с функцией архивирования
и выключите компрессию. Преимущество tar
есть, что я могу ожидать
для каждой системы.
Причины использования архиватора с сжатием gzip
Одна из причин, по которой я использую tar
с gzip
является: скорость!
Если я хочу передать несколько GiB текстовых файлов из одного места в другое, я
не заботятся о том, чтобы выжать последние байты, поскольку только сжатие
используется для транзита, а не для длительного хранения. В тех случаях я использую gzip
,
который не максимизирует процессор (в отличие от 7-Zip, например),
означает, что я I / O снова связаны, а не связаны с ЦП. И опять: gzip
возможно
считается доступным во всем мире.
Причины использования tar
в пользу scp
, rsync
, и т.д.
Это бьет scp
если у вас есть много небольших файлов для копирования (например, почтовые каталоги со сто тысячами файлов). rsync
, удивительный, как есть, может быть недоступен повсюду. В дальнейшем, rsync
только реально окупается, если часть файлов - или более старая версия - уже присутствует в пункте назначения. Для первоначальной копии tar
является самым быстрым, с сжатием или без, в зависимости от фактических данных.
28
Добавляя к другим хорошим ответам здесь, я предпочитаю комбинацию tar
+ gzip|bzip2|xz
главным образом потому, что эти сжатые файлы похожи на потоки, и вы можете легко их транслировать.
Мне нужно распаковать файл, доступный в Интернете. Либо с zip
или rar
Форматы, которые я должен сначала загрузить, а затем распаковать. С tar.{gz,bz2,xz}
Я могу загружать и распаковывать один и тот же шаг, без необходимости архивирования сжатого архива на диске:
curl -s http://example.com/some_compressed_file.tar.gz | tar zx
Это оставит только несжатые файлы на моем диске и ускорит весь процесс, потому что я не откладываю время, сначала загружая весь файл, и после завершения загрузки я распаковываю его. Вместо этого я раскалываю его во время загрузки. Вы не можете сделать это с помощью zip
или rar
файлы.
24
Есть несколько причин придерживаться (GNU) Tar.
Это:
- Лицензия GPL
- хорошо в смысле философии Unix
- единый инструмент, способный выполнять несколько задач
- хорошо документированы и имеют много доверенных функций
- совместим с несколькими алгоритмами сжатия
- просты в использовании, и у людей сложились привычки с ним
- широкодоступный
- Я чувствую себя теплым и нечетким внутрь при использовании программного обеспечения, запускаемого RMS (без учета Emacs)
Если ваша конкретная говядина должна «декомпрессировать» архив, прежде чем вы сможете прочитать содержимое, то вы, вероятно, правы. WinRAR а также 7-Zip сделайте это автоматически. Тем не менее, есть простые способы решения этой проблемы, такие как документирование содержимого архива в несжатой форме.
13
Форматы файлов, такие как .zip требовать программное обеспечение, чтобы сначала прочитать конец файла, прочитать каталог имен файлов. И наоборот, tar хранит эту информацию в сжатом потоке.
Преимущество tar-способа заключается в том, что вы можете распаковывать данные, читая его из трубки, недоступной для поиска, например сетевой сокет.
Преимущество zip-способа заключается в том, что для статического файла на диске вы можете просматривать содержимое и метаданные, не распаковывая весь архив в первую очередь.
Оба имеют свои возможности, в зависимости от того, что вы делаете.
11