一、概述
linux/unix下的优秀开源备份工具非常多,rsync常是其中的一个。当然因其出色的性能,由此产生的变种类型的类rsync软件也非常之多。鉴于其在LINUX/unix上的成功,于是将其windows化也便理所当然了,不过其在windows下的变种也非常多,不过出较正统的应该还是cwRsync 。
二、下载和安装
cwrsync在sourceforge上最新版本的托管页面为: http://sourceforge.net/projects/sereds/files/cwRsync/4.0.5/ ,其中包含有两个软件,一个是客户端一个是服务端。windows下的软件安装都比较简单,自然是下一步下一步就OK了。不过其中有一项需要新建系统用户名和密码项要注意(如下图):
<a href="https://www.361way.com/wp-content/uploads/2012/10/cwrsync.png"><img class="alignleft size-full wp-image-1807" title="cwrsync" alt="" src="https://www.361way.com/wp-content/uploads/2012/10/cwrsync.png" width="480" height="276" /></a>
注:为避免安全性的问题,最好能将默认的用户名密码更改。另外,备份的目录可以由该用户写入更改的权限。如果想避免由此引起的问题,可以考试将安装使用的用户加入管理员组。并且设置一个复杂的密码。因为该用户只有在启动和关闭RsyncServer服务时使用。
三、修改配置文件进行同步
依次点击,开始—— 程序 ——cwRsyncServer ——01. rsyncd.conf;打开rsyncd的配置文件,进行配置,下面我列出一个简单的demo配置,如下:
use chroot = false uid = 0 gid = 0 strict modes = false hosts allow = 192.168.10.0/255.255.255.0 hosts deny = * log file = rsyncd.log # Module definitions # Remember cygwin naming conventions : c:work becomes /cygwin/c/work # [test] path = /cygdrive/e/back auth users = abc secrets file = etc/user.pas read only = false transfer logging = yes
然后打开etc配置目录 —— 默认在C:Program FilesICWetc,配置密码文件user.pas 。输入内容如下:
<br />
abc:123 //这个用户和刚刚安装时的系统用户无关,可随意取 用户名:密码
<br />
至此配置完成后,再通过services.msc打开启RsyncServer服务即可进行文件同步了。
四、同linux同步下的一些权限和访问问题
windows同windows之间的同步,一般不会存在权限的问题。但在通过linux rsync客户端向windows服务端进行同步时,遇到权限问题。LINUX下需要同步的文件如下:
[root@localhost ~]# ll /opt/mysqldata/ 总计 20564 -rw-rw---- 1 mysql mysql 10485760 10-11 15:10 ibdata1 -rw-rw---- 1 mysql mysql 5242880 10-11 15:11 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 10-11 14:28 ib_logfile1 -rw-rw---- 1 mysql mysql 6 10-11 15:11 localhost.localdomain.pid -rw-rw---- 1 mysql mysql 66 10-15 15:11 master.info drwx------ 2 mysql root 4096 10-11 14:27 mysql -rw-rw---- 1 mysql root 6427 10-15 16:11 mysqld.log srwxrwxrwx 1 mysql mysql 0 10-11 15:11 mysql.sock
可以看到上面的文件的属主主要为mysql ,在通过下面的命令进行同步时出现报错(该处使用推的方式向服务端存数据):
<br />
[root@localhost ~]# rsync -avzP --delete /opt/mysqldata/ test@192.168.10.168::test --password-file=/root/pass.txt sending incremental file list ./ rsync: failed to set times on "." (in test): Is a directory (21) ib_logfile0 5242880 100% 54.01MB/s 0:00:00 (xfer#1, to-check=66/68) ib_logfile1 5242880 100% 31.06MB/s 0:00:00 (xfer#2, to-check=65/68) ibdata1 10485760 100% 33.33MB/s 0:00:00 (xfer#3, to-check=64/68) rsync: chown ".ib_logfile0.Ffc2lF" (in test) failed: Invalid argument (22) rsync: chown ".ib_logfile1.5ZABPv" (in test) failed: Invalid argument (22) rsync: chown ".ibdata1.r7HxRn" (in test) failed: Invalid argument (22) rsync: chown "mysql/.proc.MYD.Rh5A74" (in test) failed: Invalid argument (22)
<br />
可以发现,文件同步没有问题,可以对文件和目录进行同步,但进行chown权限处理时出错,现在我们再去服务端上查看同步的文件时,发现:同步的根目录下的文件可以正常打开,但目录打开时会出现下面的错误:
<a href="https://www.361way.com/wp-content/uploads/2012/10/cwerror.png"><img class="alignleft size-full wp-image-1809" title="cwerror" alt="" src="https://www.361way.com/wp-content/uploads/2012/10/cwerror.png" width="356" height="227" /></a>
如上图所以,我打开mysqld.log文件正常,双击mysql目录时,就报上面的错误。进行删除也不成功,通过360强力删除无效果(360强力删除后,会发现该分区甚至不能格式化,清理这些备份文件)。难不成我们真对上面的文件删除无计可施了吗?
当然不会,我们有两两种方法将上面的文件清除。
方法1、通过属主全为root的目录文件再行覆盖同步:
[root@localhost ni]# ll 总计 4 -rw-r--r-- 1 root root 0 10-12 16:32 a drwxr-xr-x 2 root root 4096 10-12 16:32 ab -rw-r--r-- 1 root root 0 10-12 16:32 b [root@localhost ni]# rsync -avzP --delete /opt/ni/ test@192.168.10.168::test --password-file=/root/pass.txt
方法2、通过cwRsyncServer自带的工具进行处理。
C:Program FilesICWBin>chmod 777 /cygdrive/e/back/*
<br />
注:上面的这个文件实际上也见接的造成,我们不能查看同步目录下的子目录里的文件,但这并非是种坏事,以免造成我们去误操作这些备份文件。如果我们想查看目录下的文件就需要通过cwrsyncserver自带的chmod去修改文件的权限或chown修改文件的属主。
解决了上面这个棘手问题,我们再看刚刚的Invalid argument的问题,其引起的原因,是因为我们在同步时,参数-a相当于-rlptgoD ,去掉其中go(group 、owner)两个参数即可,即rsync –-rlptDvzP …… 。
五、总结
linux和windows之间虽然通过文件同步,虽然会有一些报错,主要是权限的问题,但对于文件的完整性来说,并没有问题。还拿上面的例子,我们通过linux取回保存在windows server端的文件时,发现文件并没有损坏。
rsync -avzP --delete --password-file=/root/pass.txt test@192.168.10.168::test /root/test [root@localhost ni]# cd /root/test/ [root@localhost test]# ll 总计 20564 -rw------- 1 root root 10485760 10-11 15:10 ibdata1 -rw------- 1 root root 5242880 10-11 15:11 ib_logfile0 -rw------- 1 root root 5242880 10-11 14:28 ib_logfile1 -rw------- 1 root root 6 10-11 15:11 localhost.localdomain.pid -rw------- 1 root root 66 10-15 15:11 master.info drwx------ 2 root root 4096 10-11 14:27 mysql -rw------- 1 root root 6427 10-15 16:11 mysqld.log srwxrwxrwx 1 root root 0 10-11 15:11 mysql.sock
以上我们通过<span style="color:#e53333;">拉的方式</span>将server端的文件同步回本地。发现文件的属主变成了root,但所有的文件,放回本地后,都可以正常使用。且数据内容并未发生变化。另外,如果你用不惯命令和参数的方式进行配置,在windows下的rsync还为一些具有图形界面的rsync工具 。比较具有代表性的有deltacopy ,不过该工具需要依赖cwrsync服务端才能运行 。
2013年03月08日后记:
cwrsync目前已从sourceforge项目上移走,目前可以通过其官方网站上下载:<a href="https://www.itefix.no/i2/cwrsync-get">https://www.itefix.no/i2/cwrsync-get</a> ,不过官方站上有收费版和免费版,可以查清了以后再下载。