为什么我应该使用 tar.xz 而不是 tar.gz? xz是一种无损数据压缩程序和文件格式

为什么我应该使用 tar.xz 而不是 tar.gz? xz是一种无损数据压缩程序和文件格式

今天我人生中第一次看到tar.xz下载。我搜索了互联网并找到了维基百科文章(xzXZ 实用程序

关于用户的有趣引用xz

xz 因在 GNU coreutils 项目中压缩软件包而闻名,[7] Debian 系列系统 deb(文件格式)、openSUSE、[8] Fedora、[9] Arch Linux、[10] Slackware、[11] FreeBSD、[ 12] Gentoo,[13] GNOME,[14] 和 TeX Live,[15] 以及压缩已编译 Linux 内核的选项。 [16] 2013 年 3 月,kernel.org 宣布使用 xz 作为分发内核存档文件的默认压缩文件格式。 [17]

我总是用tar.gz.我应该何时以及为何使用tar.xz?有什么用例?

我在第一次评论后发现类似的问题已经发布了。我经常压缩 mongodump/mongoexport (BSON/JSON) 和 mysqldump (SQL 文本)。使用 tar.xz 进行这些备份有优势吗?

答案1

gzipxz使用两种不同的算法,因此它们的性能不同,无论是在实现的压缩级别还是在压缩或解压缩时消耗的资源量方面。

一般的xz实现更高的压缩比,但需要更多的内存和时间。

我个人用xz它来归档数据;我需要长期存放的大文件。我用gzip其他方式,因为它通常更快。

对它们进行测试,看看它们的表现如何你的平均tar(或其他)文件。

答案2

xz近年来,在包管理方面已经成为一种标准。

LZMA2 压缩算法xz对文本(和“类似文本”)数据非常有效。我个人将它用于几乎任何事情,其中​​计算编码速度不是问题(xz解压缩很多比压缩更快,这实际上是它的设计目标之一)。

因此,它非常适合归档或备份(一般来说,文件被解压缩很多,但数据并不总是被压缩或更改等)。对于流压缩来说,这并不是一个很好的决定 - 至少不是那么频繁,因为 LZMA2 在压缩时并不完全占用资源。

但我想评论一下你的另一句话:“应该”。你什么应该或者不应该使用,取决于您需要数据的用途。尽管xzLZMA2 已经存在多年,但gz出于兼容性原因,人们仍然将压缩视为后备方案。像特拉克或者吉特报价.tar.gz.7z、 和.tar.xz。有了这个.tar.gz选项,因为它已经存在了“永远围绕”,并且对于任何类型的设备,无论多小或多旧,这都是一个很好的后备措施。

就作为一个反例来说,lzop是一种快速且节省资源的压缩机,通常用于航天器,但效率不高。但我不能说它没有被广泛使用。它通常用于更重要的是用很少的功率和计算空间快速压缩某些内容的系统。

因此,您应该或不应该使用什么,对您和与您的数据交互的人来说最有意义。


最近我突然想到一件事:man页面通常用gzip.例如,如果您查看/usr/share/man/man1/,您会看到很多类似于 的文件mv.1.gz,即使不是所有文件都被压缩。现在,.xz由于更好的压缩,切换到文件可能是有意义的,但与.gz放弃.xz.其原因是几乎通用的兼容性。甚至.gz直接打开压缩文件维姆工作正常,并且充当透明压缩。

答案3

.xz格式提供了一些高级功能。同时,它保持足够简单,可以在许多嵌入式系统中使用。以下是功能摘要:

  • 随机存取读取:数据可以被分割成独立压缩的块。每个.xz文件都包含块的索引,当块大小足够小时,这使得有限的随机访问读取成为可能。
  • 完整性检查:所有标头的完整性始终受 CRC32 保护。实际数据的完整性可以通过 CRC32、CRC64、SHA-256 ... 进行验证
  • 连接:就像.gz.bz2文件一样,可以.xz按原样连接文件。解压缩器可以解压缩串联文件,就好像它是常规的单流.xz文件一样。
  • 填充:可以将二进制零附加到.xz文件中以填充它们,例如填充备份磁带上的块。填充需要是四个字节的倍数,因为每个有效.xz文件的大小都是四个字节的倍数。

相关内容