Linux異地備份(rsync)

如將Linux的資料備份分成三個方向來說

- cp (copy files and directories)

- scp (secure copy "remote file copy program")

- rsync (faster, flexible replacement for rcp "remote file copy" )

---------------------------------------------------------------------------------
cp 為 unix 內建的指令,基本的用法為 cp [參數] 來源 目的

例:如果你想複製目錄及檔案,並且維持原有檔案的時間及權限,你可以

cp -pr 來源目錄/檔案 目的地 ( ex: cp -pr /home /backup/home )

其中 r 是代表 recursive 遞迴的複製,而 p 代表要維持原有的權限
---------------------------------------------------------------------------------
scp 通常會放在 /usr/bin/scp (可以用 which 或 whereis 找一下)

scp copies files between hosts on a network. It uses ssh for data transfer, and uses the same authentication and provides the same security as ssh.

scp的傳輸會以SSH來作為加密,也可以拿來做本機檔案複製,
一般用來作遠端的複製,並且用SSH加密保護傳輸的過程。


scp [-P 連接埠] [-pr] 來源(user@IP:/目錄檔案) 目的地(user@IP:/目錄檔案)

假設你要從 192.168.1.1 複製所有 a開頭的檔案,並維持原有權限,你可以用

scp -pr someone@192.168.1.1:~/directory/a* /backup/someone

當然你也可以把目的地端改成遠端,這樣就可以做檔案上傳了。
---------------------------------------------------------------------------------
rsync 不一定會內建於 unix 系統裡了,通常他會放於 /usr/bin/rsync

rsync 官方網站 http://rsync.samba.org/

Rsync uses a reliable algorithm to bring remote and host files into sync very quickly. Rsync is fast because it just sends the differences in the files over the network instead of sending the complete files. Rsync is often used as a very powerful mirroring process or just as a more capable replacement for the rcp command.

執行 rsync 要注意的項目

- 複製(client)與目的(server)主機都需要安裝 rsync
- 目的(server)主機的防火牆需要開放 873 port 
(可以透過修改 /etc/services 變更)
- 目的(server)主機需要設定 /etc/rsyncd.conf 
  與 /etc/rsyncd.secrets(名稱可自取)
- 來源(client)主機要設定 /etc/rsyncd.secrets(名稱可自取)

本機備份可以用「rsync -av --delete 來源目錄 目的目錄」簡單的來做兩個資料夾的同步,第一次會自動幫你在目的目錄建立起該有的子目錄。

----------------------------目的(server)主機 - 設定-------------------------------------------------
1.確認套件是否安裝(目的主機以及來源主機皆得安裝)
#yum info rsync 
輸入此指令如果沒有安裝rsync則會自動安裝

 # rpm -qa | grep rsync
出現此訊息即代表有安裝rsync



#rpm -qa | grep xinetd




用來執行rsync,輸入指令後如沒有出現圖上字樣就補安裝
#yum -y install xinetd


修改 /etc/xinetd.d/rsync 設定(需自行新增rsync檔案)

#vim /etc/xinetd.d/rsync

service rsync

{
     disable = no                            #預設是yes的改為 no


     socket_type     = stream         #使用 TCP 的連線機制之故  



     wait   = no                              #可以同時進行大量連線功能  



     user   = root                            #啟動服務為 root  

     server = /usr/bin/rsync           #啟動服務的程式所存放的位置  

     server_args   = --daemon       #程式參數

     log_on_failure  += USERID   #登入錯誤時,額外記錄使用 ID
}

啟動xinetd(設定完需要重新啟動)
#service xinetd start (restart)
設定開機自動啟動xinetd服務
#systemctl start xinetd 
#systemctl enable xinetd

2.設定(新增)/etc/rsyncd.conf

※此檔案預設不存在,如果沒找到就自行新增



設定連線的帳號密碼(此檔案需要自行建立)
#vim /etc/rsyncd.secrets

※修改rsyncd.secrets使用權限

#chmod 600 /etc/rsyncd.secrets

#chown root.root /etc/rsyncd,secrets

設定完後重新啟動xinetd

#service xinetd restart

測試 873 port是否正常啟用

#netstat -tnlp | grep 873


#telnet localhost 873

如出現類似

rsync: mkstemp "/.anthony.v6xvr6" (in web) failed: Permission denied (13)

則需修改SeLinux權限

讓無權限的使用者可以寫入
# setsebool -P allow_rsync_anon_write=1
設定目錄寫入權限
# chcon -t public_content_rw_t /home/backup(目的資料夾)


----------------------------來源(client)主機 - 設定-------------------------------------------------
1.在此主機上只需要建立密碼檔
#vim /etc/rsyncd.secrets
直接鍵入密碼即可不需輸入帳號

2.測試rsync是否可將資料傳輸到Server端主機
#/usr/bin/rsync -rvlHpogDtS --delete --password-file=/etc/rsyncd.secrets /home/junhan/ root@192.168.158.56::backup


3.設定排程

先建立一個shell script
#vim /home/rsync.sh

設定排程
#crontab -e

這邊設定是每天凌晨12點執行rsync備份






留言