rsync 以前就知道了,只是一直沒試過,以為它是 不安全的檔案傳輸方式,最近才知道它可以配合ssh做遠端的安全資料備援, 從 rsync原廠網站得知它的特色如下:
- 可更新整個目錄結構及檔案系統
- 可保留soft link、hard link、檔案擁有者、檔案權限、設備(? 不瞭)和檔案更新時間
- 安裝時不需要特殊的權限
- 多檔案傳輸效率高
- 可配合rsh、ssh或直接的sockets來傳輸資料
- 支援anonymous(匿名)方式傳輸,做site mirror很方便
root@ HostA(欲備份資料) ----> root@ ServerB(rsync server, 存放備份)
192.168.1.5 192.168.1.100
0) ssh前置動作:(ssh免密碼登入)
為了日後備份自動化,所以我要先做 HostA上的root 利用ssh 免密碼登入 ServerB,
產生 DSA 金鑰一對 (Public key & Private key)
root@HostA#
ssh-keygen -t dsa
- 預設會存在家目錄下的目錄「.ssh」
- 如果有需要的話, passphrase要設定密碼,我是沒設直接按 Enter
將 HostA's root的Pub key放到 ServerB's root 家目錄的「.ssh」下,
root@HostA#
scp ~/.ssh/id_dsa.pub 192.168.1.100:/root/.ssh/.
(First time)還是需要密碼登入至 ServerB,
root@HostA#
ssh root@192.168.1.100
將HostA's root目錄下的public key轉存為系統預設處理放置公鑰的檔案「authorized_keys」,
root@ServerB#
cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
Logout ServerB,重新登入, 金鑰符合的話,此時已不需要密碼認證了,
root@HostA#
ssh root@192.168.1.100
==========至此前置工作完成!!
1) 確認安裝情況: (如果沒安裝的話,就執行apt-get install rsync)
#
dpkg -l rsync
||/ 名稱 版本 簡介
====================================================
ii rsync 3.0.7-1ubuntu1 fast remote file copy program (like rcp)
2) Server端設定: (存放備份資料的主機)
可以使用anonymous 或是 module設定(Ref:
/etc/rsyncd.conf),這
root@ServerB#
vi /etc/default/rsync
RSYNC_ENABLE=true
server端要改 faluse 為 true
啟動 rsync server服務,使設定生效:
root@ServerB#
service rsync restart
測試一下 rsync 服務的Port有沒有問題:(rsync default port: Port 873)
root@ClientA# telnet 192.168.1.100 873
3) Client端設定:
決定要備份的目錄, 例如:
/var/backup/2010-12-12_21.03.56.908806.x32.ful/ ,
4) rsync備份指令執行: (Ref:
rsync) 這動作稱: Push via rsync daemon, 也就是clientA的 rsync server不用啟動也ok, 它另有不同方向的執行動作, 請使用「man rsync」
root@clientA#
rsync -avSH --delete -e ssh /var/backup/2010-12-12_21.03.56.908806.x32.ful/ root@192.168.1.15:/var/backups/
.......(執行過程如下)
參數說明:
-a, archive mode; equals -rlptgoD
-v, increase verbosity
-S, handle sparse files efficiently
-H, preserve hard links
-l, copy symlinks as symlinks
-r, recurse into directories
-p, preserve permissions
-t, preserve modification times
-g, preserve group
-o, preserve owner (super-user only)
-D, preserve device files (super-user only)
--delete, delete extraneous files from dest dirs
-e, specify the remote shell to use |
- 只有第一次備份的動作會比較久(∵是 full backup), 之後備份執行時,rsync就會比較檔案的差異性,備份新增的部份(incremental backup),若clinet端的檔案有刪減的話,執行rsync時也會同步server端的備份目錄清況.
- Clinet與 Server的 rsync使用者目錄權限要注意, 例: Client端 user要對備份過去的目錄有read的權利 & Server端的登入user也要對放置備份的目錄有write的權利,我是為了方便起見才兩邊都用root,但要注意某些rsync參數只有root才能使用.
- 可以寫一個script去專門做 rsync重要資料 ,並放入crontab內讓系統排程執行.
Done!!
[Linux]使用rsync+ssh自動同步網站檔案