rsync在windows上的安装和使用一

文:铁乐与猫
2017-9-28

rsync在windows上使用,是通过先在windows上安装Cygwin,然后再在cygwin中安装rsync来实现的。

官网给出的安装包,rsync 是作为cgywin的一个包装到windows下的。
其实了解到这一点后,我们也可以直接先自行在windows上安装cygwin,然后再手动在cygwin环境下象linux一样编译安装rsync最新的源码包。

不过这次就先进行测试官网的安装包吧。
rsync官网上有给出安装包,最新版可以看到做为服务端使用及其他一些功能都变成了要收费去购买回来。我们这次当然就选择做为客户端的免费版就足够了。
httpss://www.itefix.net/cwrsync 这个链接中可以看到收费和免费的功能差别。

最新版cwRsync-5.5.0-32位的下载链接如下:
httpss://www.itefix.net/dl/cwRsync_5.5.0_x86_Free.zip

解压看到readme说明文档里告诉我们这个封装包用到了以下几个软件和各自的版本:

Version information:
Rsync 3.1.2
Cygwin 2.3.1
OpenSSH 7.1p
OpenSSL 1.0.2e

解压在windows上安装(其实就是运行一个批处理脚本,设置好环境变量之类的),Rsync 默认解压已存在,直接就可以使用。

默认解压后初始就是一个bin目录,一个cwrsync批处理,两个说明文档,合共4个文件目录。

点击cwrsync运行批处理脚本后,会再生成一个home文件夹,而现在的这个路径则在以后运行的rsync命令中,此目录就为/根目录。(相当于linux系统的root根目录)

运行cmd命令提示符,进行向服务端拉取文件测试:
cmd先进入到cwRsync解压后的目录下的bin目录下再运行rsync命令:

rsync -avz apache@172.16.0.111::www /rsync

对比可得知,rsync毕竟是在模拟了linux环境的cygwin中运行的,所以它是不可能认windows这种盘符路径的。
而/根目录就是映射在cwRsync的解压目录,所以就自行创建了rsync目录在windows的cwRsync的解压目录下啦。
此外我这次并没有指定密码文件,而是交互方式输入了密码。

如果要弄成一个计划任务执行,就需要有一个密码文件,或者在环境变量中输入密码以便免密连接。

如果是windows安装成服务端,比如直接在官网购买了服务端版本,又或者自行安装完cygwin后再进行的安装rsync服务。
进行的配置文件等操作都是象在liunx上同理的,上一份文档已讲述就不再复述了。

在这里再尝试一下使用密码文件及推送自己作为客户端上的文件到服务端。
在cwRsync目录下新建etc目录,新建一个rsync_pwd.txt文件,写入ABCabc123测试密码。
就是模拟实际需求,线上web服务器网站目录,整个架构文件同步回本地的linux(rsync服务端)中。

因为rsync同步可以保持目录架构和权限,所以是挺适合同步web目录的,做为测试模拟,
我复制了一份在别的windows客户端上的IIS的inetpub目录放在客户端的E盘下。
这里要推送到服务端可能会存在一个问题,就是在这种情况下,cmd命令的时候rsync怎么识别windows的盘符路径?
目前思索如果真的不可行的情况下,解决的思路是在windows上用工具做一下虚拟目录映射(或快捷方式可以的话也行?)

第一次尝试敲盘符路径,果然是认不到的:
rsync -avz e:/inetpub apache@172.16.0.111::www –password-file=/etc/rsync_pwd.txt
出错误提示The source and destination cannot both be remote.
显然就是e:/inetpub这种认不出的。

然后第二次尝试将inetpub创建一个快捷方式放进cwRsync根目录下,运行:
rsync -avz /inetpub apache@172.16.0.111::www –password-file=/etc/rsync_pwd.txt
这次直接报错失败是因为这只是个link链接文件。
rsync: link_stat “/inetpub” failed: No such file or directory (2)

第三次尝试加上-L选项,看能不能找到指向实体的文件,不过我猜也是超出根目录范围的就不行。
果然也是和第二次的尝试一样的错误。

那就先尝试用虚拟映射吧。
使用Junction这个工具修改硬链接,但是做这些操作前要先做好源文件的备份(备完后改一下名,然后在原位置起个同旧名的)
因为修改的是硬链接,所以如果直接操作会将源文件从扇区里直接给删掉了。所以备份改名新建一下源目录。
同理,在cwRsync目录下也创建好一个inetpub文件夹。

Junction e:\inetpub e:\soft\cwRsync_5.5.0_x86_Free\inetpub

这样操作过后,实际上以后存放网站实际文件的位置都是在cwRsync的inetpub目录!
也就是在IIS上即使指向虚拟目录是e:\inetpub,文件实际上是存放在e:\soft\cwRsync_5.5.0_x86_Free\inetpub的。
这样其实是变相妥协了,要将文件真的放cwRsync的根目录下了,这也是没办法之中的办法了。

如图,修改过硬链接的inetpub其实会变成一个带箭头的图标。将之前备份的文件复制回里面。
到e:\soft\cwRsync_5.5.0_x86_Free\inetpub下验证,同样发现有复制过去的文件存在,表示映射成功。

这次再做同步测试就简单了:
rsync -avz /inetpub apache@172.16.0.111::www –password-file=/etc/rsync_pwd.txt

sent 170,691 bytes received 1,506 bytes 344,394.00 bytes/sec
total size is 422,809 speedup is 2.46
果然推送成功!

————–
补充:看别人的博客中发现,只要设置好环境变量,类似e盘中的某个目录这个路径是可以表示出来的!
并不需要用到虚拟映射这么复杂。具体详情请看接下来的文章补充。
/cygdrive/e就可以表示e盘路径了!例如下例:
rsync -avz /cygdrive/e/python apache@172.16.0.111::www –password-file=/etc/rsync_pwd.txt


————–

同样到172.16.0.111服务器那边查看也有整个目录都同步了下来。
[root@jira www]# ls -lah inetpub/
总用量 0
drwxrwx— 7 544 197121 70 9月 28 15:27 .
drwxr-xr-x 4 root root 74 9月 28 15:29 ..
drwxrwx— 3 544 197121 18 9月 28 15:27 custerr
drwxrwx— 5 544 197121 90 9月 28 15:27 history
drwxrwx— 3 544 197121 21 9月 28 15:27 logs
drwxrwx— 4 544 197121 58 9月 28 15:27 temp
drwxrwx— 2 544 197121 42 9月 28 15:27 wwwroot

不过毕竟是windows推送到liunx上同步,权限属性是不是能完全复制同步过来还是没有底的,
但是如果要用windows同步到windows,rsync在windows上的服务端是要购买的……

接下来尝试在windows上自行安装cygwin,在编译安装rysnc服务的方式看可行不,
要不就用不收费的低版本的rsync服务器版估计也行。
关于这个思路和实验就放到下一篇文章里叙述了。

end

发表评论

电子邮件地址不会被公开。 必填项已用*标注