使用rsync实现windows与linux数据同步|保姆级图文教程

rsync实现Windows与Linux文件同步部署文档

1. 部署准备与说明

1.1 前置说明

  • 该方案使用rsync程序进行数据的同步与备份。
  • 该程序在Linux系统的客户端为rsync;Windows系统的服务端为cwRsyncServer
  • 我们将Windows系统作为服务端,将Linux系统作为客户端,采用Linux客户端把文件推送到Windows服务器端的同步策略进行数据的同步
  • 数据同步为无差异同步,以客户端的数据为准,当客户端数据有增删时,服务端在同步时也会进行响应的数据增删。
  • 无网络环境的话,需要提前下载好WindowsLinux的安装包,点击对应系统进行下载

1.2 安装软件

2. 安装Windows服务端cwRsyncServer

2.1 创建名为SvcCWRSYNC的Windows管理员账户

Windows 10:

  • 点击开始菜单,点击上方的用户头像图标,选择更改账户设置
  • 弹窗后,点击其他用户,点右侧的“+”图标,将其他人添加到这台电脑
  • 弹窗后,点击我没有这个人的登录信息
  • 页面更新后,点击添加一个没有 Microsoft 帐户的用户
  • 弹窗后,设置用户名为SvcCWRSYNC,密码自己进行设定,安全问题可自由填写,填写完成点击下一步
  • 在创建完成后的界面,点击更改账户类型,在弹出的下拉框中点击选择管理员,点击确定,完成用户的创建

2.2 安装cwRsyncServer软件

  1. 解压上面提供的cwRsyncServer压缩包,得到一个exe的安装软件,双击程序启动安装,一路点击直到Service Account界面
  2. cwRsyncServer要求给定一个Windows账户用于同步数据,否则将无法启动对应的服务程序,此处填写刚才创建的Windows账户SvcCWRSYNC,密码为刚才自定义的密码
  3. 安装完成后关闭
  4. 右键点击任务栏,点击任务管理器打开它,打开后切换到服务选项卡,点击打开服务
  5. 找到名称为RsyncServer的服务,如没有此服务则是安装时设置的用户账户与Windows实际账户不匹配或是非管理员账户,此种情况请卸载后重新安装,并正确设置用户账户
  6. 双击打开RsyncServer服务,选择启动类型:自动,点击启动,启动完成后点击确定。

2.3 配置cwRsyncServer服务端

  • 打开软件的安装目录(默认是在C:\Program Files (x86)\ICW,如自定义目录则打开对应目录),目录内文件如下
  • 使用文本编辑器打开rsyncd.conf文件,修改其中配置如下
1
2
3
4
5
重要参数说明:
[rsyncfile] —— 模块名,定义哪个文件夹用来进行数据同步,如希望同步多个文件夹,可增加模块。
从[rsyncfile]到最后的配置进行拷贝,放在配置末尾,修改path参数为指定用来同步数据的文件夹即可,修改[ ]中的名称,可自定义
Path —— 指定用来存放同步数据的文件夹,可自定义。
但是/cygdrive/为路径前缀,不可变动,后面的值才是Windows实际的路径,C盘D盘用小写字母表示即可

务必请根据需求修改path路径
切换到安装目录的etc文件夹下,将创建完整名为rsyncd.secrets的密码文件
此文件为中为数据为 用户名:密码,示例 test:123

2.4 开放防火墙,允许该程序使用的端口进行数据出入

  1. 打开控制面板,点击Windows Defender 防火墙,点击右侧的高级设置
  2. 弹出窗口后,点击左侧的入站规则,再点击右边的新建规则
  3. 弹窗后,点击选择端口,点击下一步,选择TCP、特定本地端口,并填入873
  4. 填写完成后,一直点击下一步,直到名称项,填入RsyncServer Port,点击完成。
  5. 同样的方法,配置出站规则,步骤与入站规则一致

3. 安装Linux客户端rsync

3.1 网络联通性确认

  • Linux环境也需确保873端口开放访问,执行命令telnet Windows IP地址 873

如返回下图的情况,表示端口已联通

如提示:**-bash: telent: command not found**,则该命令未安装
依次执行sudo yum install telnet、sudo yum install telnet-server进行安装
如,无法联通,则执行sudo firewall-cmd --zone=public --add-port=873/tcp –permanent
对873端口开放防火墙,再进行确认

