如何使用Pigz与Tar

54

因此,我正在使用带有pigz的tar。

tar --use-compress-program=pigz

这个方法可以工作,但它没有使用我所有的处理器,并且我想确保它是递归的(-r)并且使用(-9压缩级别)。
我阅读了利用多核进行tar+gzip/bzip压缩/解压缩,但它没有注明在该格式中添加其他命令的任何位置,并且我在两个程序的man页面中找不到任何其他开关。
谢谢, Cam

据我所知,gzip的9级压缩并不是一个好的选择,因为它需要更多的CPU时间而没有太多的好处。你的情况可能有所不同,但与4级相比,你需要3倍的CPU时间才能获得约1%的文件大小差异。此外,xz的1级压缩比gz的9级压缩计算量少,且压缩率更高。 - bct
3个回答

65

马克·阿德勒在您的问题中提供的SO链接中得票最多的答案确实提供了一种解决方案,可以指定压缩级别以及要使用的处理器数量:

tar cf - paths-to-archive | pigz -9 -p 32 > archive.tar.gz

参见:https://dev59.com/_Gct5IYBdhLWcg3wI6J6#12320421


50

要通过-I--use-compress-programpigz传递参数,您可以像这样将命令和参数括在引号中

tar --use-compress-program="pigz --best --recursive" -cf archive.tar.gz YourData

这里有一个有趣的选项来监控归档创建的速度:

tar --use-compress-program="pigz --best --recursive | pv" -cf archive.tar.gz YourData

2
这个命令可以像这样使用吗,tar --use-compress-program="pigz -dc -p 20" -xvpf test.tgz -C /home/test_dir?我尝试过了,但是它失败了。我想在自定义线程数下解压我的tgz文件。 - CHENJIAN
根据man页面[1],pigz无法并行解压缩,但将读取、写入和检查拆分为单独的线程,因此至少比gzip快一点。 [1] https://linux.die.net/man/1/pigz - Chris L. Barnes

35

快速解包:

tar -I pigz -xf /mnt/sd/current/backup/bigbackup_web.tar.gz -C /tmp

快速打包:

tar -cf bigbackup.tar.gz -I pigz /opt

然后:

apt-get install pigz

或者

yum install pigz

或者使用Homebrew安装在MacOS上

brew install pigz

3
OP 中的参数 --use-compress-program=pigz-I pigz 相同。 - akhan
我们能加速解压过程吗?据我所知,压缩不需要任何额外的参数,而pigz使用每个核心。但是当我解压它时,似乎没有使用所有的CPU... - postgresnewbie
这并没有回答问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接