Як встановити розмір блоку bzip2 під час використання tar?


9

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


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

Відповіді:


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

Або підключити вихід tarдо bzip2.

Хоча вам слід звернути увагу на сторінку чоловіка bzip2:

    Від -1 (або - швидкий) до -9 (або - кращий)
              При стисканні встановіть розмір блоку на 100 к, 200 к .. 900 к.
              Не робить ефекту при розпакуванні. Див. МЕНЕДЖМЕНТ УПРАВЛЕННЯ нижче.
              Псевдоніми --fast і --best - це насамперед для GNU gzip compat-
              здатність. Зокрема, - Fast не робить речі значущими -
              швидше швидше. І - краще лише вибирає поведінку за замовчуванням.

як альтернативу можна використовувати експорт 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) цього відсутнє на сторінці man (хоча перераховані 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

Ви можете прочитати це як "create .tar with tar-> bzip with bzip2-> write it to [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
Використання тимчасового файлу означає, що вам потрібно достатньо місця на жорсткому диску, а також пропускну здатність для запису та bzip2 для його читання. Це може здатися тривіальним для невеликих обсягів даних, але коли у відповідного каталогу є кілька сотень гігабайт, це може стати справжньою проблемою.
Ansgar Esztermann

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