![有没有办法通过验证进行复制或仅验证复制的数据](https://linux22.com/image/1413303/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E9%80%9A%E8%BF%87%E9%AA%8C%E8%AF%81%E8%BF%9B%E8%A1%8C%E5%A4%8D%E5%88%B6%E6%88%96%E4%BB%85%E9%AA%8C%E8%AF%81%E5%A4%8D%E5%88%B6%E7%9A%84%E6%95%B0%E6%8D%AE.png)
我是一名 GIS 专家,工作的一部分就是定期将大量数据复制到磁盘上 - 备份、归档和交付。有时,其他光盘不匹配源盘,每复制 4TB 的文件就会有一个错误(即 0.000000025%)。
目前我使用 RoboCopy 或 Windows Explorer 将文件复制到其他磁盘,并使用 WinDiff 验证内容,这样我就知道错误率非常低。此过程有效,但 WinDiff 很慢,有时验证所花的时间比最初复制所花的时间还要长;RoboCopy 没有并验证像 XCopy 这样的开关。
我以前曾使用过带 /v 开关的 XCopy,但有人告诉我,该实用程序在 Windows 7 中已弃用,我不应该使用它。除非有可以在编程语言中实现的高效库/方法/算法,否则单独创建文件的 MD5、校验和或哈希值不是一种选择,因为会有数十万个单独的文件。
问题是:有没有一种方法将要在复制文件时验证文件,或者使用比 WinDiff 更好的验证程序,或者甚至更好的是,有一种保证以 100% 完整性复制这些文件的方法,这样我就不必验证它们了?
只要所需的库是免费的或内置的,我就可以为 C# / VB.net / C++ / Python / DOS Batch 编写代码。我并不害怕命令行,我记得当时只有命令行,所以 DOS 实用程序/说明就很好。
那么如果我有一个可行的方法,为什么现在这还是一个问题呢? 其实不是,我有一个可行的方法,但自 20 世纪 90 年代末的 Windows NT 以来,我一直以同样的方式进行操作;20 世纪 90 年代末,是 Exabyte 磁带,容量为 100MB 或更少,然后是可以在半小时内验证的光学介质。现在,由于介质容量大且相对便宜,我发现我最多可以复制和验证16 TB单次配送,验证时间超出交货日期....我至少需要寻找一个更好的方法!
答案1
您一直在寻找的程序是 xxcopy。在复制几十万个文件进行取证分析时,我也想进行二进制文件比较。我不介意花更长的时间,我不想创建 SFV 或 MD5 文件,然后在文件上运行另一个程序,我想要一个可以即时执行 DOS“fc”命令的程序。
http://xxcopy.com/xxtb_027.htm#tag_319
你想要开关/V2
祝你有美好的一天。
答案2
多年来,我一直在 Windows 中使用 Fastcopy 和 terracopy,它们都可以很好地替代 Windows 复制粘贴方法,并且都具有比较例程。我认为有人说 Fastcopy 的比较方法是一种“更好”的方法。它们都捕获了我自己由于内存计时错误而导致的非常小的错误。
FC 和 TC 还存在其他差异,使它们成为两个完全不同的操作程序,最好体验并调整两者的选项,以便能够理解它们。例如,在移动时,FC 会在删除之前逐个检查每个项目。可以轻松将 TC 设置为比较所有操作作为第二个操作或重复操作。TC 可能会遇到网络驱动器问题,而使用网络驱动器时遇到 FC 问题的人较少。
我更喜欢使用 FC,但 FC 中出现单个错误之类的事情会耗费更多的手动工作量,而 TC 将所有项目保留在列表中,并且始终显示可见的列表则具有其优势。它们都是 GUI 风格的程序,而不是 CMD 风格的程序,尽管它们都可以在命令提示符或批处理中工作。
两者都可以通过等待一个复制操作完成后再开始另一个操作来确保更好的数据顺序,从而减少磁盘上的碎片混乱。
它们都不会像 Windiff.exe 那样“修复最后几个文件”没有正确复制,所以当一切都失败时,windiff 要好得多:-)
两者都将直接集成到系统中以替代 Windows 副本,并且还将自身集成到右键单击上下文菜单中。两者都可以完全便携地工作。我不再用它们中的任何一个来替代系统副本,我将它们放在上下文菜单中只是为了根据需要使用它们。
结论,尝试一下两者,看看你怎么想。
答案3
您可以阅读Windows FCIV 工具在这里。该链接将解释如何安装该工具并解释其用法。为了达到您的目的,您可以使用该工具的递归选项并运行这两个命令:
fciv D:\Path\To\Source -r -xml db.xml
fciv -v -bp E:\Path\To\Destination -r -xml db.xml
替换D:\Path\To\Source
为源文件的路径,并替换E:\Path\To\Destination
为您复制的文件的路径。
第一个命令将在运行该命令的文件夹中创建一个名为“db.xml”的数据库。第二个命令将使用该数据库通过 md5 哈希校验和来验证复制的文件。
如果一切顺利,您将收到一条消息“所有文件已成功验证”。