zstd 是什么
zstd 是开源压缩工具,格式已标准化为 RFC 8878。它的级别从 1 到 19 可调,默认级别 3;支持多线程与长距离匹配,解压速度很快,因此在备份、日志归档与镜像分发场景中被广泛采用。相比 xz,它在同等耗时下通常能更快完成压缩与解压。
基本信息
| 级别 | 1 更快到 19 更省空间,默认 3 |
|---|---|
| 线程 | -T0 使用全部核心,-Tn 指定线程数 |
| 长距离匹配 | --long 适合含大量重复模式的大文件 |
| 解压速度 | 较快,适合恢复时限紧张的场景 |
| 格式 | RFC 8878,扩展名常用 .zst |
常用命令
常用命令
zstd -T0 -10 /backup/data.tar -o /backup/data.tar.zst # 多线程压缩
zstd -d /backup/data.tar.zst -o /backup/data.tar # 解压
zstd -t /backup/data.tar.zst # 只校验不落盘
tar --zstd -cf /backup/data.tar.zst /data # 打包压缩一步完成
# 旧版 tar 不支持时显式指定压缩程序
tar -I 'zstd -T0 -10' -cf /backup/data.tar.zst /data级别与场景
| 级别 | 速度与体积 | 适用场景 |
|---|---|---|
| 1 到 3 | 最快,体积略大 | 窗口紧张、需要快速出包 |
| 8 到 12 | 速度与压缩率均衡 | 日常备份的常用区间 |
| 15 到 19 | 慢,体积最小 | 长归档与带宽昂贵的异地传输 |
使用要点
- 先用小样本实测:不同数据类型的压缩比差异很大,级别要按实测结果选
- 高压缩级别的内存占用明显上升,内存紧张的备份主机上要控制级别与并发
- 多线程压缩在核数充足时收益明显,核数很少时开线程反而增加调度开销
- 与 tar 组合时注意版本兼容,旧版 tar 需要显式指定压缩程序
- 归档与传输链路越长,解压速度带来的收益越明显,这一点比压缩比更值得权衡
zstd 的速度优势在『打包加异地传输』的链路中体现明显:更快的压缩意味着更早释放备份窗口,更快的解压意味着更短的一次恢复尝试。
典型调优做法
- 先做基线测量:用同一份数据分别跑级别 3、10、19,比较体积与耗时再定参数
- 核对内存水位:高压缩级别在大文件上内存需求上升,可通过限制并发控制峰值
- 把压缩放在数据流上游:边读边压能省去中间大文件,降低对临时空间的依赖
- 归档保留原始校验和:压缩产物损坏通常整包不可用,校验要在压缩后生成