centos 實作 rsync

、 Rsync設定

這次在rsync設定部份,直接使用範例的方式會比較快了解。



範例 :

把A主機的網頁資料( /home/backup/ ),定期備份到B主機的( /home/backup/)

A主機( Server端 ) IP :192.168.0.112

B主機( Clinet端 ) IP :192.168.0.111



在開始設定之前,有兩個檔案要說明一下:

/etc/rsyncd.conf    為rsync設定檔

/etc/rsyncd.secrets  為rsync 密碼檔



1. 先設定B主機

1.1 在B主機上查詢是否有安裝rsync

[root@localhost ~]# rpm -qa | grep 'rsync'

rsync-3.0.6-12.el6.x86_64


如果沒有安裝的話 請自行補上

[root@localhost ~]# yum -y install rsync



1.2 修改 /etc/xinetd.d/rsync 設定

在這邊所設定的rsync是用xinetd來做啟動的。所以如果在rsync並無特別設定的話,則會依照xinetd.conf所設定的執行。

[root@localhost ~]# vim /etc/xinetd.d/rsync

service rsync

{

        disable = yes  改為 no

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

有關xinetd和rsync 的設定可以參考「xinetd.conf和rsync相關設定說明」



1.3修改rsync.conf 設定檔 (如果沒有此檔的話請自行建立)

   以下所使用到的設定參數請依照需求選取設定。

[root@localhost ~]# vi /etc/rsyncd.conf

###backup config###                      //註解

 [web]                                   //module name(rsync會依此名稱抓取設定)

           comment = backup dmz web      //說明

           hosts allow = 192.168.0.112   //允許使用rsync連入的ip

           hosts deny = *                //不允許連入的ip,*表示全檔

           path = /home/backup/          //存放備份資料的目錄

           auth users = root        //認證帳號 (要設定於 rsyncd.secrets 內的帳號)

           uid = root                    //用來啟動rsync server 的uid

           gid = root                    //用來啟動rsync server 的gid

           secrets file = /etc/rsyncd.secrets      //密碼檔存放路徑

           read only = no                          //是否設定為唯讀

           dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

                                          //不要對這些附檔名的檔案做壓縮



1.4設定連線的帳號密碼 (如果沒有此檔的話請自行建立)

[root@localhost ~]# vi /etc/rsyncd.secrets

root:12345  #(設定格式:  帳號:密碼)



1.5 修改rsyncd.secrets使用權限 (很重要)

[root@localhost ~]# chmod 600 /etc/rsyncd.secrets

[root@localhost ~]# chown root.root  /etc/rsyncd.secrets



1.6重新啟動 xinetd,不是啟動 rsync 。

這邊應該會有人有所疑問,為什麼是重啟xinetd而不是rsync。

在2.1步驟時,是使用xinetd來啟動rsync。因此在這邊是重啟xinetd而不是rsync。

[root@localhost ~]# /etc/init.d/xinetd restart



1.7 設定開機自動啟動xinetd

基本上xinetd,已經有預設開機會啟動,如果沒有話請自行手動設定

[root@localhost ~]# chkconfig xinetd on              #開機自動啟動

[root@localhost ~]# /etc/init.d/xinetd  restart      #手動啟動



 1.8 測試看看是否都正常啟用 (rsync的port為873)

[root@localhost ~]#  netstat -tnlp | grep 873

tcp    0    0 0.0.0.0:873        0.0.0.0:*         LISTEN      4235/xinetd



[root@localhost ~]# telnet localhost 873

#若出現下列訊息表示正常

Trying ::1...

Connected to localhost.

Escape character is '^]'.

@RSYNCD: 30.0




2. 設定A主機

2.1 在A主機上查詢是否有安裝rsync

[root@localhost ~]# rpm -qa | grep 'rsync'

rsync-3.0.6-12.el6.x86_64



如果沒有安裝的話 請自行補上

[root@localhost ~]# yum -y install rsync



2.2 設定登入A主機的密碼

在A主機上只需要設定密碼就可以。 (如果沒有此檔的話請自行建立)

[root@localhost ~]# vi /etc/rsyncd.secrets

12345  #(設定格式:  密碼)



2.3修改rsyncd.secrets使用權限 (很重要)

[root@localhost ~]# chmod 600 /etc/rsyncd.secrets

[root@localhost ~]# chown root.root  /etc/rsyncd.secrets



2.4 測試rsync是否可傳輸資料

在A主機上建立要備份的目錄及資料/home/backup/anthony
在B主機上建立要備份的目錄/home/backup/

[root@localhost ~]# rsync -rvlHpogDtS --password-file=/etc/rsyncd.secrets /home/backup/* root@192.168.0.111::web

#rsync結束後會看到下列訊息

sending incremental file list
anthony

sent 76 bytes  received 27 bytes  206.00 bytes/sec
total size is 5  speedup is 0.05



3設定排程

如果剛才的同步指令沒有問題的話。就可以開始設定排程了

3.1先自行寫一個rsync 的script 用來設定排程

[root@localhost ~]# vi /root/bin/rsync.sh   #存放在/root/bin/(存放位置可自訂)

#!/bin/sh

/usr/bin/rsync -rvlHpogDtS --password-file=/etc/rsyncd.secrets /home/backup/* root@192.168.0.111::web



3.2設定排程

[root@localhost ~]# crontab -e

0 0 * * * /root/bin/rsync.sh


錯誤訊息
1.@ERROR: auth failed on module diamond
請將密碼檔修改為 600 即可解決
2.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
應該是在B主機上進行設定,但我是連A主機都設定以免出錯

留言

  1. 完全按你的设定,一模一样的,就可以运行了,之前搞好久搞不定。不枉费我翻墙来看文章,谢谢

    回覆刪除

張貼留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json