以梦为马,不负韶华

搜索
查看: 3440|回复: 0
收起左侧

[应用交流] 在多台Windows主机间使用cwRsync来 同步/备份/传送 文件

[复制链接]
发表于 1970-1-1 08:00:00 显示全部楼层 |阅读模式
做个记号。

如果你有多台计算机,并且你希望它们的某些目录保持一致(例如,你经常更改文件的目录),那么如果用手工复制、粘贴的方法,就太没有效率了,文件夹多的话,能把你累个半死。所以,使用一些同步软件是极其重要的。
在这里,向你推荐rsync。套用网上的解释:rsync是在Linux和UNIX上广泛使用的文件传输和同步程序。此软件相当强大,经过一些配置之后,可以让你从此以后的同步备份工作变得极其简单、轻松。该软件有Windows下的版本,叫做cwRsync。官方对它的诠释是:cwrsync – Rsync for Windows。
你需要在一台计算机上安装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的更多配置选项,此处绝对不可能描述得完,请参考其手册。
 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
 首先要下载cwRsync的服务端和客户端软件,下载地址如下:  服务端:cwRsync_Server_2.0.10_Installer
  客户端:cwRsync_2.0.10_Installer
  然后我在本地机器上安装了其中的服务器端(10.0.2.136),然后在同网段下的另一台机器(10.0.2.137)安装了客户端。为了测试,我专门在本地机器上的f盘上放置了我们的产品dnt的站点文件,同时准备将该站点文件夹下的ASPx和config文件夹作为要进行同步文件的文件夹。然后在其服务端的rsyncd.config文件下,输入如下内容: 
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
port = 52326 
max connections = 4 
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[t_aspx]
path = /cygdrive/f/dnt_snap/aspx
read only = false
transfer logging = yes
lock file = rsyncd.lock 
[t_config] 
path = /cygdrive/f/dnt_snap/config
read only = false
transfer logging = yes
lock file = rsyncd.lock
  注:在上面的内容中,将监听端口设置为52326。
  这样,我们在控件面板-->管理工具-->服务,找到该服务并启动它,如下图:
  

                               
登录/注册后可看大图


  这时我们就可以在客户端(10.0.2.137)的f盘上创建一个叫sync的文件夹,同时在下面创建两个分别叫"config”和“ASPx”的文件夹来对应同步服务端的文件夹。
  然后接着用下面的内容创建一个名为 dnt_rsync.bat的批处理文件:
rsync -av rsync://10.0.2.136:52326/t_config /cygdrive/f/sync/config 
rsync -av rsync://10.0.2.136:52326/t_aspx /cygdrive/f/sync/aspx
  并将其放到cwRsync客户端安装目录下的bin目录中(我的安装目录如下:C:\Program Files\cwRsync\bin),然后双击启动它。
  这样,就开始同步文件了:
  

                               
登录/注册后可看大图

  之后,我们可以到客户端f盘的相应目前中查看同步过来的文件,呵呵。
  当然cwRsync是采用增量和修改同步方式,如果你将服务器端的相应文件做了修改,则同步时只会同步修改过的文件或新增的文件。    
  下面介绍一下如何通过Windows中的“任务计划”来创建定时任务,执行定时同步。
  首先在客户端的机器上的: 控件面板->任务计划->点击“添加任务计划”, 在相应的弹出窗口中点击下一步,然后点击导航窗口中的“浏览”按钮,如下,并从中选择之前创建的批处理文件”dnt_sync.bat”:

  

                               
登录/注册后可看大图


  这时系统会显示如下窗口提示当前计划任务执行方式,我这里选择每天执行(一次):
  

                               
登录/注册后可看大图

  到这里,系统就会创建一个叫dnt_sync的任务计划,同时在接下来的窗口中提示任务的开始执行时间:
  

                               
登录/注册后可看大图

  这里不做任何修改,直接点击下一步,接着是身份验证(通常是管理员身份),必定任务计划非同儿戏,要有足够的权限才可以玩的转:)
  

                               
登录/注册后可看大图

  最后点击完成,就创建了一个任务计划。只不过它是按天执行的,如果我们希望其每分钟执行一次又该怎么办呢,其实很简单,只要在用鼠标点击新创建的任务计划,并在弹出菜单中选择“属性”,这时在弹出窗口的“日程安排”中点击“高级按钮”,如下:
  

                               
登录/注册后可看大图

  这时就会弹出一个叫“高级计划选项”的子窗口,在其它做如下设置:
  

                               
登录/注册后可看大图

  到这里,这个计划任务就会每天24小时,以每分钟运行一次的方式来同步之前的那两个文件夹了。
  最近使用软件的时间超过了开发软件的时间,导致开发的代码量不像之前那么多了,呵呵。不过这类软件还是很有应用场景的,估计将来会用的上,故写作本文与大家分享的同时以“备份”处之。
  原文链接: http://www.cnblogs.com/daizhj/archive/2009/11/03/1595395.html
发表于 1970-1-1 08:00:00 显示全部楼层
这么高深!一般都不会用到的吧
 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
终于搞掂了。。。
nndx,根本不需要搞那么复杂。
服务器端rsyncd.conf文件的设置:
  1. use chroot = false
  2. strict modes = false
  3. hosts allow = *                #允许IP
  4. log file = rsyncd.log           #log文件
  5. pid file = rsyncd.pid           #不晓得干嘛di
  6. port = 52326                 # 端口
  7. uid = 0                        
  8. gid = 0
  9. max connections = 10

  10. # Module definitions
  11. # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
  12. [t]
  13. path = /cygdrive/d/test             #需要同步的文件目录
  14. read only = false
  15. transfer logging = yes
  16. lock file = rsyncd.lock

复制代码
客户端设置批处理文件:
  1. cd C:\Program Files\ICW\bin\
  2. rsync -av --delete rsync://10.10.10.103:52326/t /cygdrive/e/test
复制代码
客户端,批处理中(rsync.bat):

  1. set CYGWIN=nontsec
  2. rsync -vzrtopg --delete rsync://192.168.0.88:873/www.test.com  /cygdrive/d/www.test.com
复制代码
最后再把批处理的文件建成计划任务,时间间隔可以根据项目需求而定,同时 set CYGWIN=nontsec 这个参数十分重要,不然会引起文件权限问题,一定要加上, --delete 是是否删除的选项,比如服务器端删除了一个文件,客户端如果也要删除,就要加上这个参数,对于代码同步,这个是必须的,但是对于文件同步,这个不加比较好

发表于 1970-1-1 08:00:00 显示全部楼层
学习学习呵呵
懒得打字嘛,点击右侧快捷回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|以梦为马,不负韶华

GMT+8, 2025-1-4 12:24

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

快速回复 返回顶部 返回列表