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.

Guy C.
źródło
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.
Brian Campbell
źródło
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/
Steveayre
źródło
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/

aude
źródło
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
Alnitak
źródło
0

To jeszcze łatwiejsze:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar
Andreas Spindler
źródło
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