如何比较重复目录之间的文件大小匹配?
问题描述:
我需要比较两个目录来验证备份。如何比较重复目录之间的文件大小匹配?
说我的目录如下所示:
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
你有什么建议?
答
默认情况下,rsync使用快速检查方法,该方法仅传输大小不同或上次修改时间不同的文件。如您所报告的尺寸不变,这似乎表明时间戳不同。有两种处理方法:
使用
-p
可以在传输文件时保留时间戳。使用
--size-only
忽略时间戳并仅传输大小不同的文件。
如果你有预算,有商业文件传输解决方案比SCP或SFTP有更好的性能。 – Kenster
如果您已经有了部分副本,如您所见,'rsync'应该比'scp'快得多。 – John1024
@ John1024,谢谢。我只是在一次测试中尝试过:备份100个1GB文件(用urandom填充)。我先把它们搞定了。证实所有100个都在那里和正确的文件大小。然后我运行'rsync -Sa〜/ source /〜/ destination',看到所有100个文件再次同步,这次通过'rsync'进行同步。你说的这些不是“部分拷贝”。它们是相同的副本,通过'scp'从一台服务器发送到另一台服务器。我错过了什么?第一个'scp'花了4m44s。 rsync(在所有的文件都是'scp'之后)花了16m12s。我希望'scp'需要 Ryan