2017-05-24 56 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忽略時間戳並僅傳輸大小不同的文件。