我正在使用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