一、概述

linux/unix下的优秀开源备份工具非常多,rsync常是其中的一个。当然因其出色的性能,由此产生的变种类型的类rsync软件也非常之多。鉴于其在LINUX/unix上的成功,于是将其windows化也便理所当然了,不过其在windows下的变种也非常多,不过出较正统的应该还是cwRsync 。

二、下载和安装

cwrsync在sourceforge上最新版本的托管页面为: http://sourceforge.net/projects/sereds/files/cwRsync/4.0.5/ ,其中包含有两个软件,一个是客户端一个是服务端。windows下的软件安装都比较简单,自然是下一步下一步就OK了。不过其中有一项需要新建系统用户名和密码项要注意(如下图):

cwrsync

注:为避免安全性的问题,最好能将默认的用户名密码更改。另外,备份的目录可以由该用户写入更改的权限。如果想避免由此引起的问题,可以考试将安装使用的用户加入管理员组。并且设置一个复杂的密码。因为该用户只有在启动和关闭RsyncServer服务时使用

三、修改配置文件进行同步

依次点击,开始—— 程序 ——cwRsyncServer ——01. rsyncd.conf;打开rsyncd的配置文件,进行配置,下面我列出一个简单的demo配置,如下:

 1use chroot = false
 2uid = 0
 3gid = 0
 4strict modes = false
 5hosts allow = 192.168.10.0/255.255.255.0
 6hosts deny = *
 7log file = rsyncd.log
 8# Module definitions
 9# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
10#
11[test]
12path = /cygdrive/e/back
13auth users = abc
14secrets file = etc/user.pas
15read only = false
16transfer logging = yes

然后打开etc配置目录 —— 默认在C:\Program Files\ICW\etc,配置密码文件user.pas 。输入内容如下:

1abc:123     //这个用户和刚刚安装时的系统用户无关,可随意取
2用户名:密码

至此配置完成后,再通过services.msc打开启RsyncServer服务即可进行文件同步了。

四、同linux同步下的一些权限和访问问题

windows同windows之间的同步,一般不会存在权限的问题。但在通过linux rsync客户端向windows服务端进行同步时,遇到权限问题。LINUX下需要同步的文件如下:

 1[root@localhost ~]# ll /opt/mysqldata/
 2总计 20564
 3-rw-rw---- 1 mysql mysql 10485760 10-11 15:10 ibdata1
 4-rw-rw---- 1 mysql mysql  5242880 10-11 15:11 ib_logfile0
 5-rw-rw---- 1 mysql mysql  5242880 10-11 14:28 ib_logfile1
 6-rw-rw---- 1 mysql mysql        6 10-11 15:11 localhost.localdomain.pid
 7-rw-rw---- 1 mysql mysql       66 10-15 15:11 master.info
 8drwx------ 2 mysql root      4096 10-11 14:27 mysql
 9-rw-rw---- 1 mysql root      6427 10-15 16:11 mysqld.log
10srwxrwxrwx 1 mysql mysql        0 10-11 15:11 mysql.sock

可以看到上面的文件的属主主要为mysql ,在通过下面的命令进行同步时出现报错(该处使用推的方式向服务端存数据):

 1[root@localhost ~]# rsync -avzP --delete /opt/mysqldata/ [email protected]::test --password-file=/root/pass.txt
 2sending incremental file list
 3./
 4rsync: failed to set times on "." (in test): Is a directory (21)
 5ib_logfile0
 6     5242880 100%   54.01MB/s    0:00:00 (xfer#1, to-check=66/68)
 7ib_logfile1
 8     5242880 100%   31.06MB/s    0:00:00 (xfer#2, to-check=65/68)
 9ibdata1
10    10485760 100%   33.33MB/s    0:00:00 (xfer#3, to-check=64/68)
11rsync: chown ".ib_logfile0.Ffc2lF" (in test) failed: Invalid argument (22)
12rsync: chown ".ib_logfile1.5ZABPv" (in test) failed: Invalid argument (22)
13rsync: chown ".ibdata1.r7HxRn" (in test) failed: Invalid argument (22)
14rsync: chown "mysql/.proc.MYD.Rh5A74" (in test) failed: Invalid argument (22)

可以发现,文件同步没有问题,可以对文件和目录进行同步,但进行chown权限处理时出错,现在我们再去服务端上查看同步的文件时,发现:同步的根目录下的文件可以正常打开,但目录打开时会出现下面的错误:

cwerror

如上图所以,我打开mysqld.log文件正常,双击mysql目录时,就报上面的错误。进行删除也不成功,通过360强力删除无效果(360强力删除后,会发现该分区甚至不能格式化,清理这些备份文件)。难不成我们真对上面的文件删除无计可施了吗?

当然不会,我们有两两种方法将上面的文件清除。

方法1、通过属主全为root的目录文件再行覆盖同步:

1[root@localhost ni]# ll
2总计 4
3-rw-r--r-- 1 root root    0 10-12 16:32 a
4drwxr-xr-x 2 root root 4096 10-12 16:32 ab
5-rw-r--r-- 1 root root    0 10-12 16:32 b
6[root@localhost ni]# rsync -avzP --delete /opt/ni/ [email protected]::test --password-file=/root/pass.txt

方法2、通过cwRsyncServer自带的工具进行处理。

1C:\Program Files\ICW\Bin>chmod 777 /cygdrive/e/back/*

注:上面的这个文件实际上也见接的造成,我们不能查看同步目录下的子目录里的文件,但这并非是种坏事,以免造成我们去误操作这些备份文件。如果我们想查看目录下的文件就需要通过cwrsyncserver自带的chmod去修改文件的权限或chown修改文件的属主。

解决了上面这个棘手问题,我们再看刚刚的Invalid argument的问题,其引起的原因,是因为我们在同步时,参数-a相当于-rlptgoD ,去掉其中go(group 、owner)两个参数即可,即rsync –-rlptDvzP …… 。

五、总结

linux和windows之间虽然通过文件同步,虽然会有一些报错,主要是权限的问题,但对于文件的完整性来说,并没有问题。还拿上面的例子,我们通过linux取回保存在windows server端的文件时,发现文件并没有损坏。

 1rsync -avzP --delete --password-file=/root/pass.txt [email protected]::test /root/test
 2[root@localhost ni]# cd /root/test/
 3[root@localhost test]# ll
 4总计 20564
 5-rw------- 1 root root 10485760 10-11 15:10 ibdata1
 6-rw------- 1 root root  5242880 10-11 15:11 ib_logfile0
 7-rw------- 1 root root  5242880 10-11 14:28 ib_logfile1
 8-rw------- 1 root root        6 10-11 15:11 localhost.localdomain.pid
 9-rw------- 1 root root       66 10-15 15:11 master.info
10drwx------ 2 root root     4096 10-11 14:27 mysql
11-rw------- 1 root root     6427 10-15 16:11 mysqld.log
12srwxrwxrwx 1 root root        0 10-11 15:11 mysql.sock

以上我们通过拉的方式将server端的文件同步回本地。发现文件的属主变成了root,但所有的文件,放回本地后,都可以正常使用。且数据内容并未发生变化。另外,如果你用不惯命令和参数的方式进行配置,在windows下的rsync还为一些具有图形界面的rsync工具 。比较具有代表性的有deltacopy ,不过该工具需要依赖cwrsync服务端才能运行 。

2013年03月08日后记:

cwrsync目前已从sourceforge项目上移走,目前可以通过其官方网站上下载:https://www.itefix.no/i2/cwrsync-get ,不过官方站上有收费版和免费版,可以查清了以后再下载。