7z 包含的校验和足以验证备份的完整性吗?

7z 包含的校验和足以验证备份的完整性吗?

我最近开始使用未压缩的加密 7z 存档进行备份。我之所以选择 7z,是因为它有易于使用的 Windows 和 Linux 桌面应用程序,以防我需要快速恢复数据。

我将校验和存储在存档文件旁边以检测文件损坏。目前,存档被写入外部硬盘,然后再次读取以进行校验和。这是必要的,因为 7z 在创建 7z 存档时会寻道,所以我无法通过管道输出它。不过再次读取文件的速度相当慢。

我发现 7z 有“t”操作来“测试存档文件”。运行“7z -h”将其描述为“测试存档的完整性”。不幸的是,帮助和文档都这么说。我查看了 7z 格式规范,其中似乎包含某种 CRC 校验和的位置。我也看了一眼源代码,但我不知道该在哪里找。我找不到负责测试操作的部分。

我的问题是: 7z 在 .7z 档案中存储什么类型的校验和,它们足以检测文件损坏吗?

我不计算档案元数据的损坏,因为当 7z 无法打开档案时这一点很明显。

答案1

我深入挖掘了一下,7z 将文件的 CRC-32 校验和存储在档案中。

7z SDK 包含文件格式描述(副本可在此处在线查阅)然而它太短并且没有说明各个部分的具体作用。

我找到了 Py7zr其中还记录了 7z 文件格式,以一种更容易理解的方式。文件数据存储在所谓的 Packed Streams 中。每个 Packed Stream 都保存一个 CRC-32 校验和,可在提取时进行检查。

此外,在 Coders Information 标头部分中,每个文件的未压缩数据都存在 CRC-32 校验和。使用 7z GUI 测试存档时,它会显示所检查的文件,因此它可能会解压文件并检查其 CRC。

由于 CRC-32 在文件损坏时发生意外冲突的概率约为 2^32,因此对于档案库中多达几十万个文件来说,它应该非常有用。此外还有一个Stackoverflow 问题CRC-32 是否适合检测文件错误。

由于我现在只有几千个文件,7z 文件格式中集成的校验和足以检测文件损坏。

答案2

使用 7-Zip,您可以使用多种方法显示校验和/哈希值,但不幸的是,您必须自己存储这些值并手动进行比较。

7Zip h(哈希)命令 执行以下操作:

计算当前文件夹及其子文件夹中所有文件的 CRC32

相关内容