3.2 Yum命令安装方式:

此方式针对Linux电脑可以连接外网,能使用yum安装命令的情况,能简便安装rsync服务

  1. Linux CentOS系统上执行命令进行安装:sudo yum install rsync -y,等待出现Complete!表示安装成功

  2. 配置密码文件。执行sudo vi /etc/rsyncd.passwd,输入在windows上设置的SvcCWRSYNC用户的密码
    完成后,保存,退出

  3. 设置密码文件权限,执行sudo chmod 600 /etc/rsyncd.passwd

  4. 设置配置文件,执行sudo vi /etc/rsyncd.conf填入下列内容:

    1
    2
    3
    4
    uid = root
    gid = root
    use chroot = no
    max connections = 4

    完成后,保存,退出

  5. 启动服务,执行systemctl start rsyncd.service

  6. 设置开机自启,执行systemctl enable rsyncd.service

3.3 编译安装方式

此方式为编译安装,适用无法访问外网与yum安装命令的情况,兼容CentOS与Ubuntu系统。须在本文开头点击Linux下载对应软件包

  1. Linux服务器上执行 cd ~ ,切换到当前用户目录,执行pwd查看当前用户目录,将下载的tar包拷贝到此目录下

  2. 完成拷贝后,执行sudo cp ~/rsync-3.1.3.tar.gz /opt/rsync-3.1.3.tar.gz,切换到opt目录下,cd /opt/,查看文件是否存在

  3. 执行sudo tar -zxvf rsync-3.1.3.tar.gz,对程序包进行解压

  4. 解压完成,切换到目录,cd /opt/rsync-3.1.3

  5. 执行sudo ./configure检查配置,出现如下提示表示配置正确

  6. 执行sudo make,完成后再执行sudo make install,对程序包进行编译

  7. 编译完成后,需要自己设置配置文件,执行sudo mkdir /etc/rsyncd,创建配置文件存放的文件夹

  8. 切换到此文件夹,cd /etc/rsyncd/

  9. 执行sudo touch rsyncd.conf,创建配置文件

  10. 执行sudo vim /etc/rsyncd/rsyncd.conf,编辑配置文件,填入下列内容

    1
    2
    3
    4
    uid = root
    gid = root
    use chroot = no
    max connections = 4

    输入完成后,保存退出

  11. 执行sudo touch rsyncd.passwd,创建密码文件,填入安装时设置的密码,输入完成后保存退出

  12. 设置密码文件权限sudo chmod 600 /etc/rsyncd/rsyncd.passwd

  13. 启动服务,执行sudo /usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

4. 设置定时同步数据的任务

4.1 使用crontabs设置定时同步数据的任务

  1. 查看cron服务是否在运行,执行service crond status,如下为运行状态
1
2
注:如服务非运行状态则执行systemctl start crond进行启动
如未找到该服务,则依次执行sudo yum install crontabs、systemctl enable crond、systemctl start crond进行安装并启动
  1. 设置数据同步脚本,执行 sudo touch /usr/local/bin/databackup.sh,创建脚本。
  2. 执行sudo vi /usr/local/bin/databackup.sh编辑脚本,输入如下命令:
1
sudo /usr/local/bin/rsync -vzrtopg --progress <数据存放的路径> SvcCWRSYNC@<Windows的IP地址>::<模块名> --password-file=/etc/rsyncd/rsyncd.passwd

注:其中<>内容为需要自己替换的地方,下面给出一个样例进行参考:

1
sudo /usr/local/bin/rsync -vzrtopg --progress /usr/share/testrsync SvcCWRSYNC@192.168.1.1::rsyncfile --password-file=/etc/rsyncd/rsyncd.passwd

这表示我需要将/usr/share/testrsync文件夹中所有内容,同步到ip地址为192.168.1.1的电脑上,数据存放在rsyncfile模块中指定的windows目录

注意:如配置了多个模块用来同步,此处需相应增加同步命令,只需修改数据存放的路径与对应的模块名即可,设置完成后,保存,退出。
4. 设置系统定时任务,定时执行备份脚本,执行sudo vi /etc/crontab,输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/30 * * * * root /usr/local/bin/databackup.sh

输入完成后,保存,退出。以上表示,系统将每隔30分钟执行一次刚才的备份脚本,进行数据的备份
4) 执行sudo crontab /etc/crontab使任务立即生效