检查复制文件的正确性

Che*_* S. 15 10.10 backup

在我将超过 50 GB(包括不同格式的 30,000 个文件)的文件从内部硬盘复制到外部驱动器后,有什么方法可以确定所有内容是否都已正确复制?此外,如果我通过取消操作而在两者之间停下来,然后在继续操作时说合并,正确性会受到影响吗?

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

j-g*_*tus 20

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

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


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

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt
Run Code Online (Sandbox Code Playgroud)

参数:

  • 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
Run Code Online (Sandbox Code Playgroud)

参数:

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

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


dde*_*eke 15

它看起来是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
Run Code Online (Sandbox Code Playgroud)

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

一些相关问题:


Ama*_*nda 8

如果 GUI 应用程序在文件和目录比较工具中提出建议不要为你做这件事,尝试diff -rq /path/to/one /path/to/other安静地遍历两个目录,只将差异记录到屏幕上。