比较两台服务器上的大文件

时间:2013-03-11 19:01:44

标签: linux centos

我有两个服务器,我想将备份tar.bz文件(50G)从一个移动到另一个。

我使用AXEL从源服务器下载文件。但是现在当我想要提取它时,它会给我错误unexpected EOF。它们的大小相同,似乎内容存在问题。

我想知道是否有一个程序/应用程序/脚本可以比较这两个文件并只纠正损坏的部分?!或者我需要手动拆分并比较每个部分的哈希码?

问题在于源服务器的带宽有限,传输速度低,所以我不能再从零传输它。

3 个答案:

答案 0 :(得分:2)

您可以使用校验和实用程序(例如md5或sha)来查看两端的文件是否相同。例如

$ md5 somefile 
MD5 (somefile) = d41d8cd98f00b204e9800998ecf8427e

通过在两端运行这样的命令并比较结果,你可以确定文件是否相同。

至于只下载文件的错误部分,这需要双方的校验和以获取数据的“部分”,例如使用bittorrent protocol

答案 1 :(得分:2)

好的,我发现“rdiff”是解决这个问题的最佳方法。刚做:

在目标服务器上:

rdiff signature destFile.tar.bz destFile.sig

然后将destFile.sig传输到源服务器并再次在源服务器上执行rdiff:

rdiff delta destFile.sig srcFile.tar.bz delta.rdiff

然后将delta.rdiff传输到目标服务器并在目标服务器上再次执行rdiff:

rdiff patch destFile.tar.bz delta.rdiff fixedFile.tar.bz

答案 2 :(得分:1)

这个过程实际上不需要单独的程序。您可以使用几个简单的命令来完成它。如果任何md5sums没有加起来,请复制不匹配的md5sums并将它们连接在一起。为了更容易地比较md5sums,只需在两个文件的输出之间运行差异(或者输出md5sum以查看是否存在差异而不必复制输出)。

split -b 1000000000 -d bigfile bigfile.
for i in bigfile.*
do
   md5sum $i
done