检查复制文件的正确性
我复制说从内部硬盘驱动器到外部驱动器的文件超过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,然后将它们与复制的文件进行比较:
- http://dll.nu/md5i/
- http://www.unix.com/unix-desktop-dummies-questions-answers/156854-script-compare-md5.html
如果你想要一些简单而快速的东西(在非常复杂的场景下不起作用),你可以使用Meld
sudo apt-get install meld
在“如果一切都被正确复制”,我使用一个修改过的cp(或mv),其中包括校验和(可选地存储在xattr中,因此只需要为源计算一次) http://sourceforge.net/projects / crcsum /