如何让 7-Zip 用上 Zstandard?7-Zip-Zstandard 安装配置与算法选型全解
【免费下载链接】7-Zip-zstd7-Zip with support for Brotli, Fast-LZMA2, Lizard, LZ4, LZ5 and Zstandard项目地址: https://gitcode.com/gh_mirrors/7z/7-Zip-zstd
"打包发布"这件事,你一定经历过这样的时刻:几百 MB 的产物目录,7z 的 LZMA2 单线程压了二十分钟,CI 流水线卡在这一步,硬盘风扇转得像是要起飞;换成 LZ4 倒是快了,可压缩率掉得让人心疼。速度与压缩比之间的这道二选一,传统 7-Zip 一直逼你站队。7-Zip-Zstandard(简称 7-Zip ZS)把这道题改成了多选题:它在经典 7-Zip 的外壳里,内置 Zstandard、Brotli、LZ4、LZ5、Lizard 与 Fast-LZMA2 六种现代压缩算法,让你按场景挑引擎,而不是被引擎绑架。
先用三个问题定位:它解决什么、强在哪、边界在哪
它解决了什么?主流的 7-Zip 只带 LZMA/LZMA2 这类老牌算法,而 Facebook 的 Zstandard、Google 的 Brotli 这些"又快又小"的新算法,官方 7-Zip 至今没有合并进去——社区提过合并请求,被官方婉拒。7-Zip ZS 正是补上这个缺口:同样的 7z 容器、同样的右键菜单和命令行语法,只是多了一批现代算法可以调用。
它与同类方案的关键差异在哪?它不重新发明轮子。Zstandard v1.5.7、Brotli v1.2.0、LZ4 v1.10.0 等算法的 C 源码直接内嵌在仓库的C/zstd/、C/brotli/目录下,由作者 Tino Reichardt 统一维护整合,多线程支持来自独立的 zstdmt 库。换句话说,你拿到的是官方 7-Zip 26.02 的稳定内核,加上-m0=zstd、-m0=lz4这类与原有语法完全一致的换引擎开关。
它的边界在哪?以插件形式接入时,只能创建.7z容器,不能直接生成.zst、.lz4这类独立文件(完整版安装则没有此限制);压缩 exe/dll 时需要显式改用-m0=bcj而不是默认的 bcj2 过滤器。另外 RAR 压缩依旧不可用——那是 unRAR 许可证画的红线,所有 7-Zip 系工具都一样。
五分钟上手:安装、验证与编译
Windows 用户有两条路,按你的现状选一条:
- 已有官方 7-Zip:下载
Codecs.7z,把zstd-x64.dll等六个 DLL 按系统位数放进C:\Program Files\7-Zip\Codecs\(32 位对应C:\Program Files (x86)\7-Zip\Codecs\),重启 7-Zip 即可。它不动你的 GUI 和右键菜单,纯粹是插件。 - 想一步到位:运行完整安装包,会一并带上增强版文件管理器与资源管理器右键菜单,右键"添加到 xx.7z"会沿用上一次压缩对话框的全部参数。
装完用一条命令验证:7z.exe i。输出里Codecs:一栏应该能看到ZSTD、BROTLI、LZ4、LZ5、LIZARD、FLZMA2六行,外加一串新增哈希算法(BLAKE3、XXH64 等)。
Linux/macOS 用户直接编译独立二进制7zz:
git clone https://gitcode.com/gh_mirrors/7z/7-Zip-zstd cd 7-Zip-zstd/CPP/7zip/Bundles/Alone2 make -j -f ../../cmpl_gcc.mak # 无汇编版,产物 7zz make -j -f ../../cmpl_gcc_x64.mak # x86-64 优化版,需先装 asmc 汇编器常用配置:一个参数换一个引擎
压缩参数全部走-m0=指定主算法、-mx指定级别,其余语法和 7-Zip 完全一致:
7z a app.7z -m0=zstd -mx5 # 日常平衡:Zstandard 级别 5 7z a fast.7z -m0=lz4 -mx1 # 要速度:LZ4 级别 1 7z a small.7z -m0=brotli -mx9 # 要体积:Brotli 级别 9 7z a tiny.7z -m0=flzma2 -mx9 # 高压缩比、低内存:Fast-LZMA2注意各算法级别上限不同:Zstandard 是 1–22,Brotli 是 0–11,LZ4 是 1–12,LZ5 是 1–15,Lizard 是 10–49(分段含义不同),Fast-LZMA2 是 1–9。级别超界会直接报错,别把其他工具的习惯数值照搬过来。多线程用-mmt:-mmt=on自动按核心数分配,-mmt=8手动指定 8 线程。
进阶技巧:管道流与 BCJ 预处理
管道是它最实用的隐藏技能——不解包就能查看 zstd 压缩的 tar 内容:
7z x -so test.tar.zst | 7z l -si -ttar压缩可执行文件时,-mx1以上会自动启用 BCJ 预处理器(把 x86 跳转地址改写成相对偏移,exe/dll 的压缩率显著提升)。完整版开箱即用;插件模式则必须显式写成-m0=bcj -m1=zstd -mx1这种双链形式,因为插件环境里没有 bcj2 这个多流过滤器。
算法对照表:六种引擎的取舍准则
以下数据取自仓库 README 的官方描述,可作为选型依据:
| 算法 | 级别范围 | 速度画像 | 压缩比 | 适合场景 |
|---|---|---|---|---|
| Zstandard | 1–22 | 实时压缩,解压极快,速度/压缩比可宽范围调节 | 中上 | 通用归档、网络传输 |
| Brotli | 0–11 | 与 deflate 速度相当 | 更高,更密 | 静态资源、长期存储 |
| LZ4 | 1–12 | 单核压缩 400 MB/s,解压可达数 GB/s | 低 | 实时备份、游戏资源 |
| LZ5 | 1–15 | 比 LZ4 慢 | 比 LZ4 好 | 已被 Lizard 取代 |
| Lizard | 10–49 | 解压 1000 MB/s 以上,10 级段比 LZ4 快约 10% | 中 | 想"快且不小"的平衡 |
| Fast-LZMA2 | 1–9 | 比标准 LZMA2 快 20–100%(级别 5 以上) | 最高(略低于 LZMA2) | 高压缩比且内存受限 |
一句话判断准则:解压速度优先选 LZ4;压缩比优先选 Fast-LZMA2 或 Brotli;两头都要、还想要随时可调,选 Zstandard;内存紧张却要高压缩比,选 Fast-LZMA2——它每线程的附加内存比标准 LZMA2 少得多。
实战:让 CI 打包从半小时缩到几分钟
回到开头的发布场景。你的流水线每天要把含二进制和资源的产物目录打成 7z,之前 LZMA2 单线程要压二十多分钟。换成 Zstandard 多线程,一条命令解决:
#!/bin/bash # 产物打包:Zstandard 级别 7 + 自动多线程 + 保留时间戳 7z a release-$(date +%Y%m%d).7z \ -m0=zstd -mx7 -mmt=on -mtc=on \ dist/体感变化是质变的:压缩耗时从几十分钟级降到分钟级(实际取决于核心数与磁盘 IO),体积只比 LZMA2 略大一点。如果产物里 exe/dll 占大头,把-mx7提到-mx9,BCJ 预处理会让可执行文件再小一截。解压端也没有额外负担——7z 容器格式与官方完全一致,接收方装同样的插件或完整版即可解开。
新手最容易踩的六个坑
1. 杀毒软件报毒?大概率误报。发布版由 GitHub Actions 在微软数据中心即时构建,可先对比 SHA256 校验和自证;官方维护了一份误报清单(issue #451),处理方式是向杀毒厂商申诉。
2. 插件模式压 exe 报错?插件版没有 bcj2 过滤器,压二进制必须写-m0=bcj -m1=zstd -mxN双链形式。
3. 插件版不能生成 .zst 独立文件?对,插件只覆盖.7z容器内的编解码。要直接产出.zst/.lz4文件,请用完整版或7zz。
4.-mx22报参数无效?级别上限因算法而异(见对照表)。混用前先查表,Zstandard 的 22 在 Brotli 那儿是 11。
5. 解压别人的 .zst 提示格式未知?先跑7z i确认 DLL 被正确加载(Libs:一栏应列出Codecs\zstd-x64.dll),并核对 DLL 位数是否与 7-Zip 安装一致。
6. Linux 编译后性能一般?cmpl_gcc.mak是无汇编版,能编译但发挥不出全部性能;想要最快的 x86-64 二进制,先装 Asmc 汇编器再走cmpl_gcc_x64.mak。仓库DOC/目录下的7zFormat.txt、Methods.txt以及C/、CPP/源码都是排查问题的第一手资料。
下一步:从验证到改造你的流程
7-Zip-Zstandard 的价值一句话讲完:它把 7-Zip 的稳定容器,和现代压缩算法的速度与压缩比,装进了同一个二进制。它适合三类人——被打包时间卡脖子的 CI 维护者、追求压缩比又抠内存的运维、以及想用一套命令在多平台压所有格式的开发者。
接下来建议你按这个顺序行动:
- 按"五分钟上手"装好,用
7z i验证六个算法全部就位; - 拿你自己的数据跑一遍对照表(
-m0=换算法、-mx换级别); - 把实战脚本改造成你的备份或发布流程;
- 遇到问题先查仓库 README 与
DOC/文档,再决定是否提交 issue 或贡献代码。
算法的账,跑一次自己的数据最清楚——现在就去试。
【免费下载链接】7-Zip-zstd7-Zip with support for Brotli, Fast-LZMA2, Lizard, LZ4, LZ5 and Zstandard项目地址: https://gitcode.com/gh_mirrors/7z/7-Zip-zstd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考