Rsync
rsync 可以更新僅部分更改而沒有完全重傳的大文件嗎?
我正在對一個非常大的文件圖像文件(只有幾個像素差異)進行微小的更改,這需要很長時間才能通過網路傳輸。
rsync 有沒有辦法辨識文件中的差異並僅通過網路發送小的差異?
rsync
delta-transfer 算法預設執行此操作。引用rsync 聯機幫助頁:描述
Rsync 是一種快速且用途廣泛的文件複製工具。它可以在本地複制,通過任何遠端 shell 複製到另一台主機或從遠端 rsync 守護程序複製。它提供了大量選項來控制其行為的各個方面,並允許非常靈活地指定要複製的文件集。它以其增量傳輸算法而聞名,該算法通過僅發送源文件和目標中現有文件之間的差異來減少通過網路發送的數據量。Rsync 廣泛用於備份和鏡像,並作為日常使用的改進複製命令。
如果要禁用它,則必須使用
-W
or--whole-file
選項。-W,–整個文件
此選項禁用 rsync 的 delta-transfer 算法,這會導致所有傳輸的文件被完整髮送。如果在源機器和目標機器之間的頻寬高於到磁碟的頻寬時使用此選項,傳輸可能會更快(尤其是當“磁碟”實際上是網路文件系統時)。當源和目標都被指定為本地路徑時,這是預設設置,但前提是沒有批處理寫入選項生效。
如果你真的知道你的文件改變了多少,你甚至可以通過調整你的增量塊大小來優化這個增量傳輸行為:
-B,–塊大小=塊大小
這會強制 rsync 的 delta-transfer 算法中使用的塊大小為固定值。通常根據要更新的每個文件的大小來選擇它。詳見技術報告。
如果你想了解更多關於算法本身的資訊,你可以在這裡找到:The Rsync algorithm