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


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


8
2018-05-01 16:46


Источник


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


Ответы:


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

Или вывести на выходе tar в bzip2,

Хотя вы должны отметить на странице руководства bzip2:

    -1 (или --fast) до -9 (или -best)
              Установите размер блока до 100 k, 200 k .. 900 k при сжатии.
              Не имеет эффекта при распаковке. См. «Управление памятью» ниже.
              Имена fast и -best в основном предназначены для GNU gzip compat-
              ibility. В частности, --fast не делает вещи значимыми
              быстрее. И --best просто выбирает поведение по умолчанию.

8
2018-05-01 16:57



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


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

4
2017-09-05 16:18



В моей системе (OSX El Capitan bsdtar 2.8.3) это отсутствует на странице руководства (хотя перечислены gzip: уровень сжатия и xz: уровень сжатия), но при тестировании он работает. - steveayre
tar: unrecognized option '--options' - ZN13


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/


2
2017-11-16 10:14



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


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

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

1
2018-05-01 16:49





Его еще проще:

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

0
2018-01-10 09:49



Использование временного файла означает, что вам нужно достаточно места на жестком диске, а также пропускная способность для записи tar и bzip2 для его чтения. Это может показаться тривиальным для небольших объемов данных, но когда данный каталог имеет несколько сотен гигабайт, это может стать реальной проблемой. - Ansgar Esztermann
Да, спасибо. Я знаю, узнал более глубокую причину, почему tar имеет -z а также -j, Эти варианты мне казались довольно удобными. Но они могут спасти день. - Andreas Spindler