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 中使用 tarzstd 进行多线程压缩和解压可以显著提高速度。以下是具体方法:


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-programzstd 作为压缩程序集成到 tar 流程中。

注意事项

  • 确保系统已安装 zstd 工具(安装命令:sudo apt install zstdyum 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 的高效压缩,特别适合需要快速压缩/解压或处理大文件的场景。

相关推荐
Doro再努力15 分钟前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene19 分钟前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.27 分钟前
02-本地部署Ollama、Python
linux·运维·服务器
醇氧36 分钟前
【linux】查看发行版信息
linux·运维·服务器
No8g攻城狮1 小时前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
XiaoFan0122 小时前
免密批量抓取日志并集中输出
java·linux·服务器
souyuanzhanvip2 小时前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器
HalvmånEver3 小时前
Linux:线程互斥
java·linux·运维
番茄灭世神3 小时前
Linux应用编程介绍
linux·嵌入式
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习