文件复制程序,在复制时也生成数据的校验和


5

我的问题很简单:是否有一个工具将文件从目录A复制到B,同时生成它已复制/读取的文件的校验和,而不进行额外的读取/传递以生成所述校验和?

我将从一个HDD复制几TB的文件到另一个,而不是:

  1. 从HDD1复制文件 - > HDD2(X小时)
  2. 在HDD1上生成文件的校验和(Y小时)
  3. 验证HDD2上的文件校验和(~Y小时)

我在考虑一个更简化的流程:

i. Copy files from HDD1 -> HDD2 and generate checksums of the files copied as well (Z hours)

ii. Verify checksums of files on HDD2 (~Y hours)

我的假设是Z~ = X. 因为这样的程序可以读取完整的文件(因为它将它从一个硬盘复制到另一个硬盘),因此不需要再次读取文件来生成校验和。

现在我知道我的这个想法可能不起作用,例如,操作系统使用DMA来复制文件,我不确定Windows 7使用什么技术将文件从一个硬盘复制到另一个硬盘。

任何有关此效果的建议都将受到赞赏 - 特别是 加快复制过程 确保转移 是1:1没有损坏或丢失文件


我正在写一些这样做的东西。该文件通常永远不会在内存中,只有部分内容...将1gb粘贴到内存中是不好的,因为我们不知道每台PC有哪些系统资源,因此我们一次复制几千字节。由于多线程,可以在源文件的期间,之前或之后完成校验和。对于目的地,仅在复制之后,同时也复制下一个文件......任何方式,大多数现代/体面的备份程序都是标准的。无论如何,你的问题是什么?
Dave

@Dave:我们不需要将整个文件读入内存 - 它一次就可以执行。我有多GB文件,如果加载了多个文件,可能无法放入内存。如果它可以完成一次,我只是不想两次读取文件。你的工具今天准备好了吗?
PoorLuzer

不,但像acronis这样的东西提供了验证文件的方法(虽然付费)。
Dave

@DaveRook:你的工具是什么语言?如果是C / C ++ / Java / PERL,Python,我想继续研究它
PoorLuzer

不,你不会,我不会放弃:D C#
Dave

Answers:


2

您的假设并不完全正确,因为较大的文件肯定不会存储在内存中,为了提高复制速度,文件会以特定大小的块复制(在Linux中,您可以使用该块的大小来播放,以提高速度文件操作)。是的,文件缓存在内存中。对于DMA--这项技术的重点是在复制文件并将它们直接放入RAM时避免使用CPU,因此它不会直接从HDD转移到HDD。 DMA代表直接内存访问。
我建议使用特定的Linux LiveCD解决方案(例如rsync或非常简单的脚本),但我知道这可能比保存花费更多的时间,所以如果你坚持使用Windows会更好。试试这些:
http://technet.microsoft.com/en-us/magazine/2006.11.utilityspotlight.aspx
http://www.karenware.com/powertools/ptreplicator.asp
http://sourceforge.net/projects/rsyncwin32/
http://codesector.com/teracopy

编辑
有一个更新,更强大的微软ROBOCOP版本: http://technet.microsoft.com/en-us/magazine/2009.04.utilityspotlight.aspx

编辑2
如果在复制期间你会发现某些东西已经损坏,我怀疑从长远来看使用HDD2进行数据存储是安全的(因为只有更多扇区会被破坏)。


我从未提到需要将整个文件读入内存。我知道大多数工具一次读取它的块。此外,任何校验和算法也适用于文件块,并且该工具可以不断更新此校验和,直到文件被复制。我的问题是:是否有一个工具将文件从A复制到B,同时生成它复制/读取的文件的校验和?你列出的工具都没有这样做,但我为你的努力投了你的答案。
PoorLuzer

我知道DMA是什么。 Windows 7 API是否采用DMA?是否有一个工具不使用所述API但是从光盘中读取数据块并将其转储到其他地方,从而不使用DMA?
PoorLuzer

RichCopy支持“验证”方法。 rsync肯定会计算校验和,但它实现起来会更难,因为它是一个命令行实用程序。编辑:但我找到了一个伟大的GTK端口的grsync客户端: sourceforge.net/projects/grsync-win 试试吧。它肯定支持校验和,到目前为止它是制作安全副本的最佳算法。不,没有,因为硬盘和主板芯片组无法在没有内存/ CPU使用的情况下管理数据流。但是你想要计算校验和,所以在任何情况下文件都必须通过RAM和CPU。
Ernestas

1
但是,我仍然不明白你为什么要“验证”将文件从一个硬盘复制到另一个硬盘?这是一种罕见的做法,因为HDD到HDD的流量并不像我那样“易变”。即网络。
Ernestas
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.