註:轉載請註明出處,並請保持文章的完整性。
如果你有多台電腦,並且你希望它們的某些目錄保持一致(例如,你經常變更檔的目錄),那麼如果用手工複製、粘貼的方法,就太沒有效率了,檔案夾多的話,能把你累個半死。所以,使用一些同步軟體是極其重要的。
在這裡,向你推薦rsync。套用網上的解釋:rsync是在Linux和UNIX上廣泛使用的檔案傳輸和同步程式。此軟體相當強大,經過一些配置之後,可以讓你從此以後的同步備份工作變得極其簡單、輕鬆。該軟體有Windows下的版本,叫做cwRsync。官方對它的詮釋是:cwrsync - Rsync for Windows。
下載頁面:http://www.itefix.no/i2/download
你需要在一台電腦上安裝cwrsync的伺服器端軟體cwRsyncServer,在另一台電腦上安裝cwrsync的用戶端軟體。不過,由於伺服器端軟體已經包含了用戶端軟體的功能,所以,在我的實際使用中,我在多台電腦上均安裝了伺服器端軟體(軟體才幾M大,無所謂),我覺得這樣更方便,因為我的任何一台電腦都可以做為rsync伺服器來用。
安裝cwRsyncServer的過程中,會要求你設定一個使用者名稱和密碼,建議一定要更改,而不是使用預設的。你提供的這個使用者名稱和密碼將會在系統使用者中建立一個帳戶(在Windows登入介面可以看得到它的存在)。
由於rsync伺服器在Windows下是以服務的形式來啟動的,所以你在使用它之前,應該確認你的rsync服務是否已經啟動了。cwRsyncServer軟體對應的系統服務名字是RsyncServer,預設是不會自動啟動的。
下面說一下如何設定rsync伺服器以及用戶端,使得它們可以同步某一目錄下的檔案。
由於rsync是來自Linux/Unix,所以就算是Windows下的cwRsync,也頗有Linux rsync的風格,這種風格體現在,你還是需要去修改設定檔(一個文字檔)來對rsync伺服器進行設定,而沒有一個圖形介面來讓你用滑鼠點幾下就解決問題。
我們用記事本開啟cwRsyncServer安裝目錄下的rsyncd.conf檔案(這個檔案就是rsync伺服器的設定檔了),它定義了rsync伺服器的參數,服務啟動時會讀取該檔案內容,並用以初始化rsync服務。如果修改了參數,則需要重新啟動服務才會生效。
rsyncd.conf檔案已經有一部分預設內容,你可以參照下面的格式(不包括橫線),添加你所需要的參數:
port = 873 # rsync服務的連接埠(873就是預設連接埠,你可以更改)
use chroot = false # 預設,不更改
strict modes = false # 預設,不更改
read only = yes # 服務端檔案唯讀(不允許用戶端修改或刪除)
list = no # 不允許用戶端對伺服器端的檔案清單
hosts allow = * # 允許串連伺服器的用戶端的IP地址清單(*表示不限制)
max connections = 10 # 最大串連數
uid=0 # 對某些場合,這個很重要,下面再解釋
gid=0 # 對某些場合,這個很重要,下面再解釋
auth users = ruser # 允許串連伺服器的使用者名稱
secrets file = rsyncd.secrets # 允許串連伺服器的帳戶檔案,其格式在下面會詳述
motd file = rsyncd.motd # 歡迎資訊檔(用戶端串連時,服務將向用戶端發送歡迎資訊,其內容即為此檔案的內容)
log file = rsyncd.log # 記錄檔
lock file = rsyncd.lock # 鎖檔案
transfer logging = yes # 傳輸時記錄日誌
# Module definitions
# Remember cygwin naming conventions : c:/work becomes /cygwin/c/work
#
[test] # 一個模組的名字,可隨意起,但最好有意義
path = /cygdrive/D/test # 同步的目錄的路徑,其中,D盤就是“/cygdrive/D”,所以該路徑指的是D盤下的test目錄
[another]
path = /cygdrive/E/Documents and Settings/another
需要注意的幾點:
(1)你設定的rsync伺服器連接埠必須在防火牆裡開啟,否則用戶端還是串連不上。
(2)rsyncd.conf檔案中的模組上方是公用的參數,也就是所有模組都會共用的參數,如果在該模組內部又為該參數設定了不同的值,則會按模組內部的值來算。
(3)rsyncd.secrets檔案的內容格式如下:
使用者名稱:密碼
例如:
ruser:rupass
(4)一般來說,你要同步一個目錄的話,就要在rsyncd.conf中添加一個“模組”,並為該模組設定路徑等參數。
(5)如果用戶端串連rsync伺服器時,提示chdir失敗,並且你的登入使用者名稱和密碼之類的都設定對了,那麼很可能你就需要添加上面的“uid=0”和“gid=0”了,我就用這個解決了問題。
(6)在模組的路徑(path)中,經測試可以包含空格。
好了,伺服器端的設定基本完成,然後啟動rsync服務,就可以了。
下面我們來進行用戶端的工作,以完成同步任務。
前面說了,我在用戶端也裝了cwRsyncServer,因為它包含了用戶端的功能。
在用戶端,我們需要在命令列下執行一個帶許多參數的命令,以完成同步功能,正因為如此,我不可能在每次需要同步的時候,先cmd開啟命令列,然後再打長長的rsync命令來完成同步,否則也太痛苦了。所以我們可以寫一個批次檔(*.bat),來完成這個任務。批次檔的內容其實挺簡單:
cd d:/ICW/Bin
d:
rsync.exe -ravz --progress --password-file=/cygdrive/f/rsync/pass_file ruser@192.168.1.100::test/ /cygdrive/"D/Program Files/test"
rsync.exe -ravz --progress --password-file=/cygdrive/f/rsync/pass_file ruser@192.168.1.100::another/ /cygdrive/"E/another"
pause
說明:
(1)第一行表明切換到rsync程式所在目錄,請視實際情況更改。
(2)第二行表明切換到D盤(rsync程式所在的盤)。
(3)192.168.1.100是rsync伺服器IP,請視實際情況更改。
(4)--password-file 參數指定了用戶端登入伺服器時,使用的帳戶的密碼檔案,例如上面的“/cygdrive/f/rsync/pass_file” 表明是 F:/rsync/pass_file 檔案,該檔案內容就是登入rsync伺服器的帳戶的密碼。
(5)紅色的文字指定的是rsync伺服器設定檔中設定的模組名,必須一致。
(6)有多個目錄要同步,就寫多個rsync命令,雙擊此批次檔時,會依次執行。
(7)上面例子中的第一個rsync命令的含義是:將遠端rsync伺服器中,test模組所指定的目錄,同步到本地的 D/Program Files/test 目錄。在用戶端,如果路徑中含有空格,則需要將路徑用雙引號括起來(如上面的例子所示)。
這樣配置好之後,雙擊批次檔,你的兩個目錄就開始同步啦。以後,你就再也不用費勁地去手工同步檔案了,rsync會自動判斷哪些檔案修改了,哪些沒有修改,只傳輸修改過的檔案(並且還會增量傳輸),節省你的頻寬,極其高效。
rsync功能非一般強大,關於rsync的更多配置選項,此處絕對不可能描述得完,請參考其手冊。