Как установить размер блока bzip2 при использовании tar?


9

Я использую tarдля резервного копирования Linux-сервера на ленту. Я использую -jопцию для сжатия файла bzip2, однако я не вижу способа настроить параметры размера блока для bzip2 из tar. Размер блока по умолчанию составляет 900 000 байт, что обеспечивает лучшее сжатие, но является самым медленным. Меня не беспокоит степень сжатия, поэтому я хочу, чтобы bzip2 работал быстрее с меньшим размером блока.


1
Sidenote: В последнее время я почти отказался от bzip2. Я использую lzma (из пакета lzma, lzma-utils или lzma-sdk, имя зависит от вашего дистрибутива.) Обычно он сжимает то же самое или лучше, чем bzip2, учитывая то же время процессора - а когда дело доходит до декомпрессии, он просто дует bzip2 прочь.
Михай Лимбашан

Ответы:


9
export BZIP=--fast
tar cjf foo.tar.bz2 foo

Или передайте вывод tarв bzip2.

Хотя вы должны заметить со справочной страницы bzip2:

    -1 (или - fast) до -9 (или --best)
              Установите размер блока 100 к, 200 к .. 900 к при сжатии.
              Не действует при распаковке. См. УПРАВЛЕНИЕ ПАМЯТЬЮ ниже.
              Псевдонимы --fast и --best в первую очередь предназначены для gzip-совместимости GNU.
              ibility. В частности, - fast не делает вещи значимыми
              чуть быстрее. И --best просто выбирает поведение по умолчанию.

Как альтернативно вы можете использовать экспорт BZIP = -9
Pol Hallen

4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/

В моей системе (OSX El Capitan bsdtar 2.8.3) этого не хватает на странице руководства (хотя перечислены gzip: уровень сжатия и xz: уровень сжатия), но проверка этого параметра работает.
Steveayre

tar: unrecognized option '--options'
ZN13

2

bzip2 размеры блоков

bzip2имеет несколько вариантов размера блока. Со страницы руководства bzip2(1):

-1 (or --fast) to -9 (or --best)
       Set the block size to 100 k, 200 k ..  900 k when compressing.
       Has no effect when decompressing. See MEMORY MANAGEMENT below.
       The --fast and --best aliases are primarily for GNU gzip
       compatibility. In particular, --fast doesn't make things
       significantly faster. And --best merely selects the default
       behaviour.

Поскольку вам нужно более быстрое сжатие с меньшим отношением к степени сжатия bzip2, вы, похоже, хотите использовать опцию -1(или --fast).

Установка bzip2размера блока при использованииtar

Вы можете установить bzip2размер блока при использовании tarнесколькими способами.

UNLX путь

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

$ tar --create [FILE...] | bzip2 -1 > [ARCHIVE].tar.bz2

Вы можете прочитать это как «создать .tar с tar-> bzip это с bzip2-> записать его [ARCHIVE].tar.bz2».

Переменная среды

Также возможно установить bzip2параметры через переменную окружения BZIP2. Со страницы руководства bzip2(1):

bzip2 will read arguments from the environment variables BZIP2 and BZIP,
in that order, and will process them before any arguments read from the
command line. This gives a convenient way to supply default arguments.

Таким образом, чтобы использовать это с tar, вы могли бы, например, сделать:

$ BZIP2=-1 tar --create --bzip2 --file [ARCHIVE].tar.bz2 [FILE...]

Более быстрые альтернативы

bzip2использует алгоритм медленного сжатия. Если вас беспокоит скорость, вы можете исследовать альтернативные алгоритмы, например, используемые gzipили lzop. Вот хорошая статья, сравнивающая инструменты сжатия: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


Похоже, у вас есть знания, чтобы дать хороший ответ здесь, но, пожалуйста, подумайте о том, как читать хороший ответ? в нашем справочном центре, а затем пересмотрите ответ. Ваши Команды / Код / Настройки могут быть технически решением, но некоторые пояснения приветствуются. Заранее спасибо.
HBruijn

1

Отправьте tarвывод stdoutи затем направьте его по bzip2отдельности:

% tar cvf - _file_ | bzip2 _opts_ > output.tar.bz2

0

Это даже проще:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar

3
Использование временного файла означает, что вам нужно достаточно места на жестком диске, плюс пропускная способность для записи tar и bzip2 для его чтения. Для небольших объемов данных это может показаться тривиальным, но если в каталоге имеется несколько сотен гигабайт, это может стать реальной проблемой.
Ансгар Эстерманн

Да, спасибо. Я знаю , узнал глубинную причину , почему tarесть -zи -j. Эти варианты показались мне довольно удобными. Но они могут спасти день.
Андреас Шпиндлер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.