Почему форматы архива tar переключаются на xz сжатие для замены bzip2 и что относительно gzip?

Почему это критикуется так? Для меня это только для одной точки: прозрачность. Реестр не делает имеет любого, imo. Объективно:

  • это подвержено ошибкам при тонкой настройке вокруг
  • может быть фрагментирован
  • загаженные записи часто не удаляются при деинсталляции программного обеспечения
  • слишком много ключевых типов (DWORD, QWORD, строка, двоичный файл, единороги и т.д.)
211
07.01.2014, 22:10
4 ответа

Для распределения архивов по Интернету следующими вещами обычно является приоритет:

  1. Степень сжатия (т.е. как маленький компрессор делает данные);
  2. Время распаковки (требования ЦП);
  3. Требования к памяти распаковки; и
  4. Совместимость (насколько широко распространенный программа распаковки),

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

По сравнению с bzip2 xz имеет лучшую степень сжатия и ниже (лучшее) время распаковки. Это, однако — при настройках сжатия, обычно используемых — требует, чтобы больше памяти распаковало [1], и несколько менее широко распространено. Gzip использует меньше памяти, чем также.

Так, и gzip и xz архивы формата отправляются, позволяя Вам выбрать:

  • Должен распаковать на машине с очень ограниченной памятью (<32 МБ): gzip. Данный, не очень вероятно при разговоре об источниках ядра.
  • Должен распаковать минимальные доступные инструменты: gzip
  • Хочу сэкономить время загрузки и/или пропускную способность: xz

Нет действительно реалистической комбинации факторов, это заставило бы Вас выбирать bzip2. Так то, что это было постепенно сокращенным.

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

(Существуют некоторые определенные сценарии, где хорошая bzip2 реализация может быть предпочтительна для xz: bzip2 может сжимать файл с большим количеством нулей и генома, который DNA упорядочивает лучше, чем xz. Более новые версии xz теперь имеют (дополнительно) блочный режим, который позволяет восстановление данных после точки повреждения и параллельного сжатия и [в теории] распаковка. Ранее, только bzip2 предложил их. [2] Однако ни один из них не важен для распределения ядра),


1: В размере архива, xz -3 вокруг bzip -9. Затем xz использует меньше памяти для распаковки. Но xz -9 (как, например, используемый для ядра Linux tarballs), использует намного больше, чем bzip -9. (И даже xz -0 потребности больше, чем gzip -9).

2: F21 Изменение В масштабе всей системы: lbzip2 как значение по умолчанию bzip2 реализация

205
27.01.2020, 19:27
  • 1
    Какой-либо комментарий к теме отказоустойчивости или - то, что что-то это всегда реализуется полностью за пределами алгоритмов сжатия? –   08.01.2014, 03:00
  • 2
    @illuminÉ не может быть обеспечена, не жертвуя степенью сжатия. Это - ортогональная проблема, и в то время как инструменты как Parchive существуют, для распределения обработки ошибок TCP ядра делает задание точно также. –  Tobu 08.01.2014, 10:58
  • 3
    @illuminÉ (принимающий Вас означают что-то подобное par2) обычно не является беспокойством с распределением архивов по Интернету. Загрузки приняты достаточно надежные (и можно просто повторно загрузить, если это было повреждено). Криптографические хеши и подписи часто используются, и они обнаруживают повреждение, а также вмешательство. Существуют компрессоры, которые дают большую отказоустойчивость, хотя за счет степени сжатия. Никто, кажется, не находит компромисс стоящим того для загрузок FTP или HTTP. –  derobert 08.01.2014, 19:02
  • 4
    xz ответа МЕНЬШЕ памяти для распаковки. –  MichalH 11.08.2015, 14:32
  • 5
    @Mike это изменилось, так как я записал это? В частности, сноска каждый объясняет использование памяти. –  derobert 11.08.2015, 17:03

В первую очередь, этот вопрос непосредственно не связан с tar. Tar просто создает несжатый архив, сжатие затем применяется позже.

Gzip, как известно, относительно быстр по сравнению с LZMA2 и bzip2. Если скорость имеет значение, gzip (особенно многопоточная реализация pigz) часто хороший компромисс между скоростью сжатия и степенью сжатия. Хотя существуют альтернативы, если скорость является проблемой (например, LZ4).

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

Нет большой причины использовать bzip2 больше, кроме назад совместимости. Кроме того, LZMA2 был desiged с многопоточностью в памяти, и много реализаций по умолчанию используют многоядерные центральные процессоры (к сожалению, xz на Linux не делает этого, еще). Это имеет смысл, так как тактовые частоты не будут больше увеличиваться, но количество ядер будет.

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

47
27.01.2020, 19:27
  • 1
    Хорошо некоторые смолы grok a z опция. –  tchrist 07.01.2014, 03:19
  • 2
    делает для запутанного ответа, необходимо обратиться к скорости сжатия или скорости распаковки. Ни один pixz, pbzip2 или pigz устанавливаются по умолчанию (или используются tar без флага-I), но pixz и pbzip2 ускоряют сжатие и распаковку, и pigz только для сжатия. –  Tobu 08.01.2014, 10:33
  • 3
    @Tobu xz будет многопоточным по умолчанию так нет pixz установка будет требоваться в будущем. На некоторых платформах xz поточная обработка уже поддерживается. Принимая во внимание, что bzip2 вряд ли когда-либо будет многопоточным, так как формат не был разработан с многопоточностью в памяти. Кроме того, pbzip2 только ускоряет распаковку, если файл был сжат с помощью pbzip2 который часто является не случаем. –  Marco 08.01.2014, 14:07
  • 4
    @Marco я верю lbzip2, допускает параллельную распаковку файлов, даже если они были сжаты с непараллельной реализацией (например, запас bzip2). Вот почему я использую lbzip2 по pbzip2. (Возможно, что это развилось начиная с Вашего комментария.) –  RaveTheTadpole 20.01.2015, 08:09

Короткий ответ: xz более эффективен с точки зрения степени сжатия. Таким образом, это сохраняет дисковое пространство и оптимизирует передачу через сеть.
Вы видите этот Быстрый Сравнительный тест, чтобы обнаружить различие практическими тестами.

20
27.01.2020, 19:27

LZMA2 - это система сжатия блоков, а gzip - нет. Это означает, что LZMA2 поддается многопоточности. Кроме того, если в архиве происходит повреждение, вы обычно можете восстановить данные из последующих блоков с помощью LZMA2, но вы не можете сделать это с помощью gzip. На практике вы теряете весь архив с gzip после поврежденного блока. С архивом LZMA2 вы теряете только файл (ы), затронутые поврежденными блоками. Это может быть важно в больших архивах с несколькими файлами.

19
27.01.2020, 19:27

Теги

Похожие вопросы