简介:rsync为一个同步软件。rsync的linux版名称rsync,windows版名称cwRsync。有服务器端和客户机端之分。服务器端需时刻启动相关服务,以等待客户端的同步命令。
如果要定时同步windows下文件到linux下(拉取方式)。可只安装windows服务器端,linux客户端,linux客户端设置定时任务。

一、windows下安装rsync服务器端

⑴安装cwRsync

下载cwRsyncServer_4.1.0_Installer.exe
cwRsyncServer下载完毕后,进行安装即可。其中有一点需要注意,就是在安装的过程中,会提示要输入cwRsyncServer在系统中新建用户的用户名及密码(能用该账户登录系统),也可以输入已有用户的用户名和密码。

如果想要随时使用相关命令,可把目前cwRsync所在的bin路径加入到系统的环境变量中。(我的电脑–右键属性–高级系统设置–环境变量–系统变量)找到path,点击编辑在最后面加上路径,例如 ;C:\ICW\bin

⑵修改配置文件

windows下rsync服务器端配置文件

uid = 0
gid = 0
use chroot = false
strict modes = false
log file = rsyncd.log
[backup]
path = /cygdrive/c/web/
ignore errors
read only = yes
list = no
hosts allow = 192.168.213.0/255.255.255.0
auth users = synctest
secrets file = /cygdrive/c/ICW/rsyncd.password

配置解析
上述配置文件/cygdrive/c代表c:/ 其余设定跟linux下一样。开关选项使用(yes/no)。
上述[backup]为模块名,配置文件可以写入多个模块。
auth users 为同步时输入的用户,只与密码文件(secrets file)里设置的用户有关,与系统用户无关。
path后接要同步的目录,
hosts allow后修改为对应允许同步的主机或ip段,设为 * 表示允许所有主机。
read only为只读模式,如果想同步目录可写,请设为no。

配置文件rsyncd.conf修改完毕后,我们来创建backup模块的同步文件夹,上述配置文件是设为c:/web/

注意:同步文件夹创建完毕后,一定要把我们在前面安装rsyncserver时创建的用户,对该文件夹具有完全所有权。选择该文件夹–右键属性–安全–选中该用户–勾选完全控制。

同步文件夹创建完毕后,再创建同步时的密码文件,上述配置文件中密码文件是放在c:/ICW/rsyncd.password。内容如下:
用户名:密码 例如 synctest:password

注意:该文件创建完毕后,一定要使用chmod命令修改其权限。这个和Linux系统上是一样的。chmod命令在rsyncserver的bin目录下,我们可以直接使用(下面为用户SvcCWRSYNC )

chmod 600 /cygdrive/c/ICW/rsyncd.password
chown SvcCWRSYNC /cygdrive/c/ICW/rsyncd.password

以上全部修改并配置完毕后,就可以在windows的服务(计算机–管理–服务)中看到rsync服务(RsyncServer)。把该服务设置为自动启动,并启动该服务。

手动启动命令 , 在cmd里输入以下行,(–config后接配置文件)例:
rsync --daemon --ipv4 --config=/cygdrive/c/ICW/rsyncd.conf

此后不用手动启动即可正常使用rsync服务端。

⑶测试

现在在另一台机器上检查是否可以正常连接(有装telnet的机器即可)
telnet IP地址 端口号,命令如下
telnet 192.168.213.133 873
看到如下说明可以连接
@RSYNCD: 30.0

二、linux下安装rsync

⑴安装rsync

linux下服务器端与客户端是同一个软件
yum -y install rsync
安装结束后,我们可以查看下rsync命令所在的目录以及rsync的帮助。如下:
which rsync
默认安装在/usr/bin/rsync
rsync --help //查看帮助文档

⑵linux下客户端配置

客户端只需要配置一个密码文件即可。该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。
vi /etc/rsyncd.password
添加如下行,例密码test:
test
密码文件中,只需要写入密码即可,不需要用户名。(服务器端密码文件需要写入 用户名:密码)
密码文件创建完毕后,要把其权限设置为600,否则会在以后同步时提示验证出错。执行以下:
chmod 600 /etc/rsyncd.password

⑶linux下服务器端配置

