【Linux】Rsync, 複製備份都好用

圖片來源
https://unihost.com/help/how-to-use-rsync-to-sync-local-and-remote-files-and-directories/
 

要進行不同台電腦之間的資料交換

Rsync 是大家的選擇之一

以下這篇作為 Rsync 的筆記



安裝
Client端或是Server端都需要安裝 Rsync

yum -y install rsync
sudo apt-get install rsync
 


常見參數

  • -v:verbose 模式,輸出詳細訊息
  • -r:遞迴備份所有子目錄下的目錄與檔案
  • -a:遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記
  • -z:啟用壓縮
  • -h:將數字以比較容易閱讀的格式輸出
  • --bwlimit=xxxK:限制網路頻寬
  • -e:ssh 連接埠號
    rsync -avzh -e 'ssh -p 12345' /mypath/myfile.gz pi@192.168.1.12:/mybackup/
  • --progress 顯示傳送進度
  • --delete:同步刪除檔案,假如來源端的檔案已不存在,就會把遠端存在的刪除
  • --exclude:排除特定檔案,一定要放在include之後
  • --include:只備份某些特定檔案
  • --min-size:限定檔案大小下限
  • --max-size:限定檔案大小上限
  • --remove-source-files:備份後刪除來源檔案
  • --dry-run:測試 rsync,測試指令,會輸出訊息,但不會備份
  • --existing:排除新增的檔案,只更新既有的


實例:

A Machine 透過跳板機(Jumphost) B 將資料備份到 Server C

在 A Machine 產生金鑰,並設定在 B 和 C (如果沒有就用密碼)

建立 ssh 的 config

Host JumpBox
    HostName xx.xx.xx.xx
    User changd
    IdentityFile ~/.ssh/id_rsa
    
Host DevelopDrive
    HostName xx.xx.xx.xx
    User changd
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh -q -W %h:%p JumpBox
接著試試看能不能直接 ssh 連線到 B 和 C
ssh JumpBox
ssh DevelopDrive

假如出現 primary key too open 的錯誤導致無法連線

這時要對私鑰更改權限

chmod 600 ~/.ssh/id_rsa

接著重新 ssh 看看 B 和 C

如果都能順利連線

就可以使用 rsync 將檔案從 A 丟到 C 囉

rsync -av git/test/ DevelopDrive:test
 
未來如果發現更多 Rsync 的用法都會在這篇更新更多資訊