使用 Rsync 从 Windows 同步数据到 Linux
为什么要使用 rsync 从 Windows 到 linux 进行同步?
我们经常会面临这种的情况,项目使用 Windows 开发,最终部署在 Linux 上,但有时想要进行测试、维护、迭代版本时操作时,服务器和本地的开发环境代码的同步就成了问题。当然我们可以选用 Git 进行代码的同步。但有时代码的频繁修改,并且修改后的验证需要依赖外部的 Linux 服务器,这时 git 的提交便成了令人抓狂的操作。当然有人说可以使用 Jenkins 等这样的自动化工具进行部署,但由于资源或学习成本等其他外部因素,使用起来代价稍高。为了解决这个问题,今天推荐一个叫 rsync
的工具,它不但支持 Windows 与 Linux 之间的数据同步,而且配置简单,同时增量同步的功能更是解决了频繁修改代码的问题。
如何配置 rsync?
rsync 配置很容易,这里以 Windows 作为客户端,Linux 作为服务端进行演示。
Linux 配置
安装 rsync
# 检查是否安装了 rsync
rpm -qa|grep rsync
# 如果没有安装的话,进行安装
yum install rsync
# 将 rsync 设置成开启自启,并启动
systemctl enable rsyncd
systemctl start rsyncd
编写配置文件
rsync 涉及到的配置主要有三个:
- /etc/rsyncd.conf -> 对 rsync 服务进行配置
- /tmp/rsync -> 待同步的目标目录,路径可以自定义
- /etc/rsyncd.passwd ->里面包含用于进行密码验证的账号信息
/etc/rsyncd.conf 的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# 进行通信的端口,如果 firewall 打开的话,需要将对应的端口添加进去
port=8730
# 日志文件
log file=/var/log/rsync.log
# rsync 的进程 id
pid file=/var/run/rsync.pid
# 要同步的模块,这里一般以项目名命名
[cmi]
# 同步的目标文件夹
path=/tmp/rsync
# rsync daemon 在传输前是否切换到指定的 path 目录下,并将其监禁在内,用于增加传输的安全性
use chroot=no
# 指定最大的连接数
max connections=4
# yes 表示只读本地文件无法同步到服务器
read only=no
# 客户端请求显示模块列表时,该模块是否显示出来
list=true
# 服务运行时的用户
uid=root
# 服务运行时的用户组
gid=root
# 进行验证时的用户名,必须是系统存在的用户
auth users = root
# 连接用户时的密码
secrets file=/etc/rsyncd.passwd
# 允许的 ip
hosts allow=*
创建目标的文件夹
mkdir /tmp/rsync
创建密码
# 创建文件夹
vim /etc/rsyncd.passwd
# 写入密码
echo "root:123456" > /etc/rsyncd.passwd
#更改文件权限
chmod 600 /etc/rsyncd.passwd
打开rsync
systemctl start rsyncd
windows 配置
下载 cwrsync
https://www.itefix.net/cwrsync-free-edition
将下载的文件存放到固定位置
# 下载的文件名类似于这样
cwrsync_5.7.2_x86_free.zip
# 解压并放入目录,并添加到环境变量中,方便日后的使用
我这里配置的目录是“C:\app\rsync\cwrsync_5.7.2_x86_free\bin”
执行命令
# 如果配置环境变量,随意打开一个 cmd 就可以了,否则的话进入安装的目录中(bin 下面)
rsync.exe -avPz --port 8730 --password-file=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt --exclude-from=/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt /cygdrive/C/test root@your_ip::cmi/
# 常见的的参数
-a: 归档模式,使用递归传输并保持文件的属性
-v: 显示传输过程中的详细信息
-P: 显示文件传输的进度信息
-z: 传输中进行压缩,提高传输速度
--password-file: 登录时用到的密码文件,该文件直接把密码包含就可以,用户名需要显式指定
--exclude-from: 指定不需要进行传输的文件和文件夹
--delete: 在 exclude/include 规则生效后执行,假如服务器中文件比传入的文件多,则删除,少的话,则添加。
# 在指定文件夹目录时,进入在真实目录前添加 /cygdrive/ 后面跟正常目录就可以了
比如密码文件的路径: /cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/cmi_password.txt
排除文件的路径:/cygdrive/C/app/rsync/cwrsync_5.7.2_x86_free/bin/exclude.txt
本地传送的路径: /cygdrive/C/test -> 表说 C 盘的 test
# 最后两个参数,表示想要传送的文件夹,以及服务器的 iP 以及认证的用户和模块、
root@your_ip::cmi/ -> 用户名为 root,cmi 表示传入的模块,均在服务端进行配置
关于密码文件 cmi_password.txt 的内容,写入文件就好
123456
关于排除文件 exclude.txt 的实例
.idea
l3vpn_not_used
load-dir
_namespaces
总结
使用 rsync 从 windows 同步数据到 linux 很简单,在 linux 作为服务器,windows 作为客户端的情况下:
linux 分别需要进行三个文件的配置,并且不要忘了给密码文件添加权限。
windows 仅需要在安装后,直接使用就可以了,无非就是一些参数的添加。
最后,大家可以使用 windows 的定时任务,进行数据的定时同步。希望提高大家的工作效率。