大小超过 4 GB 的 gzip 文件的可移植性如何?

大小超过 4 GB 的 gzip 文件的可移植性如何?

为了备份我的工作快照,我运行了一个命令,例如tar -czf work.tgz work创建一个压缩的 tar 文件,然后我可以将其放入云存储中。但是,我刚刚注意到 gzip 有 4 GB 的大小限制,而我的work.tgz文件超过 4 GB。

尽管如此,如果我在当前计算机(运行 Mac OS X 10.15.4,gzip 版本称为 Apple gzip 287.100.2)上创建 gzip tar 文件,我可以成功检索它。因此,在我的特定情况下,gunzip 适用于 >4GB。但我希望能够在 Mac OS X 或 Linux 以及将来可能的其他系统上创建和读取这些大型 gzip 文件。

我的问题是:我可以在任何地方解压/枪压缩大文件吗?换句话说,超过 4 GB 的 gzip 文件的可移植性如何?我在 Mac OS、Linux 还是其他操作系统上创建它有什么关系吗?

一些在线阅读表明 gzip 将成功 gzip/gunzip 一个更大的文件,但不会正确记录未压缩的大小,因为该大小存储为 32 位整数。这就是全部的极限了吗?

答案1

我刚刚注意到 gzip 有 4 GB 大小限制

更准确地说,该gzip格式无法正确存储未压缩的文件尺寸超过 4GiB;它存储未压缩大小的低 32 位,并gzip -l误导性地将其表示为原始数据的大小。结果是,直到gzip1.11 为止,gzip -l对于任何原始大小超过 4GiB 的压缩文件都不会显示正确的大小。

除此之外,本身没有任何限制gzipgzip超过 4GiB 的 ped 文件是可移植的。格式由以下指定RFC 1952并且对其的支持得到了广泛的支持。

对所提供信息的困惑gzip -l 已在gzip1.12中修复;gzip -l现在解压缩数据以确定原始数据的实际大小,而不是显示存储的大小。

我可以在任何地方解压/枪压缩大文件吗?

tar任何可以处理大文件的地方,以及可以使用和 的符合规范的实现的地方gunzip

换句话说,超过 4 GB 的 gzip 文件的可移植性如何?

格式gzip本身是可移植的,gzip文件也是可移植的,无论它们包含的数据大小如何。

我在 Mac OS、Linux 还是其他操作系统上创建它有什么关系吗?

不,gzip在任何平台上创建的文件都可以在具有所需功能(特别是在本问题的上下文中存储大文件的能力)的任何其他平台上解压缩。

也可以看看压缩实用程序最大文件大小限制 | Unix/Linux

答案2

除了文件系统、存储系统和加密容器的限制之外,使用较小的块进行文件传输可能会更好 - 特别是如果您使用不支持并行上传和重新启动中止传输的工具。

使用较小的块,您可以解决所有这些问题,因此我通常目标是到处使用 2 GB 的块。如果您需要再次处理 1 x 2 GB 块而不是 100 GB 文件,则最好处理校验和错误。 Tar 通常可以分割成多个“磁带”。

如果您可以控制整个链,包括 USB 记忆棒、存储帐户和传输软件,则无需关心(但特别是对于紧急时刻的无摩擦恢复,无论如何,具有更大的灵活性是一个优势)。

相关内容