利用 rsync 在兩個慢速驅動器之間進行本地副本,無需守護程序即可獲得好處
如果沒有遠端執行的守護程序,例如從通過 SMB2(通過 VPN)安裝的驅動器複製到外部 HDD(遺憾的是 USB 2.0),我對 rsync (3.1.1) 的好處感到困惑。兩個連接都很慢(我的數據約為 1TB),但我很困惑,如果所有這些都需要我的 CPU 首先讀取數據,那麼壓縮或仔細的差異如何能加快速度,不是嗎?從這個意義上說,兩個驅動器都是本地的。(我無法通過 rsync 將 SMB 連接替換為 SSH,因為它無法處理我的密碼。)或者即使使用遠端驅動器,如果另一端沒有人在數據到達本地 CPU。
對於這樣的副本,這是一個合理的設置嗎?
rsync -vhcrC --progress src dest
-c: Maybe checksums are a bad idea, file size and timestamp might be the only thing rsync can check without loading the data in in the first place. -h: human-readable output -v: verbose -C: skipping what CVS skips
省略:
-a: I am not interested in archiving, as files move from Windows to mac, permissions will change anyway, I think -z: this is the compression issue -W: sometimes copying whole-files-only use less of the CPU, but some files are really big here (~100GB), and an interrupted transfer is better restarted
注意:以下都是理論 - 確保在您的情況下這是正確的真正正確的方法是對各種選項組合執行測試。
rsync 操作中的數據連接如下所示:
Source disk <-> rsync instance <-> other rsync instance <-> destination disk
一般來說,rsync 是為第一個和最後一個連結(在 rsync 實例和它們的磁碟之間)快速而中間連結(在 rsync 實例之間)很慢的情況而設計的。對於
-z
(壓縮)和-c
(校驗和文件來決定傳輸哪個文件)尤其如此;在兩個 rsync 都在同一台電腦上的情況下(因此具有快速連接),這些選項基本上沒有意義。更具體地說:該
-z
選項通過中間鏈路壓縮數據,以犧牲兩端較高的 CPU 負載換取中間鏈路上較低的頻寬需求。如果中間連結速度很快,請跳過此選項以節省 CPU。至於
-c
選項,這會強制兩個 rsyncs 讀取所有不需要完全同步的文件,以真正確保它們不需要同步。如果一個或兩個磁碟連結很慢,並且有很多文件已經同步,這將按比例減慢程序。只要您不需要擔心文件內容會發生變化而時間戳也會發生變化,那麼您應該避免這種情況。請注意,除非您還添加-t
選項(或-a
),否則省略它並沒有多大用處,因此它將複製時間戳——沒有這些,無論如何它都必須比較所有內容。您可能還想添加
-W
選項(只需複制整個文件,跳過比較並查找更改),因為這樣可以避免額外讀取修改後的文件。不過,這可能不是必需的,因為當源和目標都被指定為本地路徑時,我熟悉的所有 rsync 版本都會自動執行此操作(即使這些本地路徑之一恰好在網路內也應該適用掛載點)。簡短摘要: remove
-c
, add-t
和 maybe-W
。