rsync 可以更新僅部分變更而不完全重傳的大檔案嗎?

rsync 可以更新僅部分變更而不完全重傳的大檔案嗎?

我正在對一個非常大的文件圖像文件(只有幾個像素的差異)進行微小的更改,這需要很長時間才能通過網路傳輸。

rsync 有沒有辦法識別文件中的差異並僅透過網路發送小的差異?

答案1

rsync增量傳輸演算法預設執行此操作。引用rsync 線上說明頁

描述

Rsync 是一種快速且用途廣泛的檔案複製工具。它可以透過任何遠端 shell 在本地複製到另一個主機或從另一個主機複製到遠端 rsync 守護程式或從遠端 rsync 守護程式複製。它提供了大量的選項來控制其行為的各個方面,並允許非常靈活地指定要複製的檔案集。它以其增量傳輸演算法而聞名,該演算法透過僅發送原始檔案與目標中現有檔案之間的差異來減少透過網路發送的資料量。 Rsync 廣泛用於備份和鏡像,並作為日常使用的改進複製命令。

如果您想停用它,則必須使用-W--whole-file選項。

-W, --整份文件

此選項會停用 rsync 的增量傳輸演算法,這會導致所有傳輸的檔案完整傳送。當來源電腦和目標電腦之間的頻寬高於磁碟頻寬時(特別是當「磁碟」實際上是網路檔案系統時),如果使用此選項,傳輸可能會更快。當來源和目標都指定為本地路徑時,這是預設設置,但前提是沒有有效的批次寫入選項。

如果您確實知道檔案已更改了多少,您甚至可以透過調整增量區塊大小來優化增量傳輸行為:

-B,--區塊大小=區塊大小

這迫使 rsync 的增量傳輸演算法中使用的區塊大小為固定值。通常根據要更新的每個檔案的大小來選擇。詳細內容請參閱技術報告。

如果您想了解有關演算法本身的更多信息,可以在這裡找到:Rsync演算法

答案2

您正在尋找的是--partial--inplace選項。我昨天發現了這些,因為我需要透過網路更新 100 GB 到 300 GB 的單一檔案。它與較新版本的 rsync 配合使用也效果最佳。 cygwin裡的那個好像根本就不好用。但從任何半現代的Linux到Linux,限制不是網絡,而是每一端讀取已傳輸檔案的速度。

我具體用這個:

rsync -avPHx --inplace --partial src/foo remote_host:/target/path/

編輯 - 來源是https://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/- 請注意--append,來源文章中提到的,可能很危險,因為如果文件增長,並且中間發生變化,--append山將無法按預期工作。本質上僅用於--append諸如僅附加到的日誌檔案之類的事情。

答案3

關於 rsync 的操作方式,每個人都說是對的,但對影像進行微小更改可能導致檔案發生微小更改的唯一格式是原始點陣圖格式(.bmp、.pnm、某些類型的 .tif)。通常的 .png 或 JPEG,或者 Gimp 或 Photoshop .xcf 或 .psd 文件,這些文件已經被壓縮,因此很可能一個小的圖像更改會導致磁碟上幾乎完全不同的文件。這就是為什麼 rsync 的 delta 演算法看起來相當無效的原因。

相關內容