我通常使用压缩tar zcvf
和使用解tar zxvf
(使用gzip由于习惯)。
我最近得到了超线程四核CPU,所以我有8个逻辑核心,我注意到许多核心是压缩/解压缩过程中使用。
有什么办法,我可以利用未使用的内核,使其更快?
我通常使用压缩tar zcvf
和使用解tar zxvf
(使用gzip由于习惯)。
我最近得到了超线程四核CPU,所以我有8个逻辑核心,我注意到许多核心是压缩/解压缩过程中使用。
有什么办法,我可以利用未使用的内核,使其更快?
您可以使用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
您还可以使用tar标志“ - 使用 - 压缩程序=”告诉焦油使用什么压缩程序。
例如使用:
tar -c --use-compress-program=pigz -f tar.file dir_to_zip
没有为选项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压缩,你需要像下面这样一个小的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支持。 如果运行的版本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
您可以使用快捷-I
焦油的--use-compress-program
开关,并调用pbzip2
对多核心的bzip2压缩:
tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 DIRECTORY_TO_COMPRESS/
如果你想有文件名和压缩选项更多的灵活性,你可以使用:
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
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
此命令会找你要归档的文件,在这种情况下/my/path/*.sql
和/my/path/*.log
。 添加尽可能多的-o -name "pattern"
,只要你想。
-exec
将使用的结果执行下一个命令find
: tar
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
是一个简单的字符串替换参数。 所以压缩包的根变得解压时的当前目录将剥离从存档的文件的路径。 请注意,您不能使用-C
选项更改目录中,你将失去的好处find
:该目录下的所有文件将被包括在内。
-P
告诉tar
使用绝对路径,因此它不会触发警告“拆除领先'/”从成员名称”。 领先“/”由被删除--transform
反正。
-cf -
告诉tar
使用我们稍后会指定压缩包的名称
{} +
将使用everyfiles find
先前发现
pigz
pigz -9 -p 4
只要你想使用尽可能多的参数。 在这种情况下-9
是压缩级别和-p 4
是专用于压缩核的数量。 如果您在重负荷的Web服务器运行这个,你可能不希望使用所有可用的核心。
> myarchive.tar.gz
最后。