利用多核心的焦油+ gzip的/ bZIP结构压缩/解压缩(Utilizing multi core

2019-06-27 22:59发布

我通常使用压缩tar zcvf和使用解tar zxvf (使用gzip由于习惯)。

我最近得到了超线程四核CPU,所以我有8个逻辑核心,我注意到许多核心是压缩/解压缩过程中使用。

有什么办法,我可以利用未使用的内核,使其更快?

Answer 1:

您可以使用pigz除了gzip,这确实在多个内核上gzip压缩的。 而不是使用-z选项,你把它管道pigz:

tar cf - paths-to-archive | pigz > archive.tar.gz

默认情况下,pigz使用可用内核的数量,或八,如果它无法查询这一点。 你可以要求更多与-pn,如-p 32 pigz具有相同的选项,gzip的,所以你可以要求-9更好的压缩。 例如

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


Answer 2:

您还可以使用tar标志“ - 使用 - 压缩程序=”告诉焦油使用什么压缩程序。

例如使用:

tar -c --use-compress-program=pigz -f tar.file dir_to_zip 


Answer 3:

常用的方法

没有为选项tar程序:

-I, --use-compress-program PROG
      filter through PROG (must accept -d)

您可以使用归档或压缩实用程序的多线程版本。

最流行的多线程的归档是pigz (而不是gzip)而且pbzip2 (而不是bzip2的)。 例如:

$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive

归档必须接受-d。 如果更换工具有没有这个参数和/或你需要指定其他参数,然后用管道(如果有必要添加参数):

$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz

输入和singlethread和多线程的输出是兼容的。 您可以使用压缩版本的多线程使用singlethread版本,反之亦然解压缩。

的p7zip

对于的p7zip压缩,你需要像下面这样一个小的shell脚本:

#!/bin/sh
case $1 in
  -d) 7za -txz -si -so e;;
   *) 7za -txz -si -so a .;;
esac 2>/dev/null

它另存为7zhelper.sh。 这里使用的例子:

$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z

XZ

关于多线程XZ支持。 如果运行的版本5.2.0或XZ的Utils以上,则可以通过设置利用用于压缩多个核-T--threads (例如经由环境变量XZ_DEFAULTS为适当的值XZ_DEFAULTS="-T 0" )。

这是男人对5.1.0alpha版本的片段:

多线程压缩和解压尚未实现,所以这个选项对于现在没有任何影响。

然而,这不会对未也被压缩与穿线启用文件的解压工作。 从人的5.2.2版本:

螺纹减压尚未落实。 它只会工作在包含在块头大小信息的多个块的文件。 在单线程模式压缩在多线程模式满足压缩这种情况下所有的文件,但文件却连如果使用--block大小=大小。

与更换重新编译

如果你从源代码建立焦油,那么你就可以重新编译参数

--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip

使用这些选项重新编译焦油后,您可以检查的焦油的帮助输出:

$ tar --help | grep "lbzip2\|plzip\|pigz"
  -j, --bzip2                filter the archive through lbzip2
      --lzip                 filter the archive through plzip
  -z, --gzip, --gunzip, --ungzip   filter the archive through pigz


Answer 4:

您可以使用快捷-I焦油的--use-compress-program开关,并调用pbzip2对多核心的bzip2压缩:

tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 DIRECTORY_TO_COMPRESS/


Answer 5:

如果你想有文件名和压缩选项更多的灵活性,你可以使用:

find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec \
tar -P --transform='s@/my/path/@@g' -cf - {} + | \
pigz -9 -p 4 > myarchive.tar.gz

第1步: find

find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec

此命令会找你要归档的文件,在这种情况下/my/path/*.sql/my/path/*.log 。 添加尽可能多的-o -name "pattern" ,只要你想。

-exec将使用的结果执行下一个命令findtar

第2步: tar

tar -P --transform='s@/my/path/@@g' -cf - {} +

--transform是一个简单的字符串替换参数。 所以压缩包的根变得解压时的当前目录将剥离从存档的文件的路径。 请注意,您不能使用-C选项更改目录中,你将失去的好处find :该目录下的所有文件将被包括在内。

-P告诉tar使用绝对路径,因此它不会触发警告“拆除领先'/”从成员名称”。 领先“/”由被删除--transform反正。

-cf -告诉tar使用我们稍后会指定压缩包的名称

{} +将使用everyfiles find先前发现

第3步: pigz

pigz -9 -p 4

只要你想使用尽可能多的参数。 在这种情况下-9是压缩级别和-p 4是专用于压缩核的数量。 如果您在重负荷的Web服务器运行这个,你可能不希望使用所有可用的核心。

第4步:存档名称

> myarchive.tar.gz

最后。



文章来源: Utilizing multi core for tar+gzip/bzip compression/decompression