gzip 是否将完整性/crc 检查添加到 .tar?

Aks*_*ert 13 tar gzip checksum integrity

我运行命令:

tar -cf myArchive.tar myDirectory/
gzip myArchive.tar
Run Code Online (Sandbox Code Playgroud)

然后我将文件复制到许多不可靠的介质上,然后我使用以下方法解压缩它:

tar -xzf myArchive.tar.gz
Run Code Online (Sandbox Code Playgroud)

我压缩了 tar-ball 的事实,是否会以任何方式保证解压内容的完整性,或者至少是 CRC?

cha*_*aos 16

tar本身不会写下校验和以供以后比较。如果你gziptar存档,你可以有这个功能。

tar使用compress. 如果您-Z在创建存档tar时使用该标志将compress在读取或写入存档时使用该程序。从gzip联机帮助页:

标准压缩格式不是为了允许一致性检查而设计的。

但是,您可以使用该-z参数。然后tar通过gzip. 并gzip写入一个 crc 校验和。要显示该校验和,请使用该命令:

$ gzip -lv archive.tar.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3f641c33 Sep 25 14:01               24270              122880  80.3% archive.tar
Run Code Online (Sandbox Code Playgroud)

gzip联机帮助页:

使用前两种格式(表示gzip 或 zip)时,gunzip 会检查 32 位 CRC。


Ilm*_*nen 5

是的,gzip 文件格式包含 CRC-32 校验和,可用于检测存档是否已损坏。

当然,虽然校验和让 gzip告诉您存档已损坏,但它实际上并没有做任何事情来帮助您恢复存档中的数据。因此,它对于检查您刚刚从网络上下载的档案是否真的被正确下载等非常有用。

如果您真的担心通过不可靠的媒体存储或传输您的档案,您可能需要考虑使用像par这样的档案格式,除了错误检测之外,它实际上还提供错误纠正。当然,这种格式的缺点是纠错所需的冗余必然会增加文件大小。


小智 5

tar没有完整性检查。例子:

$ echo JJJJJJJJJJJJJJJJJJ > b
$ tar cvf a.tar b
$ sed -i s/JJJJJJJJJJJJJJJJJJ/tttttttttttttttttt/g a.tar
$ tar xvf a.tar
$ cat b

tttttttttttttttttt
Run Code Online (Sandbox Code Playgroud)

看,a.tararchive的内容变了,所以文件b内容完全不一样了,但是tar并没有注意到这一点。对于任何 tar 都是如此,包括具有两种 tar 格式的 tar-1.28(最新)--format=gnu --format=posix。该pax命令(替代 tar 阅读器)pax -r < a.tar也不会注意到存档更改。

  • OP 似乎意识到(或至少怀疑)`tar`(至少*没有*`-z` 选项)不进行完整性检查。此外,接受的答案说明了这一点。问题是:`gzip`(或使用`-z` 选项)是否*添加* 完整性检查? (2认同)