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

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

我运行命令:

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

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

tar -xzf myArchive.tar.gz

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

答案1

tar它本身不会写下校验和以供以后比较。如果您gzip存档tar,您就可以拥有该功能。

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

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

但是,您可以使用该-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。

答案2

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

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

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

答案3

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 格式的 tar-1.28(最新)--format=gnu --format=posix。该pax命令(替代 tar 阅读器)pax -r < a.tar也不会注意到存档更改。

答案4

PKZip 软件包 (win/dos) 附带一个名为 PKZipFix 的程序,它可以从损坏的档案中恢复文件。我以前用过这个实用程序,它可以从无法解压的中度损坏的档案中恢复文件。

相关内容