如何检查同一文件的两个版本之间的文件完整性?

如何检查同一文件的两个版本之间的文件完整性?

过去几年(大约从 2000 年开始),我时不时地在磁盘之间移动和复制数据。数据包括 MP3、应用程序、视频、备份、电子邮件等各种数据,它们在多个磁盘(和磁盘阵列!)之间以及多个文件系统(FAT、NTFS、ReiserFS、Ext3、Ext4、jfs)之间移动/复制……

最近我注意到一些 RAR 存档、一些可执行文件(实际上是压缩存档)以及我尚未注意到的其他文件已损坏。我不知道这是否只存在于压缩文件中。我认为它并不仅限于此。

首先,我使用 find 和以下命令检查了 Linux 文件服务器中 rar 文件的完整性:

unrar t <rar files>

这很好,但是我无法像这样检查所有档案的完整性,更不用说我所有的其他文件(文档、照片、MP3、WAV、ZIP,列表当然是无穷无尽的)

我想通过多种方式检查所有文件。

  1. 文件系统检查显然是好的,但是如果数据在复制到当前所在的磁盘之前就已经损坏,那么它就无济于事了,对吗?当前文件系统是 JFS。

  2. 第二级检查可以是 MD5 校验和吗?我备份了所有数据,我可以尝试匹配校验和,但损坏的文件会给我不同的校验和吗?如果文件在我的数据最后一次复制之前损坏,这仍然不能解决问题。

  3. 我还可以检查什么来让我安心?

  4. 将我的数据与备份进行比较时,有一个很大的问题;就像所有活着的东西一样,我的数据随着时间的推移而“改变”,而备份是时间上的快照,之后再也没有改变过。首先,目录结构已经改变,文件显然已被删除或转移到其他位置。显然,使用命令find在备份树和当前树之间匹配文件会很麻烦!

那么是否有人处理过类似的事情并且可能有脚本(使用定位或其他方式)可以快速找到并使用文件的索引条目?

答案1

MD5/SHA校验和是当今检查文件完整性的黄金标准。如果您有用于创建校验和的原始文件,或者已经有校验和,那么这将是最彻底验证文件内容的方法。但是,如果您拥有的文件数量如您建议的那么多,这可能会很繁琐。

此外,、RARZIP文件7Z格式应包含其中存储的任何文件的 CRC32 校验和。这比 MD5 或 SHA 更弱(即更有可能无法检测到损坏的数据),但它仍然可以在提取文件时检测是否存在损坏,这意味着存档已损坏。每次从存档中提取文件时都会自动验证这些。unrar -t <rar files>基本上只是测试存档中每个文件的 CRC32 校验和。

此外,归档工具应该为您提供在构建档案时生成文件的选项.sfv,该文件是整个档案的附加 CRC32。您可以使用它来进一步验证档案的完整性。

如果您将文件从一个文件系统复制到另一个文件系统,则可以使用专门的工具来验证复制是否成功且正确。对于我使用的 Windows TeraCopy- 只需在开始复制之前启用“验证”选项,TeraCopy 就会重新读取复制的文件以检查它们是否在新位置正确写入磁盘。

相关内容