Jak ustawić rozmiar bloku bzip2 podczas używania tar?


9

Używam tardo tworzenia kopii zapasowych serwera linux na taśmę. Korzystam z -jopcji kompresji pliku bzip2, jednak nie widzę sposobu na dostosowanie opcji rozmiaru bloku dla bzip2 z tar. Domyślny rozmiar bloku to 900 000 bajtów, co zapewnia najlepszą kompresję, ale jest najwolniejsze. Nie interesuje mnie współczynnik kompresji, więc chcę, aby bzip2 działał szybciej przy mniejszym rozmiarze bloku.


1
Sidenote: Ostatnio zrezygnowałem z bzip2. Używam lzma (z pakietu lzma, lzma-utils lub lzma-sdk, nazwa zależy od twojej dystrybucji.) Zwykle kompresuje to samo lub lepsze niż bzip2, biorąc pod uwagę ten sam czas procesora - a jeśli chodzi o dekompresję, po prostu wieje bzip2 z dala.
Mihai Limbăşan

Odpowiedzi:


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

Lub potokuj wyjście tardo bzip2.

Chociaż powinieneś pamiętać ze strony podręcznika bzip2:

    -1 (lub --fast) do -9 (lub - best)
              Ustaw rozmiar bloku na 100 k, 200 k .. 900 k podczas kompresji.
              Nie ma wpływu podczas dekompresji. Zobacz ZARZĄDZANIE PAMIĘCIĄ poniżej.
              Aliasy --fast i --best są przede wszystkim dla GNU gzip kompatybil-
              ibility. W szczególności --fast nie oznacza, że ​​coś znaczy
              znacznie szybciej. I --best po prostu wybiera domyślne zachowanie.

jak alternatywnie można użyć eksportu BZIP = -9
Pol Hallen

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

W moim systemie (OSX El Capitan bsdtar 2.8.3) tego brakuje na stronie podręcznika man (chociaż są wymienione gzip: poziom kompresji i xz: poziom kompresji), ale przetestowanie tej opcji działa.
steveayre

tar: unrecognized option '--options'
ZN13,

2

bzip2 rozmiary bloków

bzip2ma kilka opcji rozmiaru bloku. Ze strony podręcznika 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.

Jeśli chcesz szybszej kompresji przy mniejszym stopniu stosunku kompresji, używając bzip2, wydaje się, że chcesz opcji -1(lub --fast).

Ustawianie bzip2rozmiaru bloku podczas używaniatar

bzip2Rozmiar bloku można ustawić tarna kilka sposobów.

Sposób UNlX

Mój ulubiony sposób, UNlX, to taki, w którym używasz każdego narzędzia niezależnie i łączysz je za pomocą rur.

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

Możesz to przeczytać jako „utwórz .tar za pomocą tar-> bzip za pomocą bzip2-> napisz to [ARCHIVE].tar.bz2”.

Zmienna środowiskowa

Możliwe jest również ustawienie bzip2opcji za pomocą zmiennej środowiskowej BZIP2. Ze strony podręcznika 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.

Aby użyć tego z tar, możesz na przykład:

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

Szybsze alternatywy

bzip2wykorzystuje algorytm powolnej kompresji. Jeśli obawiasz się o szybkość, możesz zbadać alternatywne algorytmy, takie jak te używane przez gziplub lzop. Oto fajny artykuł porównujący narzędzia do kompresji: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


Wygląda na to, że masz wiedzę, aby udzielić dobrej odpowiedzi tutaj, ale zastanów się nad przeczytaniem Jak napisać dobrą odpowiedź? w naszym centrum pomocy, a następnie popraw odpowiedź. Twoje polecenia / kod / ustawienia mogą technicznie być rozwiązaniem, ale niektóre wyjaśnienia są mile widziane. Z góry dziękuję.
HBruijn

1

Wyślij dane tarwyjściowe do, stdouta następnie potokuj je bzip2osobno:

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

0

To jeszcze łatwiejsze:

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

3
Użycie pliku tymczasowego oznacza, że ​​potrzebujesz wystarczającej ilości miejsca na dysku twardym, a także przepustowości, aby program tar mógł zapisywać, a bzip2 do odczytu. Może się to wydawać trywialne w przypadku niewielkich ilości danych, ale gdy dany katalog ma kilkaset gigabajtów, może to stać się prawdziwym problemem.
Ansgar Esztermann

Tak, dziękuję. Wiem, że nauczył się głębszy powód tarma -zi -j. Te opcje wydawały mi się raczej wygodne. Ale mogą uratować dzień.
Andreas Spindler
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.