如不使用linux下rsync服务器端,请跳过
①设为开机启动
在centos下rsync默认以xinetd方式运行rsync服务。所以RPM方式安装rsync的话,我们只需启动xinet服务即可。
vi /etc/xinetd.d/rsync
修改为以下行,保存退出

disable = no
flags           = IPv4
server_args     = --daemon --/etc/rsyncd.conf

如无法使用ipv6则上述一定要设为IPv4方式,否则会出错

配置完毕后,我们还需要安装xinetd软件包,否则无法启动xinetd服务。如下:
yum -y install xinetd
服务器端启动命令
/etc/init.d/xinetd start
关闭rsync服务
/etc/init.d/xinetd stop
设为开机启动
chkconfig xinetd on
查看端口是否开启,是使用ipv6方式还是ipv4方式
netstat -tunlp |grep :873

②linux下rsync服务器端配置文件
服务器端需要启动服务,才能随时以daemon认证方式同步文件。客户端可以接收文件时才启动。

1、修改rsync配置文件

vi /etc/rsyncd.conf
Linux服务端实际配置文件如下

uid = root
gid = root
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
[backup]
path = /home/rsync/
ignore errors
read only = no
list = no
hosts allow = 192.168.213.0/255.255.255.0
auth users = test
secrets file = /etc/rsyncd.password

配置解释:开关选项使用(yes/no)。上述[backup]为模块名,auth users 为同步时输入的用户,path后接要同步的目录,hosts allow后修改为对应允许同步的主机或IP段,read only为只读模式。

2、修改rsync用户与对应密码文件
vi /etc/rsyncd.password
添加如下行:
test:test
上述为用户test,密码test(用户在前面)

密码文件创建完毕后,要把其权限设置为600,否则会在以后同步时提示验证出错。执行以下:
chmod 600 /etc/rsyncd.password

注意:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户存在。一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。

如果重启出现以下
failed to create pid file /var/run/rsyncd.pid: File exists
删除相关的pid文件
rm -rf /var/run/rsyncd.pid

三、系统相关设定

1.防火墙放行
iptables -I INPUT -p tcp --dport 873 -j ACCEPT

2.创建相关同步目录,例:
mkdir /home/rsync/

3.查看端口是否开启
netstat -ntulp
daemon方式默认端口为873 SSH方式默认端口为22

四、rsync同步命令

注:如果是windows系统/cygdrive/c代表c:/其余一样。如要设为定时同步crontab -e然后加入以下同步的命令。例加入
0 1 * * * date为每天1时0分执行date命令。
以下同步命令原则是来源目录在前面,目标目录在后面。

⑴本机文件同步

同步本地文件,从一个目录同步到另外一个目录。如:rsync -avz /data /backup,表示把本地/data目录下的文件同步到本地/backup目录下。

⑵daemon方式远程同步

此为常用方式,默认端口873
如果在WINDOWS同步时提示密码文件无法存取,但是使用手动输入密码可以同步。
请把引用密码文件的命令格式改为<c:\icw\rsyncd.password原来的格式为--password-file=/cygdrive/c/icw/rsyncd.password

①推送文件(从客户端推送文件到服务器端)
rsync -avz /home/www/* test@192.168.213.146::backup --password-file=/etc/rsyncd.password

上述为把本地/home/www/目录下所有文件推送到192.168.213.146服务器上,用户为test(服务器端配置文件auth users=后的字符和密码文件里的用户) ::后为模块名backup

②拉取文件(从客户端主动拉取服务器端文件)
rsync -avz test@192.168.213.146::backup --password-file=/etc/rsyncd.password /home/www/

上述为把192.168.213.146服务器上backup模块预先设定好的目录,同步到本地/home/www/目录下。用户为test(服务器端配置文件auth users=后的字符和密码文件里的用户) ::后为模块名backup

⑶非daemon方式远程同步

此方式不使用配置文件的模块,使用系统里有的用户账号和密码,请先确认服务端是否开启相关端口,默认22

①推送方式:
使用一个远程shell程序(如rsh、ssh)来实现把本地的文件同步到远程机器上。如:rsync -avz /data test@192.168.213.146:/backup,表示把本地/data目录下的文件同步到服务器192.168.213.146/backup目录下。

②拉取方式:
把远程机器的文件同步到本地。如:rsync -avz test@192.168.213.146:/backup /data,表示把192.168.213.146/backup目录下文件同步到本地/data目录下。