使用 tar 时如何设置 bzip2 块大小?

使用 tar 时如何设置 bzip2 块大小?

我正在使用tar来将 Linux 服务器备份到磁带。我使用-j选项来压缩文件bzip2,但是我找不到从 tar 调整 bzip2 块大小选项的方法。默认块大小为 900,000 字节,这可以提供最佳压缩率,但速度最慢。我不太在意压缩率,因此希望使用较小的块大小让 bzip2 运行得更快。

答案1

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

tar或者通过管道将的输出传输到bzip2

不过你应该注意 bzip2 手册页:

    -1(或 --fast)至 -9(或 --best)
              压缩时将块大小设置为100k,200k..900k。
              解压时无效。请参阅下面的内存管理。
              --fast 和 --best 别名主要用于 GNU gzip 兼容
              特别是,--fast 不会使事情变得有意义
              速度更快。而 --best 仅仅选择默认行为。

答案2

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

答案3

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

您可以将其读作“使用 ... 创建 .tar tar-> 使用 ... bzip 压缩bzip2-> 将其写入 ... [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/

答案4

甚至更简单:

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

相关内容