2017-05-24 40 views
3

我需要比较两个目录来验证备份。如何比较重复目录之间的文件大小匹配?

说我的目录如下所示:

Filename  Filesize  Filename  Filesize 
[email protected]_server:~/mydir/  [email protected]_server:~/mydir/ 
file1000.txt 4182410737 file1000.txt 4182410737 
file1001.txt 8241410737 -       <-- missing on backup_server! 
...       ... 
file9999.txt 2410418737 file9999.txt 1111111111 <-- size != main_server 

是否有一个快速班轮,将让我接近像输出:

Invalid Backup Files: 
file1001.txt 
file9999.txt 

(与目标指示备份脚本重新提取这些文件)

我试图得到以下变化无济于事。

[main_server] $ rsync -n ~/mydir/ [email protected]_server:~/mydir 

我不能做rsync备份目录本身,因为它需要的时间太长(8-24hrs)。相反,我运行多个线程scp来批量获取文件。这通常会在1小时内完成<。但是,偶尔我会发现一些文件错过了(可能是连接断开)。

速度是一个优先事项,所以文件大小应该足够。但我愿意加入checksum,前提是它不会像我在rsync中发现的那样降低流程速度。

这里是我的测试过程:

# Generate Large Files (1GB) 
for i in {1..100}; do head -c 1073741824 </dev/urandom >foo-$i ; done 

# SCP them from src to dest 
for i in {1..100}; do (scp ~/mydir/foo-$i [email protected]_server:~/mydir/ &) ; sleep 0.1 ; done 

# Confirm destination has everything from source 
# This is the point of the question. I've tried: 

rsync -Sa ~/mydir/ [email protected]_server:~/mydir 
# Way too slow 

你有什么建议?

+0

如果你有预算,有商业文件传输解决方案比SCP或SFTP有更好的性能。 – Kenster

+0

如果您已经有了部分副本,如您所见,'rsync'应该比'scp'快得多。 – John1024

+0

@ John1024,谢谢。我只是在一次测试中尝试过:备份100个1GB文件(用urandom填充)。我先把它们搞定了。证实所有100个都在那里和正确的文件大小。然后我运行'rsync -Sa〜/ source /〜/ destination',看到所有100个文件再次同步,这次通过'rsync'进行同步。你说的这些不是“部分拷贝”。它们是相同的副本,通过'scp'从一台服务器发送到另一台服务器。我错过了什么?第一个'scp'花了4m44s。 rsync(在所有的文件都是'scp'之后)花了16m12s。我希望'scp'需要<5m,确认只需几个'ms'。 – Ryan

回答

1

默认情况下,rsync使用快速检查方法,该方法仅传输大小不同或上次修改时间不同的文件。如您所报告的尺寸不变,这似乎表明时间戳不同。有两种处理方法:

  • 使用-p可以在传输文件时保留时间戳。

  • 使用--size-only忽略时间戳并仅传输大小不同的文件。

相关问题