Rsync:Windows和Linux下本地同步及远程同步

一、什么是rsync

  rsync,remote synchronize 一款远程同步功能的软件。Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。 Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。 

软件下载:

Windows版本:windows版rsync下载地址 分为客户端和服务器端,都要下载

Linux版本:linux版rsync下载 大部分linux自带rsync。

从上到下:win客户端,win服务端,linux版

二、Windows下使用

         本地同步需要客户端就行。远程同步需要服务端和客户端。测试的话,用一台电脑就行,就是在本机同时安装客户端和服务器端。

         (a)先安装好客户端,cmd命令到安装路径的bin路径下

Rsync:Windows和Linux下本地同步及远程同步_第1张图片

         该例执行指令:rsync -vrtopg -progress --delete /cygdrive/e/test/rsync/a   /cygdrive/e/test/rsync/b           (a目录后没有加斜杠)

         效果:将a目录同步到b目录下,此时b目录下多了a目录及a目录下的内容。

Rsync:Windows和Linux下本地同步及远程同步_第2张图片

         该例执行指令:rsync -vrtopg -progress --delete /cygdrive/e/test/rsync/a/  /cygdrive/e/test/rsync/b          (a目录后有加斜杠)

         效果:将a目录下的内容同步到b目录下,此时先删除了b目录下的a目录,然后将a目录下的内容同步到b目录。此时a,b目录是同级状态。

注:目录的格式很明了,主要就是前面加上/cygdrive/,linux下是不需要的。

         (b)接下来安装服务端。

注意:Rsync:Windows和Linux下本地同步及远程同步_第3张图片

这里填写操作系统用户名及密码,如果填写不存在的,rsync会创建这个用户(杀毒软件会提示被入侵...而且创建无用用户也不好)。

        在此特别说明,这个版本貌似不能再win8上使用,我试了一下午。。。都要崩溃了。win7和xp是可以的,我都试了。

安装完毕后,先配置服务端的配置文件(安装路径ICW下):rsyncd.conf

 Rsync:Windows和Linux下本地同步及远程同步_第4张图片

配置文件的简要说明(只说明我常用的):

------------------------------------------------------------------------------

port:指定后台程序使用的端口号,默认为873。(得让防火墙允许开发该端口!)

log file:指定rsync的日志文件,如/var/log/rsyncd.log

uid:指定该模块传输文件时守护进程应该具有的uid,默认nobody,win下不填会报错,uid=0

gid:指定该模块传输文件时守护进程应该具有的gid,默认nobody,win下不填会报错,gid=0

hosts allow :该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:单个IP地址,例如:192.167.0.1; 整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0 ,多个IP或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。

read only:该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。

auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file :该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。注意:该文件的权限一定要是600,否则客户端将不能连接服务器。 

strict modes :该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。

------------------------------------------------------------------------------

Rsync:Windows和Linux下本地同步及远程同步_第5张图片

该句执行指令:rsync -rv --delete /cygdrive/d/test/a/  rsync://127.0.01:873/test 等价于 rsync -rv --delete /cygdrive/d/test/a/  /cygdrive/d/test/b

远程同步的格式有很多种,其实只要记住一种就成。我习惯用这种:rsync://【IP】:【PORT】/【路径名】 

rsync命令的简要说明(只说明我常用的):

------------------------------------------------------------------------------

-v, --verbose 详细模式输出 

-z, --compress 对备份的文件在传输时进行压缩处理 

-r, --recursive 对子目录以递归模式处理 

-c, --checksum 打开校验开关,强制对文件传输进行校验 

-p, --perms 保持文件权限

-o, --owner 保持文件属主信息

-g, --group 保持文件属组信息 

-t, --times 保持文件时间信息 

--delete 删除那些“同步路径”中“源路径”没有的文件 

--exclude=PATTERN 指定排除不需要传输的文件模式 

--include=PATTERN 指定不排除而需要传输的文件模式 

--progress 在传输时现实传输过程

--port=PORT 指定其他的rsync服务端口

------------------------------------------------------------------------------

三、Linux下使用rsync

首先确认本机是否安装:

如果没有就自己安装下吧。此时就已经可以本地同步了,相当于拥有了客户端。

Rsync:Windows和Linux下本地同步及远程同步_第6张图片

命令和windows基本一样,只是路径前不需要加/cygdrive/

接下来,“安装”服务端,这个超简单,加个文件rsyncd.conf(同windows)到etc路径下就行

添加后执行:rsync --daemon --config=/etc/rsyncd.conf

验证端口是否开放:netstat -na|grep 873。然后服务就启动了,就这么简单

执行:rsync -vr /var/tmp/a/ 127.0.0.1::test。效果同上。

四、rsync经验总结

Rsync在传输时,不启用压缩,比启用压缩要快将近10倍(夸张了...)

压缩使用的场合:低带宽,或对带宽有要求。传输文件压缩比率大

非压缩适用的场合:带宽充足,传输文件比较大,传输文件压缩比率小

建议不启用压缩

-----------------------

Rsync在传输时,启用数据校验,比不启用数据校验多耗时30%

文件校验使用的场合:对文件完整性要求高

非文件校验适用的场合:对文件完整性要求低

建议使用文件校验

------------------------

SSH隧道传输,速度比rsync server要快,但CPU资源消耗比较高,加密耗时较多

SSH隧道传输适用的场合:安全性要求比较高,对CPU资源消耗要求低

rsync server适用的场合:对安全性要求比较低,对CPU资源消耗要求高。

建议使用SSH加密隧道模式传输

------------------------

在与远端进行数据同步时,我们一般采用ssh通道,使用 -e ssh 选项可以完成该功能:

$ rsync -avz -e ssh /root/temp/ [email protected]:/home/lx/tmp/

--------------------------

1、 如果对数据安全性要求低,建议选择rsync server模式,未启用压缩,启用数据校验,修改TCP/IP协议字段号为29。

2、 如果对数据安全性要求高,建议选择SSH隧道加密传输,arcfour弱加密算法,未启用压缩,启用数据校验,修改TCP/IP协议字段号为29

3、 如果是第一次推送数据,建议加上-W参数,意思是不检查文件更新,直接传送整个文件,这样可以减少文件检测时间,节省程序总运行时间。

4、 如果想进一步节省程序运行时间,可在使用checksum的同时,加上—block-size=512这个参数(默认是700)。数值建议是500以上,并且是2的N次方,最大不超过2048。推荐512,1024,2048这三个值。

5、 在传输数据时,为了不影响线上正常业务,建议根据线上实际情况,通过—bwlimit=KPBS参数对带宽进行限制

Rsync的缺陷在于无法事件触发式的监听,我的下篇博客,将通过java来实现跨平台的文件监听。




你可能感兴趣的:(Java)