前言
將文件從一台計算機同步或備份到另一台計算機的快速簡便的方法是使用rsync。我將介紹通常用於備份數據的命令行選項,並顯示一些選項以極大地將傳輸速度從大約20-25 MB / s加快到90 MB / s以上!
rsync的簡短描述
rsync協議能夠有效地在計算機之間同步文件。它僅通過傳輸更改的文件來完成此操作,除此之外,它還嘗試僅傳輸本地文件和遠程文件之間的差異,以進一步最小化傳輸的數據大小。
底層數據傳輸使用Secure Shell或 SSH保護,這增加了另一層計算開銷來安全地加密數據,然后傳輸到遠程服務器並再次對其解密。因為我大部分時間都在使用計量互聯網連接,所以我在SSH中使用了最大可能的壓縮率,這在本地和快速網絡中使用rsync時會成為瓶頸。
使用的命令行參數說明
我的默認命令行參數,帶有完整rsync手冊頁中的描述:
- -a:存檔模式(等於-rlptgoD):遞歸,將符號鏈接復制為符號鏈接,保留權限,保留修改時間,保留組,保留所有者,保留設備文件和特殊文件
- -v:在傳輸過程中增加詳細信息
- -u:跳過接收方上較新的文件
- -r:遞歸到目錄
- --progress:顯示傳輸過程中的進度
- --delete:從遠程服務器中刪除多余的文件
優化的rsync的性能
SSH的最大壓縮(在我的配置中默認使用)對帶寬較小的計量連接很有幫助,在這種情況下,您可以從減少的數據量中節省時間。在本地快速網絡中,這實際上是瓶頸,並且在SSH命令的100%CPU使用率中體現出來。在這種快速的本地網絡中,無需進行任何壓縮即可直接傳輸文件,因為壓縮和解壓縮會比僅傳輸普通文件花費更長的時間。
為此,可以使用以下選項來加速本地網絡中的數據傳輸:
- -T:在目標上的可行偽tty分配
- -c aes128-ctr:選擇一個較弱但較快的SSH加密。其他人指定arcfour,這將需要在目標主機上手動修改ssh_config。這並非總是可能的,並且這種加密對我來說效果很好。
- -x:禁用X11轉發
- -o Compression = no:禁用上述SSH壓縮瓶頸
- -z 選項也可能會降低性能,如果不通過慢速鏈接傳輸數據,則不應該使用它
- --inplace 原地替換,即不會生成臨時文件, 不會有mv tmp target。
- --exclude-from或類似的排除您可能不需要的文件將減少時間,但不會增加傳輸速度。
-S
/--sparse
:將空序列變成稀疏塊--partial
或者-P
是--partial --progress
:保存任何部分傳輸的文件以供將來恢復。注意:文件不會有臨時名稱,因此請確保在整個副本完成之前,沒有其他期望使用目標的文件。--no-whole-file
這樣需要重新發送的任何內容都會使用增量傳輸。讀取部分傳輸的文件的一半通常比重新寫入要快得多。--inplace
避免文件復制(但前提是在整個傳輸完成之前沒有任何內容讀取目標)- 為傳輸的不同部分運行rsync的多個實例可能會很有幫助
- -u 只傳輸增量文件
完整的命令將foo文件夾備份到 目標主機desthost上的遠程文件夾欄,然后:
export RSYNC_RSH ="ssh -T -c aes128-ctr -o Compression = no -x"
rsync -avur --progress --delete foo desthost::bar
使用此命令,可以將傳輸速率從大約20-25 MB / s增加到90 MB/s以上!
參考說明:
1. 稀疏文件是一種計算機文件,它能嘗試在文件內容大多為空時更有效率地使用文件系統的空間。它的原理是以簡短的信息表示空數據塊,而不是在在磁盤上占用實際空間來存儲空數據塊。只有真實的數據塊會按原樣寫入磁盤。 在讀取稀疏文件時,文件系統會按元數據在運行時將這些透明轉換為“真實”的數據塊,即填充為零。應用程序不會察覺這個轉換。