¿Cómo se configura el tamaño del bloque bzip2 cuando se usa tar?


9

Estoy usando tarpara hacer una copia de seguridad de un servidor Linux en cinta. Estoy usando la -jopción para comprimir el archivo bzip2, sin embargo, no puedo ver una manera de ajustar las opciones de tamaño de bloque para bzip2 desde tar. El tamaño de bloque predeterminado es de 900,000 bytes, que proporciona la mejor compresión pero es el más lento. No estoy tan preocupado por la relación de compresión, así que estoy buscando hacer que bzip2 funcione más rápido con un tamaño de bloque más pequeño.


1
Nota al margen: Últimamente he renunciado a bzip2. Utilizo lzma (del paquete lzma, lzma-utils o lzma-sdk, el nombre depende de su distribución). Por lo general, se comprime igual o mejor que bzip2 dado el mismo tiempo de CPU, y cuando se trata de descompresión simplemente sopla bzip2 lejos.
Mihai Limbăşan

Respuestas:


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

O canalizar la salida de tara bzip2.

Aunque debe tener en cuenta en la página de manual de bzip2:

    -1 (o - rápido) a -9 (o - mejor)
              Establezca el tamaño del bloque en 100 k, 200 k .. 900 k al comprimir.
              No tiene efecto al descomprimir. Ver GESTIÓN DE MEMORIA a continuación.
              Los alias --fast y --best son principalmente para GNU gzip compat-
              ibility. En particular, - rápido no hace que las cosas sean significativas
              Cantly más rápido. Y --best simplemente selecciona el comportamiento predeterminado.

qué alternativa puede usar export BZIP = -9
Pol Hallen

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

En mi sistema (OSX El Capitan bsdtar 2.8.3) falta esto en la página de manual (aunque gzip: nivel de compresión y xz: nivel de compresión están listados), pero probarlo es una opción.
steveayre

tar: unrecognized option '--options'
ZN13

2

bzip2 tamaños de bloque

bzip2Tiene algunas opciones de tamaño de bloque. Desde la página del 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 desea una compresión más rápida con menos relación con la relación de compresión, usando bzip2, parece que desea la opción -1(o --fast).

Establecer el bzip2tamaño del bloque cuando se usatar

Puede establecer el bzip2tamaño del bloque cuando lo use tarde varias maneras.

La manera UNIX

Mi forma favorita, la forma UNlX, es aquella en la que utilizas todas las herramientas de forma independiente y las combinas a través de tuberías.

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

Puede leer eso como "crear .tar con tar-> bzip con bzip2-> escribir en [ARCHIVE].tar.bz2".

Variable ambiental

También es posible establecer bzip2opciones a través de la variable de entorno BZIP2. Desde la página del 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.

Entonces, para usar eso tar, podría, por ejemplo, hacer:

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

Alternativas más rápidas

bzip2usa un algoritmo de compresión lenta. Si le preocupa la velocidad, podría investigar algoritmos alternativos, como los utilizados por gzipo lzop. Aquí hay un buen artículo que compara las herramientas de compresión: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


Parece que puede tener el conocimiento para proporcionar una buena respuesta aquí, pero considere leer ¿Cómo escribo una buena respuesta? en nuestro centro de ayuda y luego revise la Respuesta. Sus Comandos / Código / Configuración pueden ser técnicamente la solución, pero alguna explicación es bienvenida. Gracias por adelantado.
HBruijn

1

Envíe la tarsalida stdouty luego canalícela por bzip2separado:

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

0

Es aún más fácil:

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

3
El uso de un archivo temporal significa que necesita suficiente espacio en el disco duro, más ancho de banda para que tar escriba y bzip2 lo lea. Esto puede parecer trivial para pequeñas cantidades de datos, pero cuando el directorio en cuestión tiene varios cientos de gigabytes, puede convertirse en un problema real.
Ansgar Esztermann el

Si gracias. Sé que aprendí la razón más profunda por qué tartiene -zy -j. Estas opciones me parecieron bastante convenientes. Pero pueden salvar el día.
Andreas Spindler
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.