当我将 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
– 详细(获取不匹配的列表,多个v
s 表示更详细)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/