检查复制文件的正确性


14

在我说从内部硬盘驱动器到外部驱动器的50+ GB(30,000个文件,包括不同格式的文件)之后,是否有办法找出所有内容是否已正确复制?另外,如果我在取消操作之间停了下来,后来又说合并在继续操作时会影响正确性吗?

我可以使用类似的应用程序,back-in-time但是在复制文件时非常挑剔,下一次我打算使用copyoperation而merge不是replace。复制大量文件时建议这样做吗?


2
您可以在这里找到答案
塔卡特2011年

Answers:


16

我正在使用hashdeep来验证备份/还原,并偶尔检查RAID中的文件系统是否损坏。

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


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

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 –已知哈希文件

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


14

对于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的增量算法针对此类用例进行了优化。然后,如果你想b匹配的内容a,你可以只取出-n来执行实际的同步选项。

一些相关的问题:


1
rsync绝对是完成此工作的工具,但它本身并不比较和复制差异。它使用大小和哈希值比较文件。
贾斯汀·

@JustinForce使用大小?当然,大小不同可以确保文件不完全相同,但是rsync非常通用,它可以选择信任元数据(例如时间),以避免重新读取所有文件。通过网络复制时,它会计算滚动哈希值,以精确检测公用部分以避免转移它们,但是默认情况下,在本地驱动器上,散列不扮演此角色(如果使用)。您甚至可以要求它相信较短的目的地已经具有正确的内容,只需要追加内容即可,尽管我们继续关注主题。
斯特凡纳·古里科



0

在“如果一切都已正确复制的情况下”,我使用经过修改的cp(或mv),其中包括校验和(可以选择存储在xattr中,因此对于源而言只需要计算一次) http://sourceforge.net/projects / crcsum /


1
尽管您的答案是100%正确的,但是对于初学者来说,也几乎不可能实现。因此,请编辑您的答案,并在答案中包括有关如何下载,编译,安装和卸载的步骤crccp!;-)您始终可以在答案的底部保留链接,作为材料的来源...
Fabby 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.