当前位置: 首页 > 知识库问答 >
问题:

利用多核进行tar gzip/bzip压缩/解压缩

越霖
2023-03-14

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

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

有什么方法可以利用未使用的内核来加快速度吗?

共有3个答案

沈华晖
2023-03-14

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

Archiver必须接受-d。如果替换实用程序没有此参数和/或需要指定其他参数,则使用管道(如有必要,添加参数):

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

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

对于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 Utils 5.2.0或更高版本,则可以通过环境变量XZ_DEFAULTS(例如,XZ_DEFAULTS=“-t0”)将-T-threads设置为适当的值,从而利用多个内核进行压缩。

这是5.1.0alpha版本的man片段:

多线程压缩和解压缩还没有实现,所以这个选项暂时没有效果。

但是,这不适用于未启用线程压缩的文件的解压缩。来自man的版本5.2.2:

线程解压缩尚未实现。它只适用于包含多个块且块标题中包含大小信息的文件。在多线程模式下压缩的所有文件都满足此条件,但在单线程模式下压缩的文件即使使用--block size=size也不满足此条件。

如果从源代码构建tar,那么可以使用参数重新编译

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

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

$ 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
关冠宇
2023-03-14

可以使用pigz代替gzip,gzip在多核上进行gzip压缩。不使用-z选项,而是通过pigz进行管道传输:

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

默认情况下,pigz使用可用内核的数量,如果无法查询,则使用8个。你可以用-pn来要求更多,例如-p32。pigz与gzip有相同的选项,因此您可以使用-9请求更好的压缩。例如。

tar cf - paths-to-archive | pigz -9 -p 32 > archive.tar.gz
袁英豪
2023-03-14

您还可以使用tar标志“-use compress program=”告诉tar要使用什么压缩程序

例如使用:

tar -c --use-compress-program=pigz -f tar.file dir_to_zip 
 类似资料:
  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭

  • 本文向大家介绍C#文件流进行压缩和解压缩的方法,包括了C#文件流进行压缩和解压缩的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#文件流进行压缩和解压缩的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 常用压缩包—解压—令整理 Linux 后缀为 .war 格式的文件(一般用在部署 Tomcat 项目的时候) 命令:unzip -oq XXXXXX.war -d ROOT 如果没有 ROOT 目录会自动创建 ROOT 目录。 Linux 后缀为 .tar.gz 格式的文件-解压 命令:tar zxvf XXXXXX.tar.gz Linux 后缀为 .bz2 格式的文件-解压 命令:bzip2

  • 主要内容:1. 压缩和解压缩介绍,2. 启用压缩,3. 启用解压缩,4. 发送压缩文件本节介绍如何配置响应的压缩或解压缩以及发送压缩文件。 在这篇文章中,涉及内容如下 - 压缩和解压缩介绍 启用压缩 启用解压缩 发送压缩文件 1. 压缩和解压缩介绍 压缩响应通常会显着减少传输数据的大小。 然而,由于压缩在运行时发生,它还可以增加相当大的处理开销,这会对性能产生负面影响 在向客户端发送响应之前,NGINX会执行压缩,但不会“压缩”已压缩的响应(例如,由代理的服务器)。 2. 启用压缩

  • 问题内容: 我想使用Java代码将文件压缩为zip,rar和7z格式。我也想在指定位置解压缩这些文件。谁能告诉我如何在Java中使用7-zip压缩和解压缩文件? 问题答案: 我用过:sevenzipjbinding.jar sevenzipjbinding-Allplatforms.jar 我现在可以使用这些jar解压缩文件。 尝试使用此链接进行解压缩:http : //sourceforge.n