以rsync將檔案由unix同步到windows

以往在unix下同步資料,都是使用rsync。不過,最近遇到一個需求,要跨不同的作業系統進行同步。將檔案由uninx同步到windows。由於windows沒有rsync,這就有點小麻煩了…

我不想增加往後系統維護的複雜,因此,同步機制還是選擇以rsync為優先。 找了些作法,最後選用DeltaCopy這套。下圖,則是DeltaCopy的運作架構


其實,該公司還有另一個同步的產品 - Syncrify。有此需求的人不妨看一下介紹,瞭解一下Syncrify和DeltaCopy的差異 ,選擇最適合自己環境的作法。

DeltaCopy的安裝、設定方式非常簡單,看一下官網或google一下,就可以找到不少文章。

我現有的同步機制,是採用rsync daemon及Push 模式,因此,當我在windows上啟動了DeltaCopy服務後,只需要將來源主機上原本的同步script另外複製,將目的主機IP調整為執行DeltaCopy服務的windows主機IP,就大功告成了。
註1:rsync有提供rsync shell、rsync daemon兩種模式。兩種模式下都有提供Pull、Push兩種方向
註2:曾做了測試,DeltaCopy似乎無法使用rsync script模式。也就是說,在windows主機上的DeltaCopy,一定要註冊為service才能進行同步。

DeltaCopy有提供GUI方式設定。設定完後會產生以下兩個設定檔。看了一下所產生的設定檔案,果然和UNIX 的rsync daemon模式非常雷同。也就是說,可以不經由GUI,自行修改設定檔即可
  1. deltacd.conf 放在主程式的目錄下。設定有哪些同步。
  2. secrets/XXX.secret 放在主程式的目錄下,XXX則為 diectory的名稱

當然,裝了DeltaCopy後,windows主機間也可以使用rsync同步了。以下就提供windows之間同步、與unix同步到windows兩種範例…
#以下為windows同步到windows(啟用 dry run,不會真的同步)
rsync -navPC --delete --exclude="*~" /cygdrive/d/test_rsync_dir/ sync_account@127.0.0.1::test_rsync/
#以下為unix同步到windows(啟用 dry run,不會真的同步)
rsync -navPC --delete --exclude="*~" /source_dir/ sync_account@127.0.0.1::test_rsync/
註3:在windows主機上執行上述同步指令時,請記得工作目錄需切換到DeltaCopy所在目錄。

DeltaCopy可以使用ssh達到加密傳輸。不過,只能用於windows同步到unix這個方向。詳細說明,請參考官網FAQ - Question: Can I use SSH with DeltaCopy?

當我測試告一段落,準備將測試主機上將DeltaCopy由service中移除時,卻發現GUI沒提供移除功能…

其實,移除方式很簡單。開啟dos視窗,將目錄切換到DeltaCopy所在目錄,執行 DCServce /UNINSTALL 即可。詳細的說明,請參考官網FAQ - Question: How do I uninstall / unregister DeltaCopy Server Service

留言