LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 17099|回复: 73

gzip bzip2 lzma xz 7z 讨论(xz 推荐贴)

[复制链接]
发表于 2009-5-21 23:57:51 | 显示全部楼层 |阅读模式
前些天首次看到某个常用的软件包开始使用 .xz 文件格式发布,故有此讨论。
具体软件包名字忘了。coreutils 见第11贴 http://www.linuxsir.cn/bbs/post1989997-11.html

gzip bzip2 太常用,不多言。

lzma utils:
http://tukaani.org/lzma/
http://tukaani.org/lzma/benchmarks A Quick Benchmark: Gzip vs. Bzip2 vs. LZMA

xz utils:
http://tukaani.org/xz/
http://tukaani.org/xz/xz-file-format.txt
5.3. Filters

5.3.1. LZMA2

        LZMA (Lempel-Ziv-Markov chain-Algorithm) is a general-purporse
        compression algorithm with high compression ratio and fast
        decompression. LZMA is based on LZ77 and range coding
        algorithms.

        LZMA2 is an extensions on top of the original LZMA. LZMA2 uses
        LZMA internally, but adds support for flushing the encoder,
        uncompressed chunks, eases stateful decoder implementations,
        and improves support for multithreading. Thus, the plain LZMA
        will not be supported in this file format.
7. References

        LZMA SDK - The original LZMA implementation
        http://7-zip.org/sdk.html

        LZMA Utils - LZMA adapted to POSIX-like systems
        http://tukaani.org/lzma/

        XZ Utils - The next generation of LZMA Utils
        http://tukaani.org/xz/

        [RFC-1952]
        GZIP file format specification version 4.3
        http://www.ietf.org/rfc/rfc1952.txt
          - Notation of byte boxes in section "2.1. Overall conventions"

        [RFC-2119]
        Key words for use in RFCs to Indicate Requirement Levels
        http://www.ietf.org/rfc/rfc2119.txt

        [GNU-tar]
        GNU tar 1.21 manual
        http://www.gnu.org/software/tar/ ... locking-Factor.html
          - Node 9.4.2 "Blocking Factor", paragraph that begins
            "gzip will complain about trailing garbage"
          - Note that this URL points to the latest version of the
            manual, and may some day not contain the note which is in
            1.21. For the exact version of the manual, download GNU
            tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz
7z:
http://www.7-zip.org/


lzma 算法能提供大压缩比早有耳闻,且很多软件包提供 lzma 文件格式的发布。
中文说明 http://zh.wikipedia.org/wiki/LZMA

个人完全是因为懒惰,才一直没给自己的系统添加 lzma 支持,毕竟 gzip bzip2 能满足需要,最多只是浪费些时间、空间。
[color="Silver"]懒人不喜欢 "tar --lzma -cvf xxx.tar.lzma *" 形式的命令。可以使用 tar 的 a 参数,见30帖 http://www.linuxsir.cn/bbs/post1993536-30.html

看到开头提到的有软件包开始使用 .xz 格式发布,决定试一试。
前面给出的资料指出 xz utils 是 lzma utils 的下一代,从版本号变化 可理解为:
给 lzma utils 改名  xz utils,
并给出新的 *.xz 文件格式,
仍支持老的 *.lzma 文件格式,但
*.xz *.lzma 并不兼容
前面给出资料有 gzip bzip2 lzma 比较。


xz utils 到目前还未发布稳定版,beta 测试中。
下面测试使用的是 http://tukaani.org/xz/xz-4.999.8beta.tar.gz,测试资源即此软件包编译后打包的 tar 文件(包括源代码文本及编译产生的二进制文件)。
  1. $ #测试资源
  2. $ ls -gG xz-4.999.8beta.tar
  3. -rw-r--r-- 1 9768960 05-21 21:41 xz-4.999.8beta.tar
  4. $
  5. $ #xz 测试
  6. $ time xz -z -9 xz-4.999.8beta.tar

  7. real    0m14.526s
  8. user    0m14.241s
  9. sys    0m0.204s
  10. $
  11. $ ls -gG xz-4.999.8beta.tar.xz
  12. -rw-r--r--  1 1003400 05-21 21:41 xz-4.999.8beta.tar.xz
  13. $
  14. $ time xz -d xz-4.999.8beta.tar.xz

  15. real    0m0.408s
  16. user    0m0.368s
  17. sys    0m0.024s
  18. $
  19. $ #bzip2 测试
  20. $ time bzip2 -9 xz-4.999.8beta.tar

  21. real    0m6.726s
  22. user    0m6.684s
  23. sys    0m0.028s
  24. $
  25. $ ls -gG xz-4.999.8beta.tar.bz2
  26. -rw-r--r--  1 2049894 05-21 21:41 xz-4.999.8beta.tar.bz2
  27. $
  28. $ time bzip2 -d xz-4.999.8beta.tar.bz2

  29. real    0m1.342s
  30. user    0m1.296s
  31. sys    0m0.044s
  32. $
  33. $ #gzip 测试
  34. $ time gzip -9 xz-4.999.8beta.tar

  35. real    0m5.129s
  36. user    0m5.116s
  37. sys    0m0.008s
  38. $
  39. $ ls -gG xz-4.999.8beta.tar.gz
  40. -rw-r--r-- 1 2691895 05-21 21:41 xz-4.999.8beta.tar.gz
  41. $
  42. $ time gzip -d xz-4.999.8beta.tar.gz

  43. real    0m0.287s
  44. user    0m0.212s
  45. sys    0m0.044s
复制代码
xz utils 与 lzma utils 补充测试 见第24贴 http://www.linuxsir.cn/bbs/post1990794-24.html

