實驗環境
(1) Rsync伺服器:10.0.10.158
(2) Rsync客戶端:10.0.10.173
Rsync伺服器端的配置
1. 安裝xinetd和rsync
# yum install xinetd # yum install rsync
2. 建立配置目錄和檔案
# mkdir /etc/rsync
該目錄下包含3個檔案:
- rsyncd.conf # rsync主配置檔案
- rsyncd.secrets # 密碼檔案
- rsyncd.motd # 服務資訊定義檔案
下面逐一編輯這些檔案:
2.1 編輯主配置檔案
# vim /etc/rsync/rsyncd.conf pid file = /var/run/rsyncd.pid #pid檔案的存放位置 port = 873 #通訊的埠 address = 10.0.10.158 #監聽的地址/伺服器的地址 uid = root #執行rsync守護程式的使用者 gid = root #執行rsync守護程式的使用者組 use chroot = yes #是否使用chroot read only = no #是否只讀 hosts allow=10.0.0.0/255.255.0.0 #設定允許訪問的主機(可以是一個範圍也可以是一個IP地址) hosts deny= * #設定拒絕訪問的主機(這裡的*表示除了allow以外的都拒絕) max connections = 51 #最大連線數 motd file = /etc/rsync/rsyncd.motd #指定資訊顯示檔案 log file = /var/log/rsync.log #指定日誌檔案 log format = %t %a %m %f %b %l #設定日誌檔案格式 syslog facility = local3 #設定日誌級別 timeout = 600 #設定連線超時時間(單位:s) [webroot] #目錄的標識/認證模組名 path = /var/www/html #要同步的目錄名 list=yes #是否允許列出檔案 ignore errors #忽略一般的IO錯誤 auth users = admin #認證的使用者名稱 secrets file = /etc/rsync/rsyncd.secrets #密碼檔案 comment = web root directory #說明資訊 exclude = secret/ #需要排除的目錄(排除後就不同步它了)
2.2 編輯密碼配置檔案
# vim /etc/rsync/rsyncd.secrets admin:123123 #格式是“使用者名稱:密碼”
2.3 編輯服務資訊定義檔案
# vim /etc/rsync/rsyncd.motd welcome access
3. 修改密碼配置檔案的許可權
# chmod 600 rsyncd.secrets
4. 啟動Rsync服務
# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf # vim /etc/xinetd.d/rsync service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon --config=/etc/rsync/rsyncd.conf log_on_failure += USERID } # service xinetd restart
Rsync客戶端配置
1. 建立目錄、編輯密碼檔案
# mkdir /etc/rsync # vim /etc/rsync/password 123123 #格式是“密碼” # chmod 600 /etc/rsync/password #修改密碼檔案的許可權
Rsync同步命令的引數
-v 表示verbose詳細顯示
-z 表示壓縮(reduces the amount of data being transmitted)
-r 表示recursive遞迴
-t 表示保持原檔案建立時間
-o 表示保持原檔案屬主
-p 表示保持原檔案的引數
-g 表示保持原檔案的所屬組
-a 歸檔模式
-P 表示代替-partial和-progress兩者的選項功能
-e ssh建立起加密的連線
--partial 阻止rsync在傳輸中斷時刪除已拷貝的部分(如果在拷貝檔案的過程中,傳輸被中斷,rsync的預設操作是撤消前操作,即從目標機上刪除已拷貝的部分檔案)
--progress 是指顯示出詳細的進度情況
--delete 是指如果伺服器端刪除了這一檔案,那麼客戶端也相應把檔案刪除,保持真正的一致
--exclude 不包含指定目錄
--size-only 這個引數用在兩個資料夾中的差別僅是原始檔夾中有一些新檔案,不存在重名且被修改過的檔案,因為這種檔案有可能會因為內容被修改可大小一樣,而被略過。這個引數可以大大地提高同步的效率,因為它不需要檢查同名檔案的內容是否相同
--password-file 來指定密碼檔案,內容包含server端指定認證使用者的密碼
驗證
1. 同步伺服器的檔案到本地
# ll /var/www/html/ #看伺服器上的/var/www/html目錄下有啥 總用量 8 -rw-r--r--. 1 root root 0 12月 1 01:05 index.html -rw-r--r--. 1 root root 0 12月 1 01:05 page.html
# rsync -vzrtopg --progress --delete admin@10.0.10.158::webroot /var/www/html/ --password-file=/etc/rsync/password #在客戶機,執行同步操作,使得獲得伺服器的檔案 welcome access receiving incremental file list ./ index.html 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) page.html 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=0/3) sent 105 bytes received 227 bytes 664.00 bytes/sec total size is 0 speedup is 0.00
# ll /var/www/html/ #在伺服器端我們試著新增一下新的目錄和檔案(包括設定了不同步的目錄secret) 總用量 8 drwxr-xr-x. 2 root root 4096 12月 1 01:41 haha -rw-r--r--. 1 root root 0 12月 1 01:05 index.html -rw-r--r--. 1 root root 0 12月 1 01:40 page_2.html -rw-r--r--. 1 root root 0 12月 1 01:05 page.html drwxr-xr-x. 2 root root 4096 12月 1 01:40 secret
# rsync -vzrtopg --progress --delete admin@10.0.10.158::webroot /var/www/html/ --password-file=/etc/rsync/password #在客戶端執行同步命令,以獲得伺服器的更新 welcome access receiving incremental file list ./ page_2.html 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/4) sent 80 bytes received 207 bytes 191.33 bytes/sec total size is 0 speedup is 0.00 # rsync -vzrtopg --progress --delete admin@10.0.10.158::webroot /var/www/html/ --password-file=/etc/rsync/password welcome access receiving incremental file list ./ haha/ sent 65 bytes received 203 bytes 536.00 bytes/sec total size is 0 speedup is 0.00 # ll /var/www/html/ --------->#確實沒有同步secret這個目錄 總用量 4 drwxr-xr-x. 2 root root 4096 12月 1 2009 haha -rw-r--r--. 1 root root 0 12月 1 2009 index.html -rw-r--r--. 1 root root 0 12月 1 2009 page_2.html -rw-r--r--. 1 root root 0 12月 1 2009 page.html
2. 同步本地的檔案到伺服器
# touch new.html #在本地新增一個檔案 # rsync -vzrtopg --progress --partial --password-file=/etc/rsync/password /var/www/html/ admin@10.0.10.158::webroot #在本地執行同步命令,使本地的更新同步到伺服器 welcome access sending incremental file list ./ new.html 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/6) sent 165 bytes received 31 bytes 392.00 bytes/sec total size is 0 speedup is 0.00
# ls /var/www/html #在伺服器上看到了這個new.html haha index.html new.html page_2.html page.html secret
常見錯誤
問題一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:伺服器端的目錄不存在或無許可權。建立目錄並修正許可權可解決問題。檢查伺服器那個密碼檔案的許可權是否為600
問題二:
@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]
原因:伺服器不存在指定模組。提供正確的模組名或在伺服器端修改成你要的模組以解決問題。
問題四:
password file must not be other-accessible
continuing without password file
Password:
原因:這是因為rsyncd.pwd rsyncd.secrets的許可權不對,應該設定為600。如:chmod 600 rsyncd.pwd
問題五:
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]
原因:對方沒開機、防火牆阻擋、通過的網路上有防火牆阻擋,都有可能。關閉防火牆,其實就是把tcpudp的873埠開啟。
問題六:
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:/etc/rsyncd.conf配置檔案內容有錯誤。請正確核對配置檔案。
問題七:
rsync: chown "" failed: Invalid argument (22)
原因:許可權無法複製。去掉同步許可權的引數即可。(這種情況多見於Linux向Windows的時候)
問題八:
@ERROR: daemon security issue -- contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:同步的目錄裡面有軟連線檔案,需要伺服器端的/etc/rsyncd.conf開啟use chroot = yes。掠過軟連線檔案