2015-03-02 100 views
1

我正在嘗試使用grsync(用於rsync的GUI)運行備份。在我備份的目錄中,有許多更大的文件會定期更新。我希望能夠僅對這些文件的更改進行同步,而不是將每個備份的整個文件同步。我的印象是,rsync是塊級文件複製器,只能複製每次同步之間已更改的字節。也許情況並非如此,或者我誤解了塊級文件的應對方式!塊級複製和Rsync

爲了測試這個,我使用了grsync來同步兩個目錄之間的5GB zip文件。然後我將一個非常小的文本文件添加到zip文件並再次運行grsync。然而它繼續複製整個zip文件。是否有一個實用程序只會複製對此zip文件的更改而不是整個文件?或者,grsync中是否有可用於此效果的命令?

回答

0

如果您將文件添加到壓縮文件中,則如果該文件作爲壓縮文件中的第一個文件添加,則整個壓縮文件可能會更改。整個檔案將會轉移。所以你的不是一個有效的測試。

0

整個文件被複制的原因很簡單,當在本地文件系統上的兩個目錄之間進行復制時,處理塊級更改的算法被禁用。

這會工作,因爲該文件正被複制(或更新)到遠程系統:

rsync -av big_file.zip remote_host: 

這將不使用「增量」的算法和整個文件將被複制:

rsync -av big_file.zip D:\target\folder\ 

的一些注意事項

  1. 即使目標是網絡共享,rsync會將其視爲本地文件系統的路徑,並將禁用「delta」(塊更改)算法。
  2. 將數據添加到數據文件的開頭或中間不會影響處理塊級更改的算法。兩個本地目標之間複製時,因爲它需要讀取源,以確定哪些塊需要完全改變目標文件都

理由

增量算法失效。理由是讀取目標文件所花費的時間與寫入目標文件所花費的時間大致相同,所以先閱讀它並沒有意義。

解決方法

如果您知道明確的,從你的目標文件系統讀比寫它,你可以強制塊級算法通過包括--no-whole-file標誌跑得更快顯著