越来越多的tar
档案馆使用xz
基于LZMA2 的格式进行压缩,而不是传统的bzip2(bz2)
压缩。实际上,kernel.org在2013年12月27日发布了最新的“ 再见bzip2 ” 公告,表示从那时起内核资源将以tar.gz和tar.xz格式发布-并在网站的主页上发布直接提供的是tar.xz
。
有什么具体原因可以解释为什么会发生这种情况,以及gzip
在这种情况下有什么意义?
越来越多的tar
档案馆使用xz
基于LZMA2 的格式进行压缩,而不是传统的bzip2(bz2)
压缩。实际上,kernel.org在2013年12月27日发布了最新的“ 再见bzip2 ” 公告,表示从那时起内核资源将以tar.gz和tar.xz格式发布-并在网站的主页上发布直接提供的是tar.xz
。
有什么具体原因可以解释为什么会发生这种情况,以及gzip
在这种情况下有什么意义?
Answers:
为了通过Internet分发档案,通常优先考虑以下事项:
压缩内存和CPU要求不是很重要,因为您可以为此使用大型快速计算机,而只需执行一次。
与bzip2相比,xz的压缩率更高,解压缩时间更短(更好)。但是,在通常使用的压缩设置下,它需要更多的内存来解压缩[1],并且分布范围较小。Gzip使用的内存少于两个。
因此,发布了gzip和xz格式的档案,您可以选择:
实际的因素组合并没有使您选择bzip2。因此,它正在逐步淘汰。
我在博客文章中查看了压缩比较。我没有尝试复制结果,我怀疑其中的一些变化(大多数情况是最新的,我希望xz
它有所改善。)
(在某些特定情况下,良好的bzip2实现可能比xz更可取:bzip2可以压缩比0z更好的具有很多零和基因组DNA序列的文件。新版本的xz现在具有(可选)块模式,可以进行数据恢复在破坏和并行压缩以及[理论上]解压缩之后。以前,只有bzip2提供了这些。[2]但是这些都与内核分发无关。
1:在档案大小中,xz -3
约为bzip -9
。然后,xz使用较少的内存进行解压缩。但是xz -9
(例如,用于Linux内核tarballs)使用的内容远远超过bzip -9
。(甚至xz -0
还不止需要gzip -9
)。
首先,这个问题与不直接相关tar
。Tar只会创建一个未压缩的存档,随后将应用压缩。
与LZMA2和bzip2相比,已知Gzip相对较快。如果速度很重要,那么gzip
(特别是多线程实现pigz
)通常是压缩速度和压缩率之间的一个很好的折衷方案。尽管有其他方法可以解决速度问题(例如LZ4)。
但是,如果需要高压缩比,则LZMA2 bzip2
几乎在所有方面都表现出色。压缩速度通常较慢,但以更快的速度解压缩并以更高的内存使用为代价提供了更好的压缩率。
bzip2
除了向后兼容以外,没有太多理由使用它了。此外,LZMA2在设计时就考虑到了多线程,并且默认情况下,许多实现都使用多核CPU(不幸的是,xz
在Linux上还没有这样做)。这是有道理的,因为时钟速度不会再增加,但内核数会增加。
有多线程bzip2
实现(例如pbzip
),但是默认情况下通常不安装它们。还要注意的是,与LZMA2相比,多线程bzip2
仅在压缩时才真正受益,而如果文件是使用单线程压缩的,则解压缩将使用单线程bzip2
。bzip2
如果文件是使用并行bzip2
版本压缩的,则并行变体只能利用多核CPU ,而通常情况并非如此。
z
选择。
xz
默认是多线程的,因此pixz
将来不需要安装。在某些平台上,xz
已经支持线程。然而,bzip2
由于该格式并非在设计时就考虑到了多线程,因此不太可能使用多线程。此外,pbzip2
只有在文件已被压缩pbzip2
的情况下才加速解压缩,而通常情况并非如此。