Redhat中安裝rsync
1、 首先在服務端和用戶端都安裝rsync,我的RHEL5預設已經安裝好了。在安裝RedHat5的時候,可以在軟體定製中的“基本系統”——》“基本”的“可選的軟體包”中看見:rsync-2.6.8是預設選擇安裝的
2、 也可以通過命令列檢查是否安裝:
或者:rpm –q rsync
3、 如果在開始安裝RedHat的時候,使用預設選擇的rysnc軟體,但現在想用更高版本的rsync,可以卸載掉rysnc,再安裝更高版本的軟體:
4、 卸載完2.6.8版本的rysnc,下面來安裝更高版本的rsync(3.0.9):
配置rsync伺服器端
5、 修改rsync的設定檔
可以看到rysnc服務是關閉的(disable = yes),這裡把它開啟,把disable的值改為no
6、 建立rsync伺服器設定檔/etc/rsyncd.conf
[root@hyj etc]# vim /etc/rsyncd.confuid = rootgid = root port = 873 # 指定運行連接埠,預設是873,您可以自己指定hosts allow = 192.168.0.204, 192.168.1.205 # 允許訪問的客戶機#hosts deny = 0.0.0.0/32 #拒絕訪問的use chroot = max connections = timeout=## 下面這些綠色檔案是安裝完RSYNC服務後自動產生的檔案,當然也可以手動設定到指定路徑pid file = /var/run/rsyncd.pid ##pid檔案的存放lock file = /var/run/rsync.lock ##鎖檔案的存放位置log file = /var/log/rsyncd.log ##日誌記錄檔案的存放#motd file = /etc/rsyncd.motd #歡迎## 上面這段是全域配置,下面的模組可以有 [test] ## 模組名字,自己命名 path = /home/hyj/workspace/test #指定檔案目錄所在位置,這是必須指定 comment = rsync files ## 注釋ignore errors ##忽略IOread only = yes list = no ## 是否把rsync 伺服器上提供同步資料的目錄顯示 ## 下面這一行,同步驗證時用的帳號,如果沒有這項就是匿名同步,client同步時不用使用者名稱也能同步。 auth users = rsyncsecrets file = /etc/rsync.passwd ## 指定認證檔案
7、 然後建立認證檔案:
[root@hyj etc]# vim /etc/rsync.passwd
rsync:hyl ## 使用者名稱:密碼。注意這個不是系統使用者,只是rsync使用者。
所以不用useradd。
(名字隨便寫,只要和上邊設定檔裡的“auth users”參數一致即可),格式(一行一個使用者)
帳號:密碼
(2)、把密碼檔案的許可權改成600
[root@hyj etc]# chmod 600 /etc/rsync.passwd ## 只能所有者可讀,否則報錯
8、 如果在設定檔中指定了歡迎資訊,在/etc下建立rsyncd.motd,設定歡迎資訊:
[root@hyj etc]# vim /etc/rsyncd.motd
Welcome the rsync services!
啟動rsyn
9、 在啟動之前,可以先看一下rsync是否已經啟動運行:用lsof或者nestat都可以
根據輸出顯示state為LISTEN,表示為等待接受連結的狀態,說明rsync已經啟動。
現在先kill掉rsync進程,kill之前為上圖,kill之後,再次執行netstat –anp|grep 873或者lsof –i:873,結果為空白:
10、 防火牆設定:
如果伺服器上裝有防火牆,需在伺服器中設定iptables將837連接埠開放。
[root@hyj ~]# iptables -A INPUT -p tcp --dport 873 -j ACCEPT
11、 如果rsync進程沒有運行,在server端將rsync啟動:
(1)、啟動rsync服務端(以守護進程形式,獨立啟動)
#/usr/bin/rsync –daemon
說明啟動成功。
(切記:命令列啟動的最後是daemon,而不是deamon,否則回報如下錯誤:
rsync: --deamon: unknown option
rsync error: syntax or usage error (code 1) at main.c(1231) [client=2.6.8])
(2)、啟動rsync服務端 (以xinetd超級進程啟動)
# /etc/rc.d/init.d/xinetd reload(reload是網上的說法,但是我試了一下報錯,start可以)
或者:/etc/rc.d/init.d/xinetd reload(reload是網上的說法,但是我試了一下報錯,start可以)
示範:
12、 設定自動啟動:
本機安裝的Redhat中rsync已經是開機自動啟動的,網上說的那兩種方法,設定檔中都沒有找到相應的配置,通過用chkconfig 命令查看和修改開機啟動服務.
[root@hyj ~]# chkconfig
(結果部分省略),可以看出rsync處於on的狀態。
配置rsync用戶端
13、用安裝伺服器端的方式安裝rsync。
14、啟動rsync,如果報如下錯誤,是因為在etc下沒有rsyncd.conf設定檔:
15、[root@hyj etc]# vi /etc/rsyncd.conf
檔案內容為空白就行。然後啟動rsync,可以啟動:
命令和執行個體
16、Rsync的命令格式可以為以下六種:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
17、常用為以下兩種:
(4)、rsync [OPTION]... [USER@]HOST::SRC DEST
從遠程rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔字元時啟動該模式。
如:rsync -av root@172.16.78.192::www /databack
(5)、rsync [OPTION]... SRC [USER@]HOST::DEST
從本地機器拷貝檔案到遠程rsync伺服器中。當DST路徑資訊包含"::"分隔字元時啟動該模式。
如:rsync -av /databack root@172.16.78.192::www
18、下面為執行個體:
伺服器ip為192.168.8.126,用戶端ip為192.168.8.122
19、 (1)、把伺服器上的/home/hyj/workspace/test檔案夾中的內容備份到用戶端的/usr/local/share/rsync_backup中:
[root@hyj ~]# /usr/bin/rsync -vzrtopg --delete --progress rsync@192.168.8.126::test /usr/local/share/rsync_backup
/etc/rsyncd.conf中模組的內容:
path = /home/hyj/workspace/testcomment = rsync filesignore errorsread only = yeslist = noauth users = rsyncsecrets file = /etc/rsync.passwd
上面這個命令列中-vzrtopg裡的v是verbose,z是壓縮,r是recursive,topg都是保持檔案原有屬性如屬主、時間的參數(也可以用直接用a來代替rtopg, a為 --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD)。--progress是指顯示出詳細的進度情況,--delete是指如果伺服器端刪除了這一檔案,那麼用戶端也相應把檔案刪除,保持真正的一致。
(2)、上面的命令需要在備份的時候需要輸入密碼,可以在用戶端建立一個密碼檔案,在命令中把密碼檔案作為參數帶入:
[root@hyj rsync_backup]# vim /etc/rsync.pass
密碼檔案中不用輸入使用者名稱,只需輸入密碼即可:
這份密碼檔案許可權屬性要設得只有root可讀,不然會報錯,修改屬性:
[root@hyj rsync_backup]# chmod 600 /etc/rsync.pass,
用下面這條命令,可以不輸入密碼:
/usr/bin/rsync -vzrtopg --delete --progress rsync@192.168.8.126::test /usr/local/share/rsync_backup --password-file=/etc/rsync.pass
20、 帶exclude 參數:
把伺服器上的/home/hyj/workspace/test檔案夾中的內容備份到用戶端的/usr/local/share/rsync_backup中,但不包括:res目錄和default.properties檔案:
/usr/bin/rsync -vzrtopg --delete --exclude "res/" --exclude "default.properties" --progress rsync@192.168.8.126::test /usr/local/share/rsync_backup --password-file=/etc/rsync.pass
exclude/include規則執行個體
Here are some exclude/include examples: --exclude "*.o" would exclude all filenames matching *.o --exclude "/foo" would exclude a file in the base directory called foo --exclude "foo/" would exclude any directory called foo. --exclude "/foobar" would exclude any file called bar two or more levels below a base directory called foo. --include "*/" --include "*.c" --exclude "*" would include all directories and C source files--include "foo/" --include "foo/bar.c" --exclude "*" would include only foo/bar.c (the foo/ directory must be explicitly included or it would be excluded by the "*")
21、 把用戶端上的/home/hyj/vitest檔案夾中的內容備份到伺服器的/usr/local/share/rsync_backup中,在用戶端執行如下命令:
/usr/bin/rsync -vzrtopg --delete --progress /home/hyj/vitest rsync@192.168.8.126::clientdata --password-file=/etc/rsync.pass
此時伺服器的設定檔/etc/rsyncd.conf內容為:
uid = rootgid = roothosts allow = 192.168.8.122, 192.168.8.123 #hosts deny = 0.0.0.0/32 use chroot = no max connections = 10 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log timeout=600[test]path = /home/hyj/workspace/test comment = rsync files ignore errors read only = yes list = no auth users = rsync secrets file = /etc/rsync.passwd # 上面的命令中,用戶端的資料備份到clientdata模組中,備份到/usr/local/share/rsync_backup檔案夾下,read only改為no,# # 否則會報ERROR: module is read only的錯誤[clientdata] path = /usr/local/share/rsync_backupcomment = rsync files ignore errors read only = no list = noauth users = rsync secrets file = /etc/rsync.passwd
定時計劃備份
22、 如果執行crontab命令提示:
說明還沒有為root這個帳號提供crontab。執行crontab –e 建立一個crontab:
23、 編輯crontab,每兩分鐘備份一次:
24、 兩分鐘後,查看,資料已經備份:
25、 每天上午9點20執行rysnc備份任務:
20 9 * * * /usr/bin/rsync -vzrtopg --delete --progress rsync@192.168.8.126::test /usr/local/share/rsync_backup --password-file=/etc/rsync.pass
26、附時間設定:
(1)、查看當前時區 : date -R
(2)、查看時間和日期:date
(3)、設定時間和日期:
將系統日期設定成2012年8月4日的命令:date -s 08/04/2012
將系統時間設定成下午9點20分0秒的命令:date -s 09:20:00
(4)、將目前時間和日期寫入BIOS,避免重啟後失效:hwclock -w
FAQ
27、我需要在防火牆上開放哪些連接埠以適應rsync?
A:視情況而定
rsync可以直接通過873連接埠的tcp串連傳檔案,也可以通過22連接埠的ssh來進行檔案傳遞,但你也可以通過下列命令改變它的連接埠:
rsync --port 8730 otherhost::
或者
rsync -e 'ssh -p 2002' otherhost:
28、 我如何通過rsync只複製目錄結構,忽略掉檔案呢?
A:rsync -av --include '*/' --exclude '*' source-dir dest-dir
常見錯誤
29、rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
解決:對方沒開機、防火牆阻擋、通過的網路上有防火牆阻擋,都有可能。關閉防火牆,其實就是把tcp udp 的873連接埠開啟:
解決辦法:開啟伺服器873連接埠(RH-Firewall-1-INPUT為REHL 5內建的鏈名,10為最後一條預設規則(拒絕所以),根據實際情況修改這兩個參數。另外“-m state --state NEW -m tcp”參數不加也行)
#iptables -I RH-Firewall-1-INPUT 10 -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
#iptables -I RH-Firewall-1-INPUT 10 -p udp -m state --state NEW -m udp --dport 873 -j ACCEPT
開啟連接埠之前的iptables配置:
註:最後一條規則(REJECT all -- anywhere anywhere reject-with icmp-host-prohibited)表示拒絕所有的資料包,並向對方回應icmp-host- prohibited資料包。
本機測試通過的方法,開啟伺服器873連接埠:
(1)、[root@duoduo ~]# iptables -I INPUT -p tcp --dport 873 -j
[root@duoduo ~]# iptables -I INPUT -p udp --dport 873 -j ACCEPT
(注意要用-I,而不能用-A,用A的話會添加這條規則到iptables鏈的最後,但是沒有到這條規則就被原來的最後一條REJECT了,用戶端還是無法執行rysnc備份,用I的話會插入到鏈的最前面,經過測試可以正常執行rysnc備份。另外“-m state --state NEW -m tcp”參數可以加上)。
(2)、上面提到的,插入規則到最後一條的前面:
#iptables -I RH-Firewall-1-INPUT 10 -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
#iptables -I RH-Firewall-1-INPUT 10 -p udp -m state --state NEW -m udp --dport 873 -j ACCEPT
插入之前:
插入規則:
插入規則後:
再在用戶端執行,可以正常執行。
(3)、或者關閉伺服器的iptables:service iptables stop
30、password file must not be other-accessible
continuing without password file
Password:
解決:這是因為rsyncd.pwd rsyncd.sec的許可權不對,應該設定為600。如:chmod 600 rsyncd.pwd
31、@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
解決:這是因為密碼設定錯了,無法登入成功,檢查一下rsync.pwd,看客服是否匹配。還有伺服器端沒啟動rsync 服務也會出現這種情況。
32、@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
解決:這是因為你在 rsync.conf 中設定的 path 路徑不存在,要建立目錄才能開啟同步。
33、[root@hyj rsync_backup]# /usr/bin/rsync -vzrtopg --delete --exclude "res/" --exclude "default.properties" --progress rsync@192.168.8.126::test /usr/local/share/rsync_backup --password-file=/etc/rsync.pass
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.9]
原因及解決辦法:
SELinux;(下面這條命令在伺服器端執行)
setsebool -P rsync_disable_trans on
34、ERROR: module is read only
rsync: read error: Software caused connection abort (113)
rsync error: error in rsync protocol data stream (code 12) at io.c(769) [sender=3.0.8]
解決:這是因為伺服器端設定檔rsyncd.conf中read only = yes,為唯讀,即不允許用戶端上傳檔案,改成no就可以了。