Назад | Перейти на главную страницу

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

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

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

Или направьте вывод tar к bzip2.

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

    -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 compat-
              ibility.  In particular, --fast  doesn't  make  things  signifi-
              cantly faster.  And --best merely selects the default behaviour.
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/

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 несколькими способами.

Путь UNIX

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

$ 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/

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

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

Еще проще:

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