弄懂cwRsync的功能并把软件架设好全靠云端阶梯的一篇文章,虽然在网上已经查看了很多资料,不过令到我有更深启发的却是云端阶梯里面的一篇文章。博主写得很详细,条理清晰,让人很容易看明白。这里要感谢他!下面是他这篇文章的转载:
如果你有多台计算机,并且你希望它们的某些目录保持一致(例如,你经常更改文件的目录),那么如果用手工复制、粘贴的方法,就太没有效率了,文件夹多的话,能把你累个半死。所以,使用一些同步软件是极其重要的。
在这里,向你推荐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 [email protected]::test/ /cygdrive/”D/Program Files/test”
rsync.exe -ravz –progress –password-file=/cygdrive/f/rsync/pass_file [email protected]::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的更多配置选项,此处绝对不可能描述得完,请参考其手册。