Linux和Windows文件實時同步

admin Linux運維評論1,1202字數(shù) 6633閱讀模式
摘要

實現(xiàn)文件同步是借助Linux上面的鏡像備份工具rsync,支持本地復制、SSH、rsync主機同步。該工具在windows平臺上也有對應的實現(xiàn)cwRsyncServer。本文介紹的是實時監(jiān)控Linux服務器上面的文件,并同步到windows客戶端。
ps:此類的文章在網(wǎng)上已經有大把了,很多都是復制粘貼(我也不例外,但是我會詳細的講解細節(jié)。),初學者可能不容易看懂。也是為了以后自己能夠再次使用(因為只是工具,你不記錄下來,以后就忘記了?。?/p>

rsync介紹

rsync是一個開源的提供快速增量文件傳輸?shù)膶嵱贸绦颉syns目前由Wayne Davison維護。rsync官網(wǎng)地址
官網(wǎng)上面主要有兩個文檔需要看,一個是rsync使用文檔,另一個是rsync.conf配置文檔參數(shù)。

步驟一:

先在Linux上面安裝rsync,一般的Linux發(fā)行版上面都會帶這個工具。所以可以先看看服務器上面是否安裝了rsync。
輸入命令:rpm -qa | grep rsync
如果沒有安裝,這個就自行百度一下,rsync的配置文件在/etc/srync.conf
下面是配置文件內容:

  1. # /etc/rsyncd: configuration file for rsync daemon mode  
  2.  
  3. # See rsyncd.conf man page for more options.  
  4.  
  5. # configuration example:  
  6.  
  7. # uid = nobody  
  8. # gid = nobody  
  9. # use chroot = yes  
  10. # max connections = 4  
  11. # pid file = /var/run/rsyncd.pid  
  12. # exclude = lost+found/  
  13. # transfer logging = yes  
  14. # timeout = 900  
  15. # ignore nonreadable = yes  
  16. # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  
  17.  
  18. # [ftp]  
  19. #        path = /home/ftp  
  20. #        comment = ftp export area  

因為主要向Windows推送文件,所以不需要更改這里面的配置。

步驟二:

在windows下面安裝rsync,windows下面有個rsync的實現(xiàn)叫做cwRsyncServer,官網(wǎng)地址,這個軟件在4.1.0以前的版本是免費的。之后就是收費了的。這里貼心提供4.1.0的下載地址
下載之后,自己選好安裝路徑,注意!在安裝的時候,他會生成一個賬號,這個賬號是用來啟動它的一個服務的(ps:相當于Linux下面的daemon)。不過個人覺得這個賬戶要不要無所謂。

因為是Linux上面向windows上面推送文件,所以在這里需要配置windows安裝的cwRsyncServer的配置文件,并啟動服務。

找到cwRsyncServer的安裝目錄ICW,打開里面的配置文件rsyncd.conf,并添加以下內容。

  1. port = 873 #服務端口  
  2. use chroot = false  
  3. strict modes = false  
  4. hosts allow = *  
  5. log file = rsyncd.log  
  6. uid = 0  
  7. gid = 0  
  8.  
  9. # Module definitions  
  10. # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work  
  11. #  
  12. [test]  
  13. path = /cygdrive/d/work #同步的路徑  
  14. read only = false  
  15. transfer logging = yes  
  16. auth users = ruser # 允許連接服務器的用戶名  
  17. secrets file = rsyncd.secrets #用戶密碼  

rsyncd.secrets是創(chuàng)建的一個保存密碼的文件,這里是放在和rsync.conf同級目錄。文件內容如下:

  1. ruser:123456  

上面其實就是rsync的配置文件。在官網(wǎng)配置文檔里面有詳細的介紹。上面有#號的是我添加的。有些是默認的。

設置好之后就啟動RsyncServer服務。

步驟三:

  1. SYNOPSIS  
  2. Local:  rsync [OPTION...] SRC... [DEST]  
  3.   
  4. Access via remote shell:  
  5.   Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]  
  6.   Push: rsync [OPTION...] SRC... [USER@]HOST:DEST  
  7.   
  8. Access via rsync daemon:  
  9.   Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]  
  10.         rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]  
  11.   Push: rsync [OPTION...] SRC... [USER@]HOST::DEST  
  12.         rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST  
  13. Usages with just one SRC arg and no DEST arg will list the source files instead of copying.  

