以前做備份都是用 tar 在打包,在本機上移動到其他的磁碟,都沒想過把備份檔透過網路傳輸至其他機器備份等等。

因此這邊來介紹 rsync 這個指令,可以透過 rsh、ssh 將檔案做鏡像備份及增量備份至遠端機器。


rsync 參數

-v:觀察模式,列出更多資訊(檔案名稱等等)。

-q:與 -v 相反,僅列出錯誤訊息。

-r:遞迴複製,用在多層目錄及檔案時。

-u:僅更新檔案,增量備份的作法。若目的地檔案較新,則不更動。要注意可能覆寫舊資料!

-l:保留 symbolic link  的屬性,非檔案內容。

-p:保持原有檔案的屬性(rwx)。

-g:保持原有檔案的擁有群組。

-o:保持原有檔案的擁有者。

-D:保持原有檔案的裝置屬性。

-t:保持原有檔案的時間屬性。

-I:忽略檔案的 mtime,在增量備份比對時會比較快速。

-z:資料傳輸時,加上壓縮。

-e:使用的通道協定。如:-e ssh

-a:相當於 -rlptgoD

rsync 的三種模式

  • 本機上備份(複製),其實就相當於cp,只是你可以顯示更多資訊
    如:將 np 資料夾底下的所有東西複製至 tmp 資料夾
    rsync -av np/ tmp/
  • 透過 rsh 或 ssh 協定在 不同機器間傳輸備份
    如:將遠端機器的 etc 資料夾備份至此機器的 tmp 資料夾
    rsync -av -e ssh user@host:/etc tmp

    ps. 兩端機器必須都要支援 rsync
  • 直接透過 rsync 開啟 server 來傳輸(ubuntu),兩端機器必須都要支援 rsync且需要 root 權限  
    • vim  /etc/init.d/rsync (更改開機開啟 rsync server,會佔用873 port)
      RSYNC_ENABLE=true
    • 新建 /etc/rsyncd.conf (設定檔) 與 /etc/rsyncd.secrets (帳號密碼) 兩個檔案
      rsyncd.conf

      [backup1]                             //module name
      comment = backup dmz web              //說明           
      path = /home/rsync/backup1            //存放備份資料的路徑
      auth users = backup1                  //認證帳號(設定在rsyncd.secrets的帳號)
      uid = backup1                         //以uid backup1來啟動rsync server(所以 /home/rsync/backup1 的 owner 要設為 backup1)      
      gid = backup1                         //以gid backup1來啟動rsync server(所以 /home/rsync/backup1 的 group 要設為 backup1)      
      secrets file = /etc/rsyncd.secrets    //密碼檔存放路徑
      read only = no

      rsyncd.secrets

      user:password
      backup1:backup1
    • 更改 rsyncd.secrets 權限,重新啟動 rsync server
      chmod 600  rsyncd.secrets
      service rsync start 
    • 透過 sync daemon 備份
      rsync -av bckup1:backup1@host::/etc/

參考資料:

http://linux.vbird.org/linux_server/0310telnetssh.php#rsync

Leave a Reply