Linux上并行打包压缩工具

文章目录

Linux上并行打包压缩工具

在 Linux 上,如果需要并行的打包压缩工具以提高多核 CPU 的利用率,可以考虑以下工具:


1. Pigz (Parallel gzip)

  • 用途 :替代 gzip,多线程压缩。

  • 安装 :

    bash 复制代码
    sudo apt install pigz  # Debian/Ubuntu
    sudo yum install pigz  # RHEL/CentOS
  • 用法 :

    bash 复制代码
    tar --use-compress-program=pigz -cf archive.tar.gz dir/  # 打包并并行压缩
    pigz -k file  # 压缩文件(保留原文件)

2. Pbzip2 (Parallel bzip2)

  • 用途 :替代 bzip2,多线程压缩。

  • 安装 :

    bash 复制代码
    sudo apt install pbzip2  # Debian/Ubuntu
  • 用法 :

    bash 复制代码
    tar --use-compress-program=pbzip2 -cf archive.tar.bz2 dir/
    pbzip2 -k file  # 压缩文件(-k 保留原文件)

3. Pixz (Parallel xz)

  • 用途 :替代 xz,支持多线程和索引。

  • 安装 :

    bash 复制代码
    sudo apt install pixz  # Debian/Ubuntu
  • 用法 :

    bash 复制代码
    tar -I pixz -cf archive.tar.xz dir/  # 打包并压缩
    pixz file  # 直接压缩文件(生成 .xz 文件)

4. Zstd (支持多线程)

  • 用途:现代高性能压缩算法,默认支持多线程。

  • 安装 :

    bash 复制代码
    sudo apt install zstd  # Debian/Ubuntu
  • 用法 :

    bash 复制代码
    tar -I 'zstd -T0' -cf archive.tar.zst dir/  # -T0 自动使用所有核心
    zstd -T0 file  # 并行压缩文件

5. GNU Parallel + 传统工具

  • 用途:手动并行化处理多个文件。

  • 示例 (并行压缩多个文件):

    bash 复制代码
    find dir/ -type f | parallel -j $(nproc) gzip {}

6. Fastest Tools (综合建议)

  • 最快压缩 :zstd(平衡速度/压缩率)。
  • 最高压缩率 :pixz(多线程 xz)。
  • 兼容性 :pigz(gzip 替代)。

注意事项:

  • 磁盘 I/O 瓶颈:如果磁盘速度慢,多线程可能无法显著提速。
  • 压缩率/速度权衡 :zstd > pigz > pbzip2 > pixz(从左到右,压缩率提高但速度降低)。
  • 检查 CPU 使用 :用 htop 观察是否所有核心满载。

根据需求选择合适的工具即可!


tar和zstd多线程压缩和解压

在 Linux 中使用 tar 和 zstd 进行多线程压缩和解压可以显著提高速度。以下是具体方法:


1. 多线程压缩(打包+压缩)

bash 复制代码
tar -I 'zstd -T0' -cf 输出文件.tar.zst 要压缩的目录或文件

或:

bash 复制代码
tar --use-compress-program='zstd -T0' -cf 输出文件.tar.zst 要压缩的目录或文件
  • -T0:让 zstd 自动使用所有可用的 CPU 线程。
  • 如果想限制线程数,例如用 4 线程:-T4。

2. 多线程解压

bash 复制代码
tar -I 'zstd -T0' -xf 输入文件.tar.zst

或:

bash 复制代码
tar --use-compress-program='zstd -T0' -xf 输入文件.tar.zst

3. 额外优化选项(可选)

  • 调整压缩级别(1~19,默认 3):

    bash 复制代码
    tar -I 'zstd -T0 -3' -cf output.tar.zst input_dir
    • 级别越高压缩率越好,但速度更慢(-3 是速度和压缩率的平衡点)。
  • 快速压缩(低压缩率,高速度):

    bash 复制代码
    tar -I 'zstd -T0 --fast' -cf output.tar.zst input_dir
  • 解压到指定目录:

    bash 复制代码
    tar -I 'zstd -T0' -xf input.tar.zst -C 目标目录

4. 直接使用 zstd 命令(非 tar 整合)

  • 多线程压缩文件 :

    bash 复制代码
    zstd -T0 文件名
  • 多线程解压文件 :

    bash 复制代码
    zstd -d -T0 文件名.zst

原理说明

  • zstd 原生支持多线程(通过 -T 参数),而 tar 负责文件打包。
  • 使用 -I 或 --use-compress-program 将 zstd 作为压缩程序集成到 tar 流程中。

注意事项

  • 确保系统已安装 zstd 工具(安装命令:sudo apt install zstd 或 yum install zstd)。
  • 解压时无需指定线程数,zstd 会自动检测,但显式声明 -T0 可确保多线程生效。

通过这种方法,你可以充分利用多核 CPU 加速归档和压缩过程。


使用 tar 和 zstd 打包压缩文件

zstd (Zstandard) 是一种现代的快速压缩算法,提供了很好的压缩比和速度平衡。以下是使用 tar 和 zstd 打包压缩文件的方法:

基本用法

打包并压缩目录

bash 复制代码
tar -I 'zstd -19 -T0' -cf archive.tar.zst directory/

或

bash 复制代码
tar --use-compress-program='zstd -19 -T0' -cf archive.tar.zst directory/

解压

bash 复制代码
tar -I 'zstd -d' -xf archive.tar.zst

或

bash 复制代码
tar --use-compress-program='zstd -d' -xf archive.tar.zst

常用选项说明

  • -I 或 --use-compress-program:指定压缩程序
  • -c:创建新归档
  • -x:解压归档
  • -f:指定归档文件名
  • -v:显示详细过程(可选)
  • -T0:使用所有可用CPU线程
  • -19:压缩级别(1-19,19为最高压缩率)

常用压缩级别示例

快速压缩(较低压缩率)

bash 复制代码
tar -I 'zstd -3 -T0' -cf archive.tar.zst directory/

平衡压缩

bash 复制代码
tar -I 'zstd -9 -T0' -cf archive.tar.zst directory/

最佳压缩(最高压缩率)

bash 复制代码
tar -I 'zstd -19 -T0' -cf archive.tar.zst directory/

查看压缩文件内容

不解压查看内容:

bash 复制代码
tar -I 'zstd -d' -tf archive.tar.zst

注意事项

  1. 较新版本的 tar 可能直接支持 zstd:

    bash 复制代码
    tar -caf archive.tar.zst directory/  # -a 自动根据后缀选择压缩方式
  2. zstd 压缩文件通常使用 .zst 或 .zstd 扩展名

  3. 确保系统已安装 zstd:

    bash 复制代码
    sudo apt install zstd    # Debian/Ubuntu
    sudo yum install zstd    # CentOS/RHEL
    sudo brew install zstd   # macOS (Homebrew)

这种方法结合了 tar 的归档能力和 zstd 的高效压缩,特别适合需要快速压缩/解压或处理大文件的场景。

相关推荐
律宏阔1 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔1 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴1 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千2 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei372 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei372 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei372 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW2 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW2 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
yunwei372 小时前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化