CentOS 5.5下rsync使用技巧與權限問題解讀
原創(chuàng)【51CTO獨家特稿】搞運維的同行們對遠程同步工具Rsync應該都不陌生。Rsync的使用和配置方法網(wǎng)上已經有很多,本文就不用再多說。這篇文章主要是跟大家分享一下我在使用Rsync的過程中總結的一些心得經驗,以及出現(xiàn)一些權限問題的時候,應該如何解決。
作者簡介:余洪春(博客),網(wǎng)名撫琴煮酒,英文名Andrew.Yu,武漢某外企高級Linux/Unix系統(tǒng)管理員、項目實施工程師,紅帽RHCE講師,擅長負載均衡高可用和中小型證券類和商務網(wǎng)站架構,目前關注網(wǎng)站架構研究及網(wǎng)絡安全。
推薦專題:企業(yè)內網(wǎng)開發(fā)環(huán)境部署與管理全攻略(FreeBSD+PHP)
本文使用的測試機器:
rsync服務器 64-bit Centos5.5 192.168.21.41
rsync客戶端 64-bit FreeBSD8.1 192.168.21.44
一、什么是rsync?
Rsync(remote synchronize)是一個遠程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺主機間的文件。Rsync使用所謂的“Rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。
rsync的優(yōu)點
①可以鏡像保存整個目錄樹和文件系統(tǒng);
②可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;
③無須特殊權限即可安裝;
④優(yōu)化的流程,文件傳輸效率高;
⑤可以使用rsh、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;
⑥支持匿名傳輸
二、服務器端的配置
具體的就不多說了,重要的地方說一下。首先檢查rsync是否安裝:
rpm –q rsync rsync-2.6.8-3.1
說明rsync已安裝,如果提示出現(xiàn) package rsync is not installed 則說明這個軟件報沒有安裝大家可以使用yum進行安裝
另外,關閉防火墻和SElinux,因為是內網(wǎng)中傳輸,所以這些沒必要
service iptables stop && chkconfig iptables off setenforce 0
下面分享下我自己定義的配置文件/etc/rsyncd.conf。這個文件是我自己定義的,并不是系統(tǒng)創(chuàng)建的,當然你也可以叫不同的名字;文件我先貼出來,方便線上環(huán)境的朋友直接復制,后面再寫上詳細注釋。
uid = nobody gid = nobody user chroot = no max connections = 200 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log [backup] path=/backup/ ignore errors read only = no list = no hosts allow = 192.168.21.0/255.255.255.0 auth users = test secrets file = /etc/rsyncd.password
注釋:
uid = nobody
進行備份的用戶,nobody 為任何用戶
gid = nobody
進行備份的組,nobody為任意組
use chroot = no
如果"use chroot"指定為true,那么rsync在傳輸文件以前首先chroot到path參數(shù)所指定的目錄下。這樣做的原因是實現(xiàn)額外的安全防護,但是缺點是需要以root權限,并且不能備份指向外部的符號連接所指向的目錄文件。默認情況下chroot值為true.但是這個一般不需要,我選擇no或false
list = no
不允許列清單
max connections = 200
***連接數(shù)
timeout = 600
覆蓋客戶指定的IP超時時間,也就是說rsync服務器不會永遠等待一個崩潰的客戶端。
pidfile = /var/run/rsyncd.pid
pid文件的存放位置
lock file = /var/run/rsync.lock
鎖文件的存放位置
log file = /var/log/rsyncd.log
日志文件的存放位置
[backup]
這里是認證模塊名,即跟samba語法一樣,是對外公布的名字
path = /backup/
這里是參與同步的目錄
ignore errors
可以忽略一些無關的IO錯誤
read only = no
允許可讀可寫
list = no
不允許列清單
hosts allow = 192.168.21.0/255.255.255.0
這里跟samba的語法是一樣的,只允許192.168.21.0/24的網(wǎng)段進行同步,拒絕其它一切
auth users = test
認證的用戶名
secrets file = /etc/rsyncd.password
密碼文件存放地址
注意:對于這個地方的配置文件,雖然解釋的很清楚,可是一些朋友始終還會在這里出錯,這里我提亮點易錯點:
1、[backup] 認證模塊名和 path = /backup/ 參與同步的目錄
這里的path 大家要記好了,這里不要隨便的一設置就直接完事,要知道這里是認證模塊的,以后從客戶機備份的數(shù)據(jù)會存儲在這里。
2、auth users = redhat 認證的用戶名
這個名字是服務器端實實在在存在用戶,大家不要直接跟步驟走卻忽略了這點。如果服務器端少了這個的話我估計你的數(shù)據(jù)同步就實現(xiàn)不了,大家要謹記。
3、path = /backup/ 參與同步的目錄
這個需要稍后自己要在根目錄下自己建
cd / mkdir backup chmod –R 777 /backup echo “test:test” > /etc/rsyncd.password
(這里我設置的是用戶名和密碼一致)
為了安全起見,我設置他的權限為600
chmod 600 /etc/rsync.password
客戶端配置:
echo “test” > /etc/rsyncd.password
這里僅僅只需要密碼,不需要用戶了,免得要同步時還要手動互動
chmod 600 /etc/rsync.password
配置完了之后,可能會遇到一些權限問題。以下就一些常見的權限問題進行解答:
#p#
問題一:
@ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端的目錄不存在或無權限。
創(chuàng)建目錄并修正權限可解決問題。
問題二:
@ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端該模塊(tee)需要驗證用戶名密碼,但客戶端沒有提供正確的用戶名密碼,認證失敗。
提供正確的用戶名密碼解決此問題。
問題三:
@ERROR: Unknown module ‘tee_nonexists’ rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器不存在指定模塊。
提供正確的模塊名或在服務器端修改成你要的模塊以解決問題。
測試
都配置完畢之后就是測試了。在FreeBSD機器上,輸入命令
rsync -vzrtop --delete /home/andrewy/etc test@192.168.21.41::backup --password-file=/etc/rsyncd.password
查看同步效果。
注意:我這里是直接以root進行操作。rsync以delete操作時要注意,它會完全同步這邊的目錄與服務器的目錄中的文件,這樣會產生一個后果,它會刪掉服務器中多余的文件,這樣做很危險,如果是線上機器,請慎之又慎,切記!
【編輯推薦】