rsync性能終極優化【Optimize rsync performance】

前言

將文件從一臺計算機同步或備份到另外一臺計算機的快速簡便的方法是使用rsync我將介紹一般用於備份數據的命令行選項,並顯示一些選項以極大地將傳輸速度從大約20-25 MB / s加快到90 MB / s以上!linux

rsync的簡短描述

rsync協議可以有效地在計算機之間同步文件。它僅經過傳輸更改的文件來完成此操做,除此以外,它還嘗試僅傳輸本地文件和遠程文件之間的差別,以進一步最小化傳輸的數據大小。
底層數據傳輸使用Secure Shell或  SSH保護,這增長了另外一層計算開銷來安全地加密數據,而後傳輸到遠程服務器並再次對其解密。由於我大部分時間都在使用計量互聯網鏈接,因此我在SSH中使用了最大可能的壓縮率,這在本地和快速網絡中使用rsync時會成爲瓶頸。git

使用的命令行參數說明

個人默認命令行參數,帶有完整rsync手冊頁中的描述

github

  • -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 ssh

使用此命令,能夠將傳輸速率從大約20-25 MB / s增長到90 MB/s以上!性能

 

 

參考說明:

1. 稀疏文件是一種計算機文件,它能嘗試在文件內容大多爲空時更有效率地使用文件系統的空間。它的原理是以簡短的信息表示空數據塊,而不是在在磁盤上佔用實際空間來存儲空數據塊。只有真實的數據塊會按原樣寫入磁盤。 在讀取稀疏文件時,文件系統會按元數據在運行時將這些透明轉換爲「真實」的數據塊,即填充爲零。應用程序不會察覺這個轉換。優化

相關文章
相關標籤/搜索