检查复制文件的正确性

我复制说从内部硬盘驱动器到外部驱动器的文件超过50 GB(包括不同格式的30,000个文件)有没有办法找出是否所有内容都已正确复制? 此外,如果我通过取消操作停止介入,然后在继续操作时说合并 ,那么正确性会受到打击吗?

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

我正在使用hashdeep来validation备份/恢复,并偶尔检查RAID中的文件系统损坏。

速度取决于您使用的散列函数(某些散列函数比其他散列函数更强)以及磁盘的读取速度。 在我的系统上, hashdeep可以使用md5和300 MB / s的读取速度处理或validation大约1 TB /小时。


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

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

参数:

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

请参见手册页 。


有关validation校验和和打印差异列表的示例:

 $ 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 – verbose(获取不匹配的列表,多个v s意味着更详细)
  • k – 已知哈希的文件

请注意,截至2016年3月, hashdeep似乎已被放弃 。

它看起来像rsync的完美任务。 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的delta算法针对此类用例进行了优化。 然后,如果你想让b匹配b的内容,你可以删除-n选项来执行实际的同步。

一些相关问题:

如果GUI应用程序建议通过文件和目录比较工具? 不要为你做,尝试diff -rq /path/to/one /path/to/other来悄悄地通过这两个目录,只记录差异到屏幕。

你说的情况太复杂了。 虽然您可以编写一个脚本来计算要复制的所有文件的MD5,然后将它们与复制的文件进行比较:

如果你想要一些简单而快速的东西(在非常复杂的场景下不起作用),你可以使用Meld

 sudo apt-get install meld 

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