为了备份我的工作快照,我运行了一个命令,例如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
误导性地将其表示为原始数据的大小。结果是,直到gzip
1.11 为止,gzip -l
对于任何原始大小超过 4GiB 的压缩文件都不会显示正确的大小。
除此之外,本身没有任何限制gzip
,gzip
超过 4GiB 的 ped 文件是可移植的。格式由以下指定RFC 1952并且对其的支持得到了广泛的支持。
对所提供信息的困惑gzip -l
已在gzip
1.12中修复;gzip -l
现在解压缩数据以确定原始数据的实际大小,而不是显示存储的大小。
我可以在任何地方解压/枪压缩大文件吗?
tar
任何可以处理大文件的地方,以及可以使用和 的符合规范的实现的地方gunzip
。
换句话说,超过 4 GB 的 gzip 文件的可移植性如何?
格式gzip
本身是可移植的,gzip
文件也是可移植的,无论它们包含的数据大小如何。
我在 Mac OS、Linux 还是其他操作系统上创建它有什么关系吗?
不,gzip
在任何平台上创建的文件都可以在具有所需功能(特别是在本问题的上下文中存储大文件的能力)的任何其他平台上解压缩。
答案2
除了文件系统、存储系统和加密容器的限制之外,使用较小的块进行文件传输可能会更好 - 特别是如果您使用不支持并行上传和重新启动中止传输的工具。
使用较小的块,您可以解决所有这些问题,因此我通常目标是到处使用 2 GB 的块。如果您需要再次处理 1 x 2 GB 块而不是 100 GB 文件,则最好处理校验和错误。 Tar 通常可以分割成多个“磁带”。
如果您可以控制整个链,包括 USB 记忆棒、存储帐户和传输软件,则无需关心(但特别是对于紧急时刻的无摩擦恢复,无论如何,具有更大的灵活性是一个优势)。