tar
存档使用基于LZMA2的xz
格式进行压缩,而不是使用传统的bzip2(bz2)
压缩。实际上,kernel.org在2013年12月27日发布了“ Good-bye bzip2”最新公告,表示从那时起内核资源将以tar.gz和tar.xz格式发布-并在网站的主页上发布在tar.xz
中直接提供了什么。是否有任何特定的原因来解释为什么会发生这种情况,以及在这种情况下
gzip
的意义是什么?#1 楼
对于通过Internet分发档案,通常需要优先考虑以下事项:压缩率(即压缩器生成数据的大小);压缩时间(CPU要求) );解压缩内存要求;和
兼容性(解压缩程序的普及程度)
压缩内存和CPU的要求不是很重要,因为您可以为此使用大型快速计算机,只需执行一次。
与bzip2相比,xz的压缩率更高,解压缩时间更短(更好)。但是,在通常使用的压缩设置下,它需要更多的内存来进行解压缩[1],并且普及程度较低。 Gzip占用的内存少于任何一个。
因此,gzip和xz格式的存档都已发布,允许您选择:
需要在具有以下功能的计算机上解压缩内存非常有限(<32 MB):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实现
#2 楼
首先,这个问题与tar
不直接相关。 Tar只会创建一个未压缩的存档,然后再进行压缩。与LZMA2和bzip2相比,Gzip相对较快。如果速度很重要,则
gzip
(尤其是多线程实现pigz
)通常是压缩速度和压缩率之间的良好折衷。尽管有其他方法可以解决速度问题(例如LZ4)。但是,如果需要高压缩比,LZMA2几乎在所有方面都胜过
bzip2
。压缩速度通常较慢,但是以更高的内存使用为代价,它的解压缩速度更快,并且压缩率更高。除了向后兼容以外,没有太多理由再使用
bzip2
。此外,LZMA2在设计时就考虑到了多线程,并且默认情况下许多实现都使用多核CPU(不幸的是,Linux上的xz
尚未这样做)。这是有道理的,因为时钟速度将不再增加,但内核数将增加。有多线程
bzip2
实现(例如pbzip
),但是默认情况下通常不安装它们。另请注意,与LZMA2相比,多线程bzip2
仅在压缩时才有回报,而如果文件是使用单线程bzip2
压缩的,则解压缩将使用单线程。如果文件是使用并行bzip2
版本压缩的,则并行bzip2
变体只能利用多核CPU,通常不是这种情况。评论
好吧,有些焦油打了一个z选项。
–基督
2014年1月7日,1:19
“速度”是一个糊涂的答案,您应该指压缩速度或解压缩速度。缺省情况下未安装pixz,pbzip2或pigz(或不带-I标志的tar使用),但是pixz和pbzip2可以加快压缩和解压缩速度,而Pigz仅用于压缩。
–东武
2014年1月8日在8:33
@Tobu xz默认情况下是多线程的,因此将来不需要安装pixz。在某些平台上,已经支持xz线程。而bzip2不太可能是多线程的,因为该格式在设计时并未考虑多线程。此外,只有在使用pbzip2压缩文件的情况下,pbzip2才加速解压缩,而通常情况并非如此。
–马可
2014年1月8日,12:07
@Marco我相信lbzip2允许对文件进行并行解压缩,即使文件是使用非并行实现压缩的(例如,股票bzip2)。这就是为什么我在lbzip2上使用lbzip2的原因。 (自您发表评论以来,情况可能已经有所发展。)
–RaveTheTadpole
2015年1月20日在6:09
这是有道理的,因为时钟速度不再增加-什么?这不是真的。该帖子发表于2014年,当时英特尔发布了3.8GHz的i3-4370。 2017年,英特尔发布了4.7GHz的i7-8700K。在2018年,他们发布了5GHz的i9-9900K-可能在2015年和2016年的cpus也在此列表中缺失
– hanshenrik
20 Mar 11 '20 at 9:54
#3 楼
LZMA2是一个块压缩系统,而gzip不是。这意味着LZMA2适合于多线程。另外,如果存档中发生损坏,通常可以使用LZMA2从后续块中恢复数据,但不能使用gzip进行恢复。实际上,在损坏的块之后,使用gzip会丢失整个存档。使用LZMA2存档,您只会丢失受损坏块影响的文件。这对于具有多个文件的较大存档来说很重要。评论
确实,这是一个非常有用和重要的区别!
–leden
17年1月4日在16:49
您可以使用来源支持这些声明吗?我还没有看到XZ恢复工具,而我的已知消息来源则宣称:nongnu.org/lzip/xz_inadequate.html
– nyov
19/12/16在9:05
#4 楼
简短的回答:xz在压缩率方面更有效。这样可以节省磁盘空间并优化通过网络的传输。您可以查看此快速基准测试,以便通过实际测试发现差异。
评论
链接断开。
– Flarn2006
19年6月10日在18:49
新链接:catchchallenger.first-world.info/wiki/…
–克雷格·扬金斯(Craig Younkins)
20年1月25日在18:17
评论
关于容错性的任何评论,还是总是完全在压缩算法之外实现的东西?
–user44370
2014年1月8日下午1:00
在不牺牲压缩率的情况下,无法提供@illuminÉ弹性。这是一个正交的问题,尽管存在诸如Parchive之类的工具,但用于分发内核TCP的错误处理的功能也同样有效。
–东武
2014年1月8日在8:58
@illuminÉ容错(假设您的意思类似于par2)通常与通过Internet分发档案无关。假定下载足够可靠(如果损坏,则可以重新下载)。经常使用加密哈希和签名,它们可以检测到损坏以及篡改。有一些压缩机具有更大的容错能力,尽管是以压缩比为代价的。似乎没有人发现值得在HTTP或FTP下载上进行权衡的东西。
–德罗伯特
2014年1月8日在17:02
xz使用较少的内存进行解压缩。
– MichalH
15年8月11日在11:32
@Mike自从我写这篇文章以来,它发生了变化吗?特别地,脚注一解释了内存使用情况。
–德罗伯特
2015年8月11日14:03