当前位置: 首页 > news >正文

Linux 下使用 tar 与 pigz 进行多核压缩

📘 Linux 下使用 tarpigz 进行多核压缩

一、概述

在 Linux 系统中,tar 是最常用的归档(打包)工具之一,用于将多个文件或目录合并为一个文件。
gzip 是常用的压缩工具,用于对文件内容进行压缩。

targzip 常搭配使用形成命令:

tar -czf backup.tar.gz /data

但这种方式的一个明显限制是:

⚠️ targzip 均为单线程程序,只能使用一个 CPU 核心。

当系统 CPU 较多、文件较大时(如 10GB 以上),这种单线程压缩会成为性能瓶颈。

为解决这一问题,推荐使用 pigz(Parallel Implementation of GZip)
它是 gzip 的多线程版本,可以充分利用多核 CPU 进行压缩。


二、tarpigz 的关系与工作方式

tarpigz 实际是两个独立程序:

程序 功能 是否多线程
tar 负责打包(将多个文件合并为一个数据流) ❌ 单线程
pigz 负责压缩(将数据流压缩成 gzip 格式) ✅ 多线程

1️⃣ tar 的职责

tar 的任务是读取文件系统中的数据,然后输出一个未压缩的数据流
这个过程几乎不涉及复杂计算,主要是 I/O 操作。

示例:

tar -cvf - /data

这条命令不会生成文件,而是将归档内容输出到标准输出(stdout)。
- 表示“写到标准输出”。


2️⃣ pigz 的职责

pigz 从标准输入(stdin)接收数据流,并对其进行并行压缩。

示例:

pigz -p 4 > backup.tar.gz

-p 4 表示使用 4 个线程进行压缩。
它会根据 CPU 核心数量自动划分压缩块并并行计算。


3️⃣ 二者的组合:流式管道压缩

通过 Linux 管道(|)机制,可以让 tarpigz 同时工作:

tar -cvf - /data | pigz -p 4 > /backup/backup.tar.gz

执行时的并行流程如下:

┌────────────────────────┐       ┌────────────────────┐
│ tar: 读取文件并打包流式输出 │ ---> │ pigz: 多线程压缩数据流 │
└────────────────────────┘       └────────────────────┘(单线程)                          (多线程)

运行结果:

  • tar 依然是单线程;
  • pigz 使用 4 个 CPU 核;
  • 管道机制保证两者边读边压缩、无须中间文件;
  • 整体 CPU 利用率高、内存占用低、压缩速度显著提升。

三、为什么 tar 只能使用一个 CPU?

tar 是一种典型的“流式归档”工具,它顺序地遍历文件系统、读取文件并写入输出流。
这种顺序处理模式的核心特点是:

  • 每次只处理一个文件;
  • 不进行复杂运算;
  • 不具备数据块划分与并发处理机制;
  • 并发读取文件还可能破坏归档的顺序一致性。

因此:

🧠 结论:tar 的核心瓶颈不是 CPU,而是磁盘 I/O。

即使机器有 8 核、16 核,tar 自身仍然只使用 1 个核心。


四、如何使用多核进行压缩

✅ 方案一:tar + pigz(推荐)

tar -cvf - /data | pigz -p 4 > /backup/backup.tar.gz

说明:

参数 含义
-cvf - 打包并输出到标准输出
pigz -p 4 使用 4 个线程压缩
> 将压缩后的数据写入目标文件

性能特征:

  • tar 占用约 1 核;
  • pigz 占用 4 核;
  • 总共利用 5 核;
  • 压缩速度通常是单线程 gzip 的 3~5 倍。

✅ 方案二:tar 内置调用 pigz(更简洁)

许多 Linux 发行版的 tar 已支持直接使用 pigz 替代 gzip

tar --use-compress-program="pigz -p 4" -cvf /backup/backup.tar.gz /data

等价于:

tar -cvf - /data | pigz -p 4 > /backup/backup.tar.gz

优点:

  • 命令更简洁;
  • 归档和压缩由 tar 管理;
  • 同样支持多核。

✅ 方案三:解压时多核解压

同样,解压时也可以利用多核:

