
如果我使用遠端主機 (ssh://) 作為來源/目標運行 rsync 或使用本機路徑透過 sshfs 共享掛載目錄,有什麼區別嗎?
在不使用任何開關的情況下,安全性或複製速度方面可能存在差異,只需使用 rsync 存檔模式和遠端主機路徑 (ssh)。與 sshfs 掛載相同,僅包含來源和目標(沒有密碼更改,只是預設)。
答案1
SSHFS 很方便,但它與 rsync 或更一般的同步工具無法很好地配合。
最大的問題是SSHFS很大程度上扼殺了rsync的效能最佳化。特別是,對於中型到大型文件,當 rsync 發現文件已被修改時,它會計算文件每一側部分的校驗和,以便僅傳輸已修改的部分。只有當網路頻寬明顯小於磁碟頻寬時(通常是這種情況),這才是一種最佳化。但對於 SSHFS,「磁碟」頻寬實際上是網路頻寬,因此 rsync 必須讀取整個檔案才能確定要複製的內容。事實上,對於本機副本(就 rsync 而言,即使其中一側位於 SSHFS 上),rsync 只是複製整個檔案。
如果存在許多小文件,SSHFS 也會損害效能。 Rsync 至少需要檢查每個檔案的元資料以確定它是否被修改。對於 SSHFS,這需要每個檔案進行一次網路往返。透過rsync over SSH,兩端可以並行工作並批量傳輸訊息,速度要快很多。
在存取限制方面,SSHFS 需要 SFTP 訪問,而 rsync 需要能夠透過 shell 運行程式碼(具體來說,rsync 程式)。如果使用者沒有 shell 帳戶,則可以提供具有特殊 shell 的帳戶,該帳戶僅允許執行包含sftp-server
和在內的少數程式rsync
。看SCP 需要外殼嗎?
如果您只是複製新文件並且文件數量不是很多,則不會有任何有意義的效能差異。
SSHFS 在安裝檔案系統時建立 SSH 連接,並保留該連接直到卸載。 Rsync 每次運行時都會建立一個新連接,但您可以使用多路復用功能並搭載在單一主連線上以避免每次都進行身份驗證。
SSHFS 是一個 FUSE 檔案系統,因此僅支援傳統的 Unix 元資料和 ACL。 rsync 可以傳輸擴充屬性(需要使用rsync -aAX
,注意 plain-a
只保留傳統的 Unix 元資料)。
答案2
回答你的主要問題:是的,有差異。如果sshfs
存在允許透過安全通道存取遠端檔案的現有連接,並且透過 ssh 進行 rsync,則安全通道已設定完畢與遠端 rsync 實例對話。
回答你的第二個問題:對於大多數實例(如果不是所有實例)來說,透過ssh 進行的rsync 會更快,因為遠端系統上的rsync 在尋找不需要同步的檔案方面提供了更多智能,但主要是因為它與您的檔案並行運行。
假設 ssh 參數(金鑰長度、演算法)的配置相似,這兩種方式的安全性都是相同的。來源系統和目標系統的預設值取決於這些系統上的發行版組合。