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


12

我运行命令:

tar -cf myArchive.tar myDirectory/
gzip myArchive.tar

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

tar -xzf myArchive.tar.gz

我压缩了tar球这一事实,是否可以以任何方式保证未包装内容的完整性或至少是CRC?

Answers:


15

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

gzip联机帮助页:

当使用前两种格式(意味着gzip或zip)时,gunzip检查32位CRC。


5

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

当然,虽然校验和使gzip 告诉您存档已损坏,但实际上并没有做任何事情来帮助您恢复存档内的数据。因此,它对于诸如检查您刚刚从网络上下载的归档文件是否正确下载之类的事情最有用。

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


4

tar没有完整性检查。例:

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

tttttttttttttttttt

看到,a.tar存档的内容已更改,因此文件的b内容完全不同,但是tar并未注意到这一点。对于任何tar都是如此,包括tar-1.28(最新)和tar两种格式--format=gnu --format=posix。该pax命令(备用tar阅读器)pax -r < a.tar也不会注意到存档更改。


2
在OP似乎也意识到(或至少是令人怀疑)是tar(至少没有-z选项)不执行完整性检查。另外,接受的答案也说明了这一点。问题是:是否gzip(或使用该-z选项)添加完整性检查?
G-Man说'恢复莫妮卡'

正确的G-Man,如果它也包含gzip部分并证明gzip确实检测到内容已更改,那么这可能是一个好的答案。
Aksel Willgert,2015年

2

如果tar解包时发现错误,它将打印一条消息并以非零退出值退出。此行为与创建tar文件后使用的压缩算法无关。

如果要验证文件是否已通过不可靠的链接成功发送到目标,请在发送前创建文件的md5和,并在接收后验证md5和。


如果我只对解压缩内容的完整性感兴趣。与解压缩过程中检查tar相比,tar上的md5不会添加任何额外内容吗?
Aksel Willgert 2014年

tar存档中内容的完整性由其tar自己负责。如果需要,您可以添加一个附加层:如果tar文件的完整性得到了验证,那么tar归档文件中的内容也可以。但是所有这些首先都应该由用于传输数据的协议来处理。
1

-1

PKZip软件包(win / dos)随附一个名为PKZipFix的程序,该程序可以从损坏的档案中恢复文件。我过去曾使用过该实用程序,它可以从不会被解压缩的中等损坏的存档中恢复文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.