pigz -dc -p 4 /backup/backup.tar.gz | tar -xvf -

或者更简洁的形式:

tar --use-compress-program="pigz -dp 4" -xvf /backup/backup.tar.gz

五、性能对比示例(8 核 CPU)

工具 压缩方式 CPU使用 压缩时间(18GB文件)
`tar gzip` 单线程 100% of 1 CPU
`tar pigz -p 4` 多线程(4核) ~400%
`tar pigz -p 8` 多线程(8核) ~800%

(实际速度取决于磁盘 I/O、文件类型、压缩比等因素)


六、在生产环境中的最佳实践

场景 推荐命令 说明
4 核机器 `tar -cvf - /data pigz -p 3 > /backup/data.tar.gz`
8 核机器 `tar -cvf - /data pigz -p 6 > /backup/data.tar.gz`
自动检测 CPU pigz -p $(($(nproc)-1)) 自动使用除 1 外的全部 CPU

七、总结

项目 tar gzip pigz
功能 打包 压缩 多线程压缩
是否多线程
可替代 gzip
推荐用途 打包文件 兼容老系统压缩 现代多核环境压缩
与 tar 配合方式 输出到管道 tar -czf `tar

八、实用命令汇总

任务 命令
多核压缩目录 `tar -cvf - /data
多核解压文件 `pigz -dc -p 4 /backup/data.tar.gz
简写压缩命令 tar --use-compress-program="pigz -p 4" -cvf data.tar.gz /data
简写解压命令 tar --use-compress-program="pigz -dp 4" -xvf data.tar.gz

九、结语

  • tar 的瓶颈是 I/O,而非 CPU;
  • pigz 能显著提高压缩性能;
  • tar + pigz 的组合是大文件备份的业界最佳实践;
  • 合理控制线程数量(如 -p 3-p $(nproc)-1)可以在性能与系统稳定性间取得最佳平衡。
http://www.hskmm.com/?act=detail&tid=40399

相关文章:

  • CentOS7 查看开机启动项和程序服务
  • 2025年pvc线槽厂家权威推荐榜单:线槽盖板/不锈钢线槽/塑料线槽板源头厂家精选
  • 微算法科技(NASDAQ MLGO)研发基于AI的动态权重学习模型,开启区块链账户关联分析智能新时代
  • 25 1.28
  • 2025年10月敏感肌产品推荐榜单:权威评测与科学选购指南
  • 2025年10月敏感肌产品推荐榜:五款温和美白产品权威评测与深度对比
  • MCP - 优化 Agent 调用 MCP tools提示词(九)
  • 2025年10月祛斑产品推荐:专业评测榜单及用户真实反馈汇总
  • hutool工具类post请求
  • 今年口碑好的新加坡留学品牌
  • 国产项目管理工具崛起:Gitee如何以本土化优势赋能中国企业数字化转型
  • 2025年10月洗碗机品牌对比榜:海信零菌技术深度评测
  • 2025年10月全屋智能家居品牌推荐:盈趣领衔五强对比评测榜
  • 2025年10月离婚房产律师排行:权威榜单与实测评价
  • 2025年10月美白精华产品推荐评测:从成分到肤感深度评价
  • 2025年10月工装装修公司榜单:资质与案例双维度排名
  • 2025年10月儿童面霜品牌推荐:口碑榜全维度解析
  • 2025年10月劳保鞋厂家榜单:五家对比评价与选购排行
  • python 界面开发
  • 三金.紫题题解
  • Java 条件结构
  • conda环境离线迁移
  • 【CI130x 离在线】语音芯片如何判断TTS音频播放完毕?
  • 从 “报表堆里找问题” 到 “实时预警止损”:MyEMS 如何终结能源管理低效?
  • 「Note」计算几何
  • C++语法—类的声明和定义
  • 施工用电隐患 “无形侦探”!思通数科 AI 卫士自动排查用电违规
  • 四场比赛(三)
  • 使用DAST发现Android应用API中的AWS凭证泄露漏洞
  • 从 “短期达标” 到 “长期优化”:MyEMS 如何帮企业建立可持续的能源管理体系?