测试大体表明:
使用最大压缩率,
压缩时 xz utils 耗时比 bzip2 长一倍,
压缩时 xz utils 耗时是 lzma utils 一半,
压缩时 xz utils 生成文件体积是 bzip2 的一半,
压缩时 xz utils 生成文件体积比 lzma utils 略大,
解压时 xz utils 耗时是 bzip2 的三分之一,
解压时 xz utils 速度比 lzma utils 略快,
解压时 xz utils 耗时仅比 gzip 多一倍。


压缩时 xz utils 使用 *.xz 格式 生成文件 比 *.lzma 格式 略大,
测试样本较小,多次测试结果有出入,无法判断 xz utils 使用 *.xz 与 *.lzma 格式 压缩与解压时间 谁占优势。

到目前为止,lzma utils 的压缩率仍是最大的,xz utils 解压时间占优势。

在不介意压缩时间的环境,lzma utils 稳定版 值得使用。
想得到压缩时间 与 压缩体积 的平衡,xz utils 值得使用。
保持 xz utils 与 lzma utils 最大的兼容性,*.lzma 格式仍是首选。


如果您像偶一样希望使用稳定版,可以等 xz utils 第一个稳定版现身,或使用 lzma utils 的最后一个稳定版先。
另,请跟踪 xz utils 邮件列表 见第18贴 http://www.linuxsir.cn/bbs/post1990575-18.html



7z 相对来说,更像一个瑞士军刀,支持几乎所有压缩文件格式(当前好像不支持 *.xz),并且整合了 unrar,使用混合的许可协议,个人恶之。


tar xz 配合使用 见第16贴 http://www.linuxsir.cn/bbs/post1990115-16.html
file man texinfo 可用补丁 见第15贴 http://www.linuxsir.cn/bbs/post1990109-15.html

通用打包工具图形前端 见第4贴 http://www.linuxsir.cn/bbs/post1989856-4.html
发表于 2009-5-22 00:30:51 | 显示全部楼层
slackware现在已经把tgz(gz)的包换成txz(xz)的包了,包大小从1.9G降到1.4G
看来lzma还是比较平衡的
回复 支持 反对

使用道具 举报

发表于 2009-5-22 05:31:32 | 显示全部楼层
谢谢深空兄探讨这话题,一直对 7z 采用 lzma 算法受惠不少,可惜 Linux 下的 7z 没有 GUI,操作很不便利,未知深空兄对 7z 的 GUI 可有所闻?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-22 12:12:37 | 显示全部楼层
可以使用支持 7z 的 通用 打包工具 图形前端:
file-roller gnome
xarchive gtk+ 十分细小,其使用脚本调用具体的打包工具,易扩展,暂无中文界面
qt kde 应当有类似图形前端

或者 wine 一个 7z 的 win32 版本。

幸好到目前为止,偶接触的唯一一个 7z 格式文件是 syllable OS 的 虚拟机映像,当时把 7z 格式的文件拉下来 接着就开始抓狂,最后还是再拉下来一个 7z 格式的自解压文件 wine 解决。

*nix-like 系统下除了 *.run 好像还没有支持自解压格式的,与 M$ 之间明显的文化差异。
回复 支持 反对

使用道具 举报

发表于 2009-5-22 12:53:27 | 显示全部楼层
我现在是用 wine 跑 win 版,但效果不大好,经常处理一些 tarball 时跳到不知明的路径

改天看看 xarchive,thanks for your hints!
回复 支持 反对

使用道具 举报

发表于 2009-5-22 17:03:14 | 显示全部楼层
squashfs 是作embedded的基本.
尤其是 lzma + squahfs。

压缩率真的很高!!但是CPU解压实在是太慢了..

xz今天刚听说。 内核支持这种解压方式吗?
什么时候内核支持了可以试用下。
回复 支持 反对

使用道具 举报

发表于 2009-5-22 17:19:50 | 显示全部楼层
我已经用了,非常看好xz的高压缩率。:)
回复 支持 反对

使用道具 举报

发表于 2009-5-22 19:09:12 | 显示全部楼层
.xz与.lzma的压缩率差不多啊

PS:2.6.30支持将内核(包括initramfs)用lzma压缩
回复 支持 反对

使用道具 举报

发表于 2009-5-22 19:10:06 | 显示全部楼层
Post by linux_pro;1989946
压缩率真的很高!!但是CPU解压实在是太慢了..
解压速度比bzip2快
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-22 19:57:38 | 显示全部楼层
今天才注意到 xz utils http://tukaani.org/xz/ 上面说稳定版将发布到 公共域。
面向嵌入式 的 xz embedded 已经被放到 公共域。
嘿嘿,够极端。
但其使用的 lzma 算法部分或许应该使用原来的 LGPL,不知 lzma sdk 是不是 xz 作者所有。
Post by linux_pro;1989946
squashfs 是作embedded的基本.
尤其是 lzma + squahfs。

压缩率真的很高!!但是CPU解压实在是太慢了..

xz今天刚听说。 内核支持这种解压方式吗?
什么时候内核支持了可以试用下。

在玩什么板子?
搞这么复杂,硬件一定够强大。

首贴给出资料表明 xz utils 是 lzma utils 继任者,使用的仍是 lzma 算法,给出改进的 .xz 文件格式,并且支持老的 .lzma 文件格式(.xz .lzma 并不兼容)。
Post by youbest;1989954
我已经用了,非常看好xz的高压缩率。:)

偶也想用 xz,但看到 beta 字样有些不放心,万一稳定版文件格式有变动,造成不兼容就不合算了,虽然这是小概率事件。
偶再等等,稳定版应该会在近期发布。
Post by newper;1989981
.xz与.lzma的压缩率差不多啊

PS:2.6.30支持将内核(包括initramfs)用lzma压缩

见前面解释。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表