xz 与 lzma 压缩
以 CPU 时间换取更小体积的压缩格式(.xz),使用 LZMA2 算法,压缩率通常优于 gzip 与 bzip2。代价是压缩与解压都更吃 CPU 和内存,速度慢。它适合长期封存的归档、带宽受限的离线交付;对需要频繁抽检或快速恢复的数据,压缩比略低但快得多的 zstd 往往更合适。
基本信息
| 适用平台 | Linux/Unix(xz-utils),Windows 与 macOS 有同名工具 |
|---|---|
| 预设 | -0 最快到 -9 最省空间,默认 -6 |
| 多线程 | -T0 用满所有核心;小文件并行收益有限 |
| 相关命令 | unxz 解压、xzcat 直接输出、lzma 系列命令互通 |
典型使用场景
- 长期归档:日志、数据库逻辑导出文件按年封存,省存储成本
- 离线交付:介质容量或带宽受限时,先压缩再传输
- 配合分卷:大归档压缩后用 split 拆分,便于多份介质拷贝
- 节省备份窗口后的搬运时间:先在本地压小再上传对象存储
- 对比工具效率:用 xz -l 与不同预设实测时间与体积的平衡点
常用命令
常用命令
xz -T0 -9 -k archive.tar # 多核 + 最高预设,-k 保留源文件
xz -d archive.tar.xz # 解压
xz -l archive.tar.xz # 查看压缩信息与校验方式
xz -T4 -6 -k bigfile.dump # 指定 4 线程,平衡时间与体积
unxz -k archive.tar.xz # 等价的解压写法
xzcat archive.tar.xz | tar -tf - # 不解压到磁盘,直接查看内容预设与代价
| 预设 | 时间/内存 | 适用场景 |
|---|---|---|
| -0/-1 | 最快,内存占用低 | 临时文件、需要快速解压的数据 |
| -6(默认) | 均衡 | 常规归档,多数场景的默认选择 |
| -9 | 最慢,内存需求高 | 长期封存、介质或带宽紧张 |
| -e | 在所选预设上再压缩一轮 | 对体积敏感且不介意多花时间 |
归档要考虑解压成本:需要频繁抽检的副本可用 zstd,长期封存的副本适合 xz。压缩与解压的内存需求随预设上升,在内存受限的机器上解压大文件可能出现 OOM。
对比压缩效果时用同一份样本实测:tar -cf - 目录 | xz -T0 -6 > out.tar.xz,再换 gzip 与 zstd 各做一次,比较耗时与体积的比值;多数备份场景下 zstd 的时间优势比压缩率更关键。