假設我有一個包含 2 個檔案的目錄,兩個檔案都是相同的並且相當大(例如 2GB ea)。據我了解(我可能是錯的),rsync 計算文件的校驗和。當然,如果它看到兩個具有相同校驗和的文件,它可以只複製第一個文件,然後在遠端主機上為第二個文件進行本地複製?這樣會更快,不是嗎?
同樣,rsync 在複製之前不會對所有遠端檔案進行雜湊處理嗎?如果它看到與要傳輸的文件具有相同哈希值的不同文件,它可以在遠端主機上進行本地複製。
rsync 支持這種事嗎?有什麼辦法可以打開它嗎?是否有類似於 rsync 的工具可以執行這種「基於雜湊」的本機副本?
答案1
同樣,rsync 在複製之前不會對所有遠端檔案進行雜湊處理嗎?如果它看到與要傳輸的文件具有相同哈希值的不同文件,它可以在遠端主機上進行本地複製。
不是,但齊奏做。
答案2
我認為目前還沒有任何產品可以作為單一軟體包來實現這一點。有 WAN 優化器可以為您執行此操作,然後您仍然執行 RSYNC。
您正在尋找的是重複資料刪除/重複資料刪除過程。理想情況下,您實際上不想進行重複資料刪除,而是在本機上進行重複資料刪除,然後執行 RSYNC。這樣您只需複製鏈接,而不是擴展另一側的文件。
答案3
如果兩個文件確實相同,那麼您必須 rsync 其中一個文件,然後在 rsync 進程之外的遠端單獨製作本機副本。
如果您有兩個相同的文件,那麼 rsync 將嘗試複製它們 - 文件名稱而不是校驗和是最重要的識別碼。 (我剛剛在我的筆記型電腦上測試過!)
包裝 rsync 來做你提到的一些事情會很有趣...
這些值得一讀:
答案4
--fuzzy 選項可能做你正在尋找的事情:
從手冊頁:
-y, --fuzzy
此選項告訴 rsync 它應該為任何遺失的目標檔案尋找基礎檔案。當前演算法在與目標檔案相同的目錄中尋找具有相同大小和修改時間的檔案或名稱相似的檔案。如果找到,rsync 將使用模糊基礎檔案來嘗試加快傳輸速度。
如果沒有,具有相關程式設計技能的人應該能夠輕鬆地調整該選項,使其按照您所描述的方式運行 - 儘管這可能不是您想要參與的事情!