检查复制文件的正确性

检查复制文件的正确性

当我将 50+ GB(30,000 个文件,包括不同格式)的文件从内置硬盘复制到外置硬盘后,有什么方法可以确定所有内容是否已正确复制?此外,如果我通过取消操作中途停止,然后说合并继续操作时正确性会受到影响吗?

我可以使用类似的应用程序back-in-time,但我在复制文件时非常挑剔,下次我打算使用copy操作和说merge而不是replace。复制大量文件时是否可取?

答案1

我在用着哈希深度验证备份/恢复,偶尔检查 RAID 中的文件系统是否损坏。

速度取决于您使用的哈希函数(有些哈希函数比其他哈希函数更耗 CPU)以及磁盘的读取速度。在我的系统上,hashdeep使用 md5 可以处理或验证大约 1 TB/小时的数据,读取速度为 300 MB/秒。


计算校验和并将其存储在文件中的示例:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

参数:

  • r– 递归
  • l– 使用相对路径
  • c– 指定哈希函数
  • .– 从当前目录开始递归
  • >– 将输出重定向到指定文件

查看手册页


验证校验和并打印差异列表的示例:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

参数:

  • a– 审计(与已知校验和列表进行比较)
  • v– 详细(获取不匹配的列表,多个vs 表示更详细)
  • k– 已知哈希值的文件

hashdeep请注意,截至 2016 年 3 月

答案2

这看起来是同步。Rsync 正在比较和复制差异。

当我看到你的问题时,这个rsync实用程序首先出现在我的脑海中。执行类似下面的操作可以快速显示目录中有a但不在的文件b

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

这是一个不错的选择,因为您还可以比较文件的内容以确保它们匹配。 rsync的增量算法针对此类用例进行了优化。 然后,如果您想b匹配的内容a,您只需删除-n执行实际同步的选项即可。

一些相关问题:

答案3

如果 GUI 应用程序建议在文件和目录比较工具?不要为您做这件事,请尝试diff -rq /path/to/one /path/to/other悄悄地递归遍历两个目录,仅将差异记录到屏幕上。

答案4

关于“如果所有内容都已正确复制”,我使用经过修改的 cp(或 mv),其中包括校验和(可选存储在 xattr 中,因此只需为源计算一次) http://sourceforge.net/projects/crcsum/

相关内容