Rsync是的全稱是: remote synchronize, 也就是遠程同步數據, 它是一款不錯的文件同步軟件,而且是免費的, 它在鏡像保存整個目錄樹和文件系統的同時保持原來文件的權限、時間、軟硬鏈接。這對於以后文件的恢復提供了極大的幫助.rsync可通過 LAN/WAN 快速同步多台主機間的文件。 Rsync 本來是用以取代 rcp 的一個工具,它當前由 rsync.samba.org 維護(官網:http://rsync.samba.org/)。 Rsync 使用所謂的“ Rsync 演算法 ”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快. 也就是傳說中的增量備份存儲, 運行 Rsync server 的機器也叫 backup server ,一個 Rsync server 可同時備份多個 client 的數據;也可以多個 Rsync server 備份一個 client 的數據。在linux/UNIX下, Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 會打開一個 873 的服務通道 (port) (默認端口, 后期可以修改),等待對方 Rsync 連接。連接時, Rsync server 會檢查口令是否相符,若通過口令查核,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,下一次就只傳送二個文件之間不同的部份。傳輸數據過程中可以實行壓縮及解壓縮操作,減少帶寬流量。支持scp、ssh及直接socket方式連接,支持匿名傳輸。支持Linux,Window平台。寫本文的時候,window版最新版為4.0.5版
Rsync 支持大多數的類 Unix 系統,無論是 Linux 、 Solaris 還是 BSD 上都經過了良好的測試。此外,它在 windows 平台下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS 。本博以cwRsync為例進行講解. 以下是WINDOW系統的下載資源.
Windows版下載:https://www.itefix.no/i2/cwrsync-get 選(Free Edition 免費版)
服務端:cwRsyncServer 4.0.5 Installer
下載完成后放入對應的文件夾下. 本文是以局域網為例的進行講解, 其實和遠程的配置差不多.另外測試機器是使用VM下的server 2003以及實體機的XP系統, 這兩個系統基本上了函蓋了WINDOW下的系統類型. 如果是同型系統的話, 遇到的問題可能會很少一些, 無法模擬出更多地狀況和問題. 本博本着從重從難地原則來完成rsync的配置和應用工作.
[環境介紹:]
服務器端: VM下的server 2003 IP: 192.168.25.137
客戶端: 本地的XP系統, IP:192.168.17.31
[服務器端的安裝及配置過程]
在服務器端解壓已經下載的cwRsyncServer_4.0.5_Installer, 會出現一個可執行的exe文件, 直接雙擊它, 然后就進入到安裝界面:
要安裝一定要選擇"I Agree",沒有什么好說的.
選擇"Next", 進入下一界面:
注意這兩個圓圈處的, 這個用戶名默認是SvcCWRSYNC, 當然你也可以在自行修改它, 另外它的密碼是隨機生成的, 如果你認為這樣的帳號和密碼太麻煩的話,也可以自己修改它. 然后選擇"install", 進入下一步.
稍等一下, 在出現的界面中點擊"close"即可完成rsync服務器端的安裝;
然后進入配置過程. 基本上關於rsync的配置都是在rsyncd.conf, 其路徑是:C:\Program Files\ICW, 如果你自定義了其他的路徑, 就找對應的路徑即可.
編輯rsyncd.conf的工具可以直接用記事本即可. 打開后它的配置是這樣的.
下面我將該文件重新編輯並注明各項參數.
use chroot = false #不使用chroot, 其實這個應該是針對linux系統來說的.既然是默認的, 就不用修改了
strict modes = false #不使用嚴格的用戶限制
hosts allow = * #設定允許訪問該服務的IP地址, 如果不限制, 則使用*
max connections = 5 #最大連接數, 不需要過多解釋了吧?
port = 14598 #使用的端口,如果沒有這一設置的話, 默認的端口是873, 為了提高安全性,同時為了避免與系統保留的端口相沖突, 最好將該端口設置為1024以上的.
gid = 0 #及下一行不限定訪問用戶及用戶組
uid = 0
log file = /cygdrive/c/Setting/rsyncd.log #放置rsync的日志文件路徑
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[data_backup] #模塊名稱
path = /cygdrive/c/data_backup #備份路徑
auth users = wwufengg #訪問的用戶名
read only = false # 不只限制是只讀屬性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放認證用戶密碼信息的文件及路徑
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽無關的IO錯誤
transfer logging = yes #記錄傳輸日志
特別注意的是, 一定要轉換路徑的定義方法, 要使用POSIX格式的, 而不要使用系統給出的定義方式, 如f:\db使用這樣的定義: cygdrive/f/db, 這樣才可確保rsync正常工作.
然后在C盤定義相關的文件夾及文件. 文件都可以用記事本直接命名, 只不過在保存時會出現那個修改后綴后的警告, 不管它, 直接點擊是即可.
然后再用記事本打開那個ps文件, 如同我寫的.
注意: 密碼文件格式:用戶名:密碼,一行一個,有的系統不支持長密碼,另個密碼文件的權限對其它用戶組是不可讀的,設置錯了可能不工作。在Windows下,密碼文件的訪問權限一定要設置正確,不然用戶驗證的時候通不過。應將密碼文件C:\Setting\Rsync\rsync_db.ps的權限加入Rsycn服務運行服務的用戶名 cwRsyncServer 的讀取權限 及 設置其為該文件為所有者。
在系統中啟動該服務: 我的電腦 右鍵---> 管理 --> 找到RsyncServer 開啟這個服務, 同時注意一定要選用"自動"否則你每次開機時都要啟動它, 否則rsync是不會工作的. 這個是細節問題, 注意.
開啟防火牆: 如果你的系統開啟了防火牆, 注意把端口設置為允許通過, TCP模式.
驗證一下是否正常. 打開CMD窗口, 輸入telnet 192.168.25.137 14598
出現如下圖示的界面說明已經安裝成功.
至此, rsync的服務器端已經安裝成功;
至於客戶端的安裝,真沒有啥可說的.直接安裝就是了. 略. 安裝完成后測試一下它的連通性, 在DOS窗口下輸入服務器端的IP和端口: telnet 192.168.25.137 14598
出現@RSYNCD: 30.0 等類似文字,則說明客戶端連接服務端正常.
然后配置本地的用戶密碼信息,路徑及注意事項如下:
然后在命令行中運行進到Rsync客戶端安裝目錄的bin目錄下,如本例中:C:\Program Files\cwRsync\bin\
然后再運行如下的命令:
rsync --port=14598 -vzrtopg --progress --delete wwufengg@192.168.25.137::data_backup /cygdrive/d/wwufengg --password-file=/cygdrive
/c/setting/rsync/rsync_db.ps
在這種情況下, 它有可能會提示你輸入密碼, 這個你直接輸入那個服務器端的密碼即可. 可是如果你要有N條命令來執行同步, 每一條你都要這樣輸入, 還是很不方便的. 為了解決這個問題, 還有另外一種辦法, 那就是在任意目錄新建一個文檔, 文檔內容和rsync_db.ps的內容, 也就是用戶密碼一樣, 比如我這個的.e:\rsync\s37.txt, 之所以用這樣的設置, 主要就是區別原有的盤符和文件rsync_db.ps, 當然你也可以在 c:\setting\rsync 新建一個TXT文件, 都沒有關系的. 然后在命令添加如下的內容即可:
rsync --port=14598 -vzrtopg --progress --delete wwufengg@192.168.25.137::data_backup /cygdrive/d/wwufengg --password-file=/cygdrive
/c/setting/rsync/rsync_db.ps<e:\rsync\s37.txt
在DOS模式提示輸入密碼的時候, 它就會自動讀入密碼內容, 從而實現讓它自動進行同步備份了. 進行到這一步, 也只是在DOS模式下, 每次這樣運行, 也不方便, 也很容易弄錯, 干脆弄成批處理文件. 直接雙擊即可執行, 效果會更好. 不要擔心不會做批處理命令的問題. 其實很簡單的. 直接把上面這一段保存到記事本里面, 然后保存到C:\Program Files\cwRsync\bin目錄下, 命名為wwufengg.bat
然后找到這個文件, 雙擊一下, 即可實現同步備份的操作了. 很方便吧? 只要弄通, 確實是很方便.
外延: 上例中只是備份一個源文件, 而一台服務器可能有N多個文件需要同步備份, 那怎么辦呢? 其實這個也很容易解決, 就是在服務器端多建幾個模塊, 每個模塊包含不同的文件夾, 使用同樣的密碼文件即可實現. 如同下面的:
use chroot = false #不使用chroot, 其實這個應該是針對linux系統來說的.既然是默認的, 就不用修改了
strict modes = false #不使用嚴格的用戶限制
hosts allow = * #設定允許訪問該服務的IP地址, 如果不限制, 則使用*
max connections = 5 #最大連接數, 不需要過多解釋了吧?
port = 14598 #使用的端口,如果沒有這一設置的話, 默認的端口是873, 為了提高安全性,同時為了避免與系統保留的端口相沖突, 最好將該端口設置為1024以上的.
gid = 0 #及下一行不限定訪問用戶及用戶組
uid = 0
log file = /cygdrive/c/Setting/rsyncd.log #放置rsync的日志文件路徑
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[data_backup] #模塊名稱
path = /cygdrive/c/data_backup #備份路徑
auth users = wwufengg #訪問的用戶名
read only = false # 不只限制是只讀屬性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放認證用戶密碼信息的文件及路徑
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽無關的IO錯誤
transfer logging = yes #記錄傳輸日志
[site_bak] #改動的模塊名稱
path = /cygdrive/c/site_bak #改動的備份路徑
auth users = wwufengg #訪問的用戶名
read only = false # 不只限制是只讀屬性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放認證用戶密碼信息的文件及路徑
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽無關的IO錯誤
transfer logging = yes #記錄傳輸日志
.......
其余部分不變,依次類推即可.
至此, 已經實現了多源站的數據同步備份功能.
在網上, 看到有朋友通過任務計划的方式來實現定期定時地同步文件, 不知道是怎么回事, 我這邊一直無法實現這樣的功能, 后來想想, 畢竟要備份的源站都是生產環境下的. 還是手動備份比較好一些吧, 所以就沒有細細地研究了. 如果有朋友做到的話, 請提供一下地址. 我好拜讀一下.
其實做這個教程時, 我已經完成了本地的配置驗證, 服務器間的同步功能, 但是在寫這個教程而重建環境時仍然遇到了一些小問題, 雖然解決很簡單,但是找到問題點卻是頗費心思和精力的, 以下是我的教訓,希望供朋友們借簦
教訓總結:
1. 注意服務器端配置文件的每一行的行尾都不要留空格, 這個看起來很簡單的問題, 很有可能在運行時出現這樣的提示,
ERROR: auth failed on module data_backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
我相信很多人都會遇到這個問題, 即使你已經嚴格地按照某些教程操作而仍然出現這樣的提示的時候, 你就會很崩潰了. 而我就因為這一點而浪費了將近一天的時間, 只是偶然才發現這個問題, 解決起來也很簡單, 就是把這幾個空格去掉. 當然,另外的因素就是你考慮是不是你的服務器端的密碼文件權限問題, 即要保證是600權限, 也就是只有讀寫權限, 對於WINDOW來說, 這個權限的設置有點頭疼, 這個問題我也解決了, 那就是把文件的權限設置為只允許當前用戶讀寫, 在這個時候, 會有如下的提示:
直接點擊"是"即可, 這樣的話, 其他的用戶也就無法訪問了, 當然也不能編輯. 如果想編輯的話, 就再加其他的用戶即可.
另外, 在WIN下也可以在服務器端給這個文件添加SvcCWRSYNC用戶的方式來解決, 如圖示:
2. 服務器端的密碼文件和客戶端的密碼文件可以分別放在不同的盤符和文件夾內, 不影響軟件的正常使用, 所以不用糾結它們是不是對應, 我這篇文章中已經體現出來了, 服務器端的密碼文件時這樣的格式: 用戶名:密碼, 如本例中的wufengg:wf5874, 而客戶端的是只有用戶的密碼, 如本例中的wf5874, 這一點要注意, 另外, 還有一點, 不管服務器端建有多少個用戶密碼, 對應於某一台具體的客戶端來說, 對它有效的只有一個用戶, 也就是第一行密碼對應的用戶, 第二行密碼對應的用戶是無法運行的. 這一點如果不注意的話, 會裁跟頭的;
3.批處理文件要注意保持每一條命令都占用一整行, 否則會因為命令不全導致運行失敗的. 所以粘貼到記事本的時候要注意去掉自動換行的功能, 這樣的話會比較容易發現這個問題的;
rsync常見問題及解決辦法:
錯誤1: rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receive r=3.0.2]
解決:很大可能是服務器端沒有開啟 rsync 服務。開啟服務。
錯誤2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解決:服務器端同步目錄沒有權限,cwrsync默認用戶是Svcwrsync。為同步目錄添加用戶Svcwrsync權限。
錯誤3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解決:配置文件 rsync.conf中添加 lock file = rsyncd.lock 即可解決。
錯誤4: rsync: could not open password file "/cygwin/e/Setting/Rsync/rsync_db.pwd": No such file or directory (2)
解決:密碼文件的目錄一定要存在,而且要用POSIX風格的寫法:/cygdrive/e/Setting/Rsync/rsync_db.pwd
錯誤5:@ERROR: auth failed on module data_backup rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解決:密碼錯誤,輸入正確的密碼即可。用戶名和密碼如果都正確,可能是遠程rsync服務器的帳戶密碼文件的權限必須為600, 這一點還要注意空格問題是否存在;
錯誤6: password file must not be other-accessible
解決:這是因為rsyncd.pwd rsyncd.sec的權限不對,應該設置為600。如:chmod 600 rsyncd.pwd, Windows下應將密碼文件的所有者改成程序運行的用戶。
錯誤7:@ERROR: invalid uid nobody . rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解決:在rsyncd.conf文件中添加下面兩行即可
uid = 0
gid = 0
問題8: @ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服務器端的目錄不存在或無權限。創建目錄並修正權限可解決問題。
問題9:@ERROR: Unknown module ‘data_backup’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服務器不存在指定模塊。提供正確的模塊名或在服務器端修改成你要的模塊以解決問題。
問題10:rsync: failed to connect to 192.168.25.137: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:對方沒開機、防火牆阻擋、通過的網絡上有防火牆阻擋,都有可能。關閉防火牆,其實就是把tcp udp的873或者指定的rsync端口打開。
問題11:rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:/etc/rsyncd.conf配置文件內容有錯誤。請正確核對配置文件。
問題12:rsync: chown "" failed: Invalid argument (22)
原因:權限無法復制。去掉同步權限的參數即可。(這種情況多見於Linux向Windows的時候)
問題13:@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。略過軟連接文件。
問題14:rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解決:很大可能是服務器端沒有開啟 rsync 服務,開啟服務。
問題15: rysnc: failed to connect to 192.168.25.137: Connect refused(111)
rsync error: error in socket IO<code 10> [Receiver=3.0.7]
解決: 出現這個錯誤要檢查一下你的連接端口是不是與服務器端的端口一致.
現在看來, 整個過程很流暢, 嚴格按照我的方法是可以實現所需要的功能, 但是為了實現這個過程, 我卻是經歷了很多地挫折和困難, 每一步都花費了很多的時間和精力, 網上有很多類似的教程, 剛開始也是按照他們的操作方法來做的. 可是殊不知, 里面有很多地坑, 每次從坑里爬出來都是灰頭土臉的. 不過, 隨着一個一個問題的解決, 也收獲了一種幸福和快樂. 直到整個流程都走下來時, 看着一行行流程閃現在眼前時, 就體會到一種滿足,幸福的味道了. 希望更多地朋友能體會到解決問題的幸福感.
source: http://www.cnblogs.com/wwufengg/p/rsync-config.html