以上是rsync的使用語法,接下來就測試一下Linux服務器是否能夠往windows上面推送數(shù)據(jù)。(ps:這個用法能夠在上面的rsync的使用文檔里面找到)

  1. rsync -avz /home/ftp ruser@192.168.1.108::test  

上面test是你定義的模塊,/home/ftp這個是你要推送的源文件地址。
因為在windows rsync那里定義了用戶,所以接下來會要求你輸入密碼。填之前設置123456就可以了。

步驟四:
如果之前推送文件成功了,那我們就可以進行接下來的操作了。之前都是手動去同步的,但是我們想要自動去同步,那該怎么做呢?
這里有一個工具Sersync。它主要就是監(jiān)聽文件夾,當文件夾發(fā)生更改的時候推送文件到遠程。
Sersync下載地址

Sersync官網(wǎng)
Sersync作者把資源放在谷歌上面的,所以我這里給一個下載地址。
下載下來后,進行以下操作:

  1. wget http://www.pipizhufangpi.cn/resources/sersync2.5.4_64bit_binary_stable_final.tar.gz  
  2. tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz  #解壓Sersync壓縮文件  
  3. mv GNU-Linux-x86/ /usr/local/sersync   #將解壓后的文件移動到/usr/local/sersync目錄下  
  4. cd /usr/local/sersync/  #移動到目錄 /usr/local/sersync/  
  5. cp confxml.xml confxml.xml_bak #備份配置文件  

然后就需要對這個confxml.xml配置文件進行配置了,該配置文件,配置監(jiān)聽的目錄、錯誤產生的日志、同步的地址賬號和密碼等等。
需要改的只有幾個地方,修改如下:
修改本地監(jiān)控文件、修改遠程同步模塊

  1. <localpath watch="/home/ftp"> <!-- 本地監(jiān)聽文件地址 -->  
  2.     <remote ip="192.168.1.108" name="test"/> <!-- 遠程地址和同步的模塊 -->  
  3.     <!--<remote ip="192.168.8.39" name="tongbu"/>-->  
  4.     <!--<remote ip="192.168.8.40" name="tongbu"/>-->  
  5. </localpath>  

設置遠程模塊賬號和密碼

  1. <rsync>  
  2. <commonParams params="-artuz"/> <!-- 之前rsync的OPTIONS -->  
  3. <auth start="true" users="ruser" passwordfile="/etc/rsync/rsync.passwd"/> <!-- 設置賬號和密碼 -->  
  4. <userDefinedPort start="false" port="874"/><!-- port=874 -->  
  5. <timeout start="true" time="100"/><!-- timeout=100 -->  
  6. <ssh start="false"/>  
  7. </rsync>  
  1. <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!-- 設置錯誤日志 -->  

在上面我們設置了遠程模塊的賬號和密碼,這個是對應windows上面設置的test模塊賬號和密碼。在這里要設置該密碼文件,還要設置出錯日志。
代碼如下:

  1. mkdir /etc/rsync #創(chuàng)建文件夾  
  2. echo "123456" > /etc/rsync/rsync.passwd  
  3. chmod 600 /etc/rsync/rsync.passwd #設置只有當前用戶具有讀寫權限,不設置會報錯  
  4. mkdir /usr/local/sersync/logs #創(chuàng)建日志文件  
  5. touch /usr/local/sersync/logs/rsync_fail_log.sh #創(chuàng)建日志文件  

步驟五:

完成以上步驟后,就可以開啟Sersync了。
代碼如下:

  1. /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml  
  2. echo "PATH=$PATH:/usr/local/sersync/" >> /etc/profile  
  3. source /etc/profile  

配置更多實例只需要對應不同配置文件即可

  1. /usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml  
  2. /usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml  
  3. /usr/local/sersync/sersync2  -d -o /usr/local/sersync/blog_confxml.xml   

如果你想停止Sersync,可以通過殺死進程的方式來終止:

  1. ps  -ef |grep  rsync   
  2. pkill  sersync   

更多:

