xz 与 lzma 压缩

以 CPU 时间换取更小体积的压缩格式(.xz),支持多线程与多档预设;适合长期归档与带宽受限的离线交付。

备份与容灾速查数据更新于 2026-10-13

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 的时间优势比压缩率更关键。

易错点

  • 对大文件直接用 -9:内存与时间消耗剧增,上线前先用小样本实测时间与内存
  • 不同实现(第三方工具内置的 xz)生成的文件可能互不兼容:归档时记录工具与版本
  • 压缩后不保留校验信息:解压报错时无法定位是传输损坏还是原文件问题
  • 把归档格式当备份策略:压缩不解决保留、版本与恢复验证问题

数据来源与参考

  • man 1 xz(XZ Utils 手册)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