案例:使用rsync在windows電腦上實現文件同步

本文將在一臺Linux服務器A上搭建rsync文件同步服務,而後在另外一臺windows電腦B上保持與A的單向同步。html

一個具體的案例

某技術公司A的業務,會在服務器上生產pdf電子書、相冊等文件,可是公司A自己不具有打印技術,須要轉交給傳統打印公司B來完成線下生產。那麼問題來了,公司A怎麼將天天生產出來幾十個G的文件,以最小的成本傳輸給B呢?B公司是傳統小企業,並不懂電腦技術,並且鏈接打印機的電腦是windows系統的.linux

一個天然而然想到的方案,就是藉助第三方雲盤服務C,公司A將文件上傳C,而後公司B再從C上下載。這個方案可行,可是多了上傳到傳輸節點C的步驟,增長了A上傳C的這段時間成本。windows

一個簡單的實施方案,就是在A上搭建rsync服務,而後告知B來同步。好在rsync提供的windows的版本,讓這個方案可行。固然,該方案也適用於Mac/Linux,並且更簡單。centos

服務端操做

以centos爲例,安裝rsync:安全

yum -y install rsync

直接啓動rsync:服務器

rsync --daemon --config=/etc/rsyncd.conf

執行 ps -ef | grep rsync 能夠看到服務已經成功啓動.網絡

安裝rsync時默認生成了配置文件 /etc/rsyncd.conf , 下面講解一下配置文件. 完整的配置以下:tcp

uid = root
gid = root
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[test01]
path = /root/tmp/test01/
read only = yes

[test02]
path = /root/tmp/test02/
read only = yes

[test01]一行以上的內容,與默認的配置無異,咱們採用默認的配置便可.測試

而後在文件的最後加上如下配置。表示咱們要啓動兩個提供同步的目錄,分別命名爲test01和test02,路徑分別爲/root/tmp/test01//root/tmp/test02/.ui

這裏的test01 和 test02 在文檔中叫作 module name,咱們能夠理解爲"別名"、"alias"的意思便可.

read only = yes 表示客戶端只能下載服務端的文件而不能上傳(單向同步).
這應該是大部分業務的需求,若是有上傳須要,設置read only = no 便可.

有一點須要提醒, /etc/rsyncd.conf配置修改後,並不須要重啓服務便可生效.

若是想要關閉rsync服務,執行ps -ef | pgrep rsync | xargs kill 便可.

爲了方便測試,咱們還須要建立/root/tmp/test01/ 和 /root/tmp/test02/ 兩個目錄,而後在目錄裏面建立一些文件和目錄,以便能看到同步下載的效果.

若是想要了解更多的配置和啓動項,能夠執行如下命令查看,這裏再也不贅言:

  • man rsyncd.conf 查看更多文檔
  • 或者rsync --daemon --help 查看rsync的啓動參數

rsync的默認端口是873, 若是服務器有防火牆限制,須要開放873端口:

iptables -I INPUT -p tcp --dport 873 -j ACCEPT

若是服務器是部署在阿里雲等雲平臺上,那可能還須要在雲平臺上調整安全組的出入網規則。

客戶端操做(mac/linux)

測試一下命令(假設A的IP是192.168.1.100):

rsync -r --list-only  192.168.1.100::test01

該命令中,

-r 參數表示要遞歸同步目錄下的目錄.
--list-only 參數表示只輸出,不執行真正的文件傳輸.
192.168.1.100 是服務器的IP,你能夠替換成相應的域名.
test01 就是咱們配置中指定的module name, 請記住, test01前面是兩個冒號.

若是可以列出服務器上test01對應的目錄內容,則表示同步已經成功.

若是發生錯誤 rsync: failed to connect to [你的服務器]: Operation timed out,在檢查網絡正常的狀況下,可能就是咱們上面提到的防火牆問題。

執行同步命令:

rsync -avP --delete --chmod=a=rwx 192.168.1.100::test01  ./tmpfolder

解釋一下參數:

--delete 表示刪除本地tmpfolder目錄中跟服務器test01下不一致的全部文件和目錄
--chmod=a=rwx 表示同步下來的文件具備a=rwx的權限(全部人可讀寫執行)
./tmpfolder 表示同步到本地的該目錄下
-P 表示顯示進度條
-v 表示採用增量的方式同步文件
-a 是 archive mode; same as -rlptgoD; 至關於簡寫了不少參數

另外還有一些常見的參數說明:

-u, --update      忽略客戶端上(比服務端)更加新的文件
-r, --recursive   遞歸同步目錄
-z, --compress    傳輸時壓縮文件數據

在這裏,我不使用-z參數是由於我要傳輸的文件主要是pdf和圖片,因此該參數做用不大。
若是數據以文本爲主, 那加上-z會好不少, 傳輸過程當中數據量更少。

windows下的解決方案

windows下有軟件cwRsync提供了rsync的功能. cwRsync的下載地址

安裝步驟以下:

  • 下載cwRsync
  • 解壓獲得的文件夾,將該文件夾加入到環境變量Path中, 好比D:\cwRsync_5.4.1_x86_Free。添加環境變量的方法可參考這裏
  • 創建文件夾存放同步的文件,好比D:\pdf_and_album\
  • D:\cwRsync_5.4.1_x86_Free中, 編寫批處理腳本pdf_rsync.bat, 腳本內容以下面的"腳本1"。
  • 設置windows的定時任務,執行pdf_rsync.bat。windows設置定時任務的方法見Win XP, Win 7

腳本1內容就是咱們上面提到的命令,好比:

rsync -avP --delete --chmod=a=rwx rsync.bala.com::test01  /cygdrive/d/pdf_and_album/
相關文章
相關標籤/搜索