傳輸參數(shù)參考如下:

  1. -v, --verbose 詳細模式輸出  
  2. -q, --quiet 精簡輸出模式  
  3. -c, --checksum 打開校驗開關,強制對文件傳輸進行校驗  
  4. -a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD  
  5. -r, --recursive 對子目錄以遞歸模式處理  
  6. -R, --relative 使用相對路徑信息  
  7. -b, --backup 創(chuàng)建備份,也就是對于目的已經存在有同樣的文件名時,將老的文件重新命名為~filename??梢允褂?-suffix選項來指定不同的備份文件前綴。  
  8. --backup-dir 將備份文件(如~filename)存放在在目錄下。  
  9. -suffix=SUFFIX 定義備份文件前綴  
  10. -u, --update 僅僅進行更新,也就是跳過所有已經存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)  
  11. -l, --links 保留軟鏈結  
  12. -L, --copy-links 想對待常規(guī)文件一樣處理軟鏈結  
  13. --copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結  
  14. --safe-links 忽略指向SRC路徑目錄樹以外的鏈結  
  15. -H, --hard-links 保留硬鏈結  
  16. -p, --perms 保持文件權限  
  17. -o, --owner 保持文件屬主信息  
  18. -g, --group 保持文件屬組信息  
  19. -D, --devices 保持設備文件信息  
  20. -t, --times 保持文件時間信息  
  21. -S, --sparse 對稀疏文件進行特殊處理以節(jié)省DST的空間  
  22. -n, --dry-run現(xiàn)實哪些文件將被傳輸  
  23. -W, --whole-file 拷貝文件,不進行增量檢測  
  24. -x, --one-file-system 不要跨越文件系統(tǒng)邊界  
  25. -B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節(jié)  
  26. -e, --rsh=COMMAND 指定使用rsh、ssh方式進行數(shù)據(jù)同步  
  27. --rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息  
  28. -C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸?shù)奈募?nbsp; 
  29. --existing 僅僅更新那些已經存在于DST的文件,而不備份那些新創(chuàng)建的文件  
  30. --delete 刪除那些DST中SRC沒有的文件  
  31. --delete-excluded 同樣刪除接收端那些被該選項指定排除的文件  
  32. --delete-after 傳輸結束以后再刪除  
  33. --ignore-errors 及時出現(xiàn)IO錯誤也進行刪除  
  34. --max-delete=NUM 最多刪除NUM個文件  
  35. --partial 保留那些因故沒有完全傳輸?shù)奈募允羌涌祀S后的再次傳輸  
  36. --force 強制刪除目錄,即使不為空  
  37. --numeric-ids 不將數(shù)字的用戶和組ID匹配為用戶名和組名  
  38. --timeout=TIME IP超時時間,單位為秒  
  39. -I, --ignore-times 不跳過那些有同樣的時間和長度的文件  
  40. --size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間  
  41. --modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0  
  42. -T --temp-dir=DIR 在DIR中創(chuàng)建臨時文件  
  43. --compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份  
  44. -P 等同于 --partial  
  45. --progress 顯示備份過程  
  46. -z, --compress 對備份的文件在傳輸時進行壓縮處理  
  47. --exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?nbsp; 
  48. --include=PATTERN 指定不排除而需要傳輸?shù)奈募J?nbsp; 
  49. --exclude-from=FILE 排除FILE中指定模式的文件  
  50. --include-from=FILE 不排除FILE指定模式匹配的文件  
  51. --version 打印版本信息  
  52. --address 綁定到特定的地址  
  53. --config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件  
  54. --port=PORT 指定其他的rsync服務端口  
  55. --blocking-io 對遠程shell使用阻塞IO  
  56. -stats 給出某些文件的傳輸狀態(tài)  
  57. --progress 在傳輸時現(xiàn)實傳輸過程  
  58. --log-format=formAT 指定日志文件格式  
  59. --password-file=FILE 從FILE中得到密碼  
  60. --bwlimit=KBPS 限制I/O帶寬,KBytes per second  
  61. -h, --help 顯示幫助信息  

通過觀察失敗日志,我們可以發(fā)現(xiàn),Sersync所做的就是監(jiān)控文件夾變化,并定位到那個目錄,然后同步。
部分日志如下

  1. #errno 1280  
  2. cd /home/ftp && rsync -artuz -R  --timeout=100 --delete ./   --include="文件驗證.txt" --exclude=*  ruser@192.168.1.108::test --password-file=/etc/rsync/rsync.passwd >/dev/null 2>&1  

版權聲明:文章圖片資源來源于網(wǎng)絡,如有侵權,請留言刪除!!!
廣告也精彩
admin
  • 本文由 發(fā)表于 2020年11月5日 16:23:08
  • 轉載請務必保留本文鏈接:http://yudch.cn/6737.html
匿名

發(fā)表評論

匿名網(wǎng)友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: