越来越多的tar存档使用xz基于 LZMA2的格式进行压缩,而不是传统的bzip2(bz2)压缩。事实上,kernel.org于2013 年 12 月 27日晚发布了“再见 bzip2 ”公告,表明内核源代码将从此时起以 tar.gz 和 tar.xz 格式发布 - 并在网站主页上发布直接提供的是在tar.xz.
是否有任何具体原因可以解释为什么会发生这种情况以及gzip在这种情况下的相关性是什么?
der*_*ert 217
对于通过 Internet 分发档案,以下事项通常是优先事项:
压缩内存和 CPU 要求不是很重要,因为您可以使用大型快速机器来实现,而且您只需要做一次。
与 bzip2 相比,xz 具有更好的压缩率和更低(更好)的解压时间。然而,在通常使用的压缩设置下,它需要更多的内存来解压缩[1],并且不太普遍。Gzip 使用的内存比两者都少。
因此,同时发布了 gzip 和 xz 格式的档案,允许您选择:
没有真正的因素组合可以让您选择 bzip2。所以它被逐步淘汰。
我在博客文章中查看了压缩比较。我没有试图复制结果,我怀疑其中一些已经改变了(大多数情况下,我预计xz已经有所改进,因为它是最新的。)
(在某些特定情况下,良好的 bzip2 实现可能比 xz 更可取:bzip2 可以比 xz 更好地压缩包含大量零和基因组 DNA 序列的文件。较新版本的 xz 现在具有(可选)块模式,允许数据恢复在损坏点和并行压缩以及 [理论上] 解压缩之后。以前,只有 bzip2 提供这些。[2]然而,这些都与内核分发无关)
1:在存档大小中,xz -3约为bzip -9. 然后 xz 使用更少的内存来解压缩。但是xz -9(例如,用于 Linux 内核 tarball)使用的不仅仅是bzip -9. (甚至xz -0需要更多gzip -9)。
2:F21 系统范围更改:lbzip2 作为默认的 bzip2 实现
Mar*_*rco 47
首先,这个问题与tar. Tar 只是创建一个未压缩的存档,然后在稍后应用压缩。
众所周知,与 LZMA2 和 bzip2 相比,Gzip 的速度相对较快。如果速度很重要,gzip(尤其是多线程实现pigz)通常是压缩速度和压缩比之间的良好折衷。尽管如果速度是一个问题,还有其他选择(例如 LZ4)。
但是,如果需要高压缩比,LZMA2bzip2几乎在每个方面都可以胜任。压缩速度通常较慢,但它解压得更快,并以更高的内存使用为代价提供更好的压缩率。
bzip2除了向后兼容之外,没有太多理由再使用了。此外,LZMA2 在设计时考虑了多线程,并且默认情况下许多实现使用多核 CPU(不幸的是,xz在 Linux 上还没有这样做)。这是有道理的,因为时钟速度不会再增加,但内核数量会增加。
有多线程bzip2实现(例如pbzip),但默认情况下通常不会安装它们。另请注意,与 LZMA2 相比,如果文件是使用单线程压缩的,则多线程bzip2仅在压缩时才真正得到回报,而解压缩使用单线程bzip2。bzip2如果文件是使用并行bzip2版本压缩的,则并行变体只能利用多核 CPU ,但通常情况并非如此。
小智 21
LZMA2 是一个块压缩系统,而 gzip 不是。这意味着 LZMA2 适合多线程。此外,如果存档中发生损坏,您通常可以使用 LZMA2 从后续块中恢复数据,但您不能使用 gzip 执行此操作。实际上,您会在损坏的块之后使用 gzip 丢失整个存档。使用 LZMA2 存档,您只会丢失受损坏块影响的文件。这在具有多个文件的较大档案中可能很重要。