Como você define o tamanho do bloco bzip2 ao usar o tar?

9

Estou usando tarpara fazer backup de um servidor linux em fita. Estou usando a -jopção para compactar o arquivo bzip2, no entanto, não vejo uma maneira de ajustar as opções de tamanho de bloco para o bzip2 do tar. O tamanho do bloco padrão é 900.000 bytes, o que proporciona a melhor compactação, mas é o mais lento. Não estou tão preocupado com a taxa de compactação, por isso estou procurando fazer o bzip2 rodar mais rápido com um tamanho de bloco menor.

Guy C
fonte
1
Sidenote: Ultimamente tenho desistido do bzip2. Eu uso o lzma (do pacote lzma, lzma-utils ou lzma-sdk, o nome depende da sua distribuição.) Geralmente, ele comprime o mesmo ou melhor que o bzip2, com o mesmo tempo de CPU - e quando se trata de descompactação, ele simplesmente sopra o bzip2 longe.
Mihai Limbăşan

Respostas:

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

Ou canalize a saída de tarpara bzip2.

Embora você deva observar na página de manual do bzip2:

    -1 (ou - rápido) a -9 (ou - melhor)
              Defina o tamanho do bloco como 100 k, 200 k .. 900 k ao compactar.
              Não tem efeito ao descomprimir. Veja GERENCIAMENTO DE MEMÓRIA abaixo.
              Os aliases --fast e --best destinam-se principalmente ao GNU gzip
              flexibilidade. Em particular, --fast não torna as coisas significativas
              notavelmente mais rápido. E --best simplesmente seleciona o comportamento padrão.
Brian Campbell
fonte
como alternativa, você pode usar exportação BZIP = -9
Pol Hallen
4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/
steveayre
fonte
No meu sistema (OSX El Capitan bsdtar 2.8.3), isso está ausente na página de manual (embora gzip: nível de compactação e xz: nível de compactação estejam listados), mas testando-a, a opção funciona.
Steveayre 5/09/16
tar: unrecognized option '--options'
ZN13 18/07/2018
2

bzip2 tamanhos de bloco

bzip2tem algumas opções de tamanho de bloco. Na página do manual 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.

Como você deseja uma compactação mais rápida, com menos consideração à taxa de compactação, usando bzip2, parece que deseja a opção -1(ou --fast).

Definir o bzip2tamanho do bloco ao usartar

Você pode definir o bzip2tamanho do bloco ao usá tar-lo de duas maneiras.

A maneira UNlX

Minha maneira favorita, a maneira UNlX, é aquela em que você usa todas as ferramentas independentemente e as combina através de tubos.

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

Você pode ler isso como "criar .tar com tar-> bzip-lo com bzip2-> escrever para [ARCHIVE].tar.bz2".

Variável de ambiente

Também é possível definir bzip2opções através da variável de ambiente BZIP2. Na página do manual 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.

Então, para usar isso tar, você pode, por exemplo:

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

Alternativas mais rápidas

bzip2usa um algoritmo de compactação lenta. Se você está preocupado com a velocidade, pode investigar algoritmos alternativos, como os usados ​​por gzipou lzop. Aqui está um bom artigo comparando ferramentas de compactação: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/

aude
fonte
Parece que você pode ter o conhecimento necessário para fornecer uma boa resposta aqui, mas por favor considere ler Como faço para escrever uma boa resposta? na nossa Central de Ajuda e revise a resposta. Seus comandos / código / configurações podem ser tecnicamente a solução, mas alguma explicação é bem-vinda. Desde já, obrigado.
HBruijn
1

Envie a tarsaída para stdoute, em seguida, passe-a bzip2separadamente:

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

É ainda mais fácil:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar
Andreas Spindler
fonte
3
Usar um arquivo temporário significa que você precisa de espaço suficiente no disco rígido, além de largura de banda para o tar escrever e bzip2 para lê-lo. Isso pode parecer trivial para pequenas quantidades de dados, mas quando o diretório em questão possui várias centenas de gigabytes, pode se tornar um problema real.
Ansgar Esztermann
Sim obrigado. Eu sei que aprendi a razão mais profunda pela qual tartem -ze -j. Essas opções pareciam bastante convenientes para mim. Mas eles podem salvar o dia.
Andreas Spindler