【发布时间】:2017-10-25 02:52:36
【问题描述】:
我需要比较两个目录来验证备份。
假设我的目录如下所示:
Filename Filesize Filename Filesize
user@main_server:~/mydir/ user@backup_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/ user@backup_server:~/mydir
我不能用rsync 来备份目录本身,因为它需要的时间太长(8-24 小时)。相反,我运行scp 的多个线程来批量获取文件。这定期完成
速度是重中之重,因此文件大小应该足够。但我愿意加入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 user@backup_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/ user@backup_server:~/mydir
# Way too slow
你有什么推荐的?
【问题讨论】:
-
如果您有预算,有商业文件传输解决方案,其性能比 SCP 或 SFTP 好得多。
-
如果您已经有部分副本,如您所见,
rsync应该比scp快得多。 -
@John1024,谢谢。我刚刚在测试中尝试过:备份 100 个 1GB 文件(充满 urandom)。我先
scp他们。确认所有 100 个都在那里并且文件大小正确。然后我运行rsync -Sa ~/source/ ~/destination并看到所有 100 个文件再次同步,这次是通过rsync。正如你所说,这些不是“部分副本”。它们是相同的副本,通过scp从一台服务器发送到另一台服务器。我错过了什么?第一个scp花了 4 分 44 秒。 rsync(在所有文件都被scp'd 结束之后)花费了 16 分 12 秒。我希望scp需要 ms。 -
@Ryan 默认情况下,
rsync使用 快速检查 方法,该方法仅传输大小或上次修改时间不同的文件。什么是源文件系统和目标文件系统(ext4、ntfs、...)?或者,有什么东西会影响源或目标上的时间戳吗? -
@John1024,谢谢!这完全是正确的方向。我添加了
-p以保留时间。文件大小相同,但时间不同。不再。rsync在scp中保存时间后立即运行。如果您想在回答中提出建议,我很乐意奖励您的意见。
标签: bash shell backup rsync scp