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

Все больше и больше tar используют xz на основе LZMA2 для сжатия вместо традиционного bzip2 (bz2) . Фактически kernel.org сделал поздний « Good-bye bzip2 » , 27 декабря 2013 г. , указав, что источники ядра с этого момента будут выпущены в формате tar.gz и tar.xz - и на главной странице < href = "https://www.kernel.org/"> веб-сайт , что прямо предлагается в tar.xz .

Есть ли какие-то конкретные причины, объясняющие, почему это происходит, и какова актуальность gzip в этом контексте?

183 голоса | спросил のbるしtyぱんky 6 Jpm1000000pmMon, 06 Jan 2014 22:39:24 +040014 2014, 22:39:24

4 ответа


181

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

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

Сжатие памяти & amp; Требования к процессору не очень важны, потому что для этого вы можете использовать для этого большую быструю машину, и вам нужно сделать это только один раз.

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

Итак, размещены архивы формата gzip и xz, позволяющие выбрать:

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

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

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

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


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

2: F21 System Wide Change: lbzip2 как реализация по умолчанию bzip2

ответил derobert 6 Jpm1000000pmMon, 06 Jan 2014 22:57:21 +040014 2014, 22:57:21
43

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

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

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

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

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

ответил Marco 6 Jpm1000000pmMon, 06 Jan 2014 22:55:16 +040014 2014, 22:55:16
18

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

ответил Slyx 6 Jpm1000000pmMon, 06 Jan 2014 23:14:46 +040014 2014, 23:14:46
12

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

ответил Mark Warburton 14 PMpThu, 14 Apr 2016 17:15:08 +030015Thursday 2016, 17:15:08

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132