如何比较重复目录之间的文件大小匹配?

时间:2017-05-24 16:24:37

标签: bash shell backup rsync scp

我需要比较两个目录来验证备份。

说我的目录如下所示:

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的多个线程来批量获取文件。这定期完成<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 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

你推荐什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,rsync使用快速检查方法,该方法仅传输大小不同或上次修改时间不同的文件。当您报告大小不变时,这似乎表明时间戳不同。处理此问题的两个选项是:

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

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