基于 rsync 实现文件远程同步

两台机器之间同步文件常用的方式有 scprsync 两种,两者的主要区别在于:

  • scp 会将整个文件进行传输;rsync 只对差异文件做更新(通过比较最后修改时间和文件的大小),支持分块传输,可以只传输修改的部分
  • scp 是加密传输;rsync 不是加密传输

在项目中我使用的是 rsync --daemon 的方式进行文件同步,这种方式需要在目标同步机器上的 rsyncd.conf 配置文件中配置模块名,存储路径等信息。具体配置方法参考:参考

我的测试用例中使用的配置项是

1
2
3
4
5
6
7
8
9
10
11
uid = 0 
gid = 0
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log

[user]
path=/data
ignore errors = yes # 忽略IO问题
read only = no
use chroot = no # 连接时可以不需要root权限
list = yes #当客户请求列出可以使用的模块列表时,该模块可以被列出

模块名称为 user ,文件的默认保存路径为 /data
服务器通过 rsync --daemon 启动守护进程

在另一台机器上通过指令

1
rsync -avz [local_path] [server_address]::user

可以将local_path目录下的文件增量写入到目标服务器的/data目录下

参考

【Linux】rsync 守护进程的配置
SCP和Rsync远程拷贝的几个技巧