Rsync同步文件

Rsync是一个快速的文件复制工具。其增量传输算法通过仅发送文件之间的差异部分以减少发送的数据量,加快复制速度。可以本地复制,可以通过远程Shell或远程Rsync守护进程进行复制。支持复制软硬链接、设备等特殊类型文件。

常用参数

  • -a 归档模式,复制原文件的所有者、组、权限等属性
  • -v 显示详细信息
  • -P 显示实时复制过程
  • -z 在传输过程中压缩文件数据
  • -e 指定要使用的远程Shell
  • -r 包含所有子目录
  • -t 保留修改时间
  • -u 跳过目标较新的文件
  • -q 静默模式,不显示过程信息
  • --delete 从目标目录中删除源目录不存的文件
  • --exclude=PATTERN 排除匹配的文件

使用

本地复制文件

rsync -av test.txt /tmp/

通过ssh推送文件

rsync -avz -e 'ssh -p 22' test.txt [email protected]:/tmp/

通过ssh拉取文件

rsync -avz -e 'ssh -p 22' [email protected]:/tmp/test.txt /tmp/

通过远程Rsync守护进程拉取文件

rsync -avz [email protected]::rsyncmodule/test.txt /tmp/

通过Rsync部署代码

rsync -rtu --delete --progress --exclude ".svn" ./code /data/webroot/code

Daemon模式

配置服务端

Rsync的配置文件为/etc/rsyncd.conf,不存在则手动创建。

uid = nobody # Rsync守护进程的运行用户
gid = nobody
use chroot = no
max connections = 9
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

list = false
read only = true
# IP访问限制可以在云平台的安全组里设置
# hosts deny = 0.0.0.0/32
# hosts allow = 8.8.8.8
auth users = rsyncuser # rsync用户,非系统用户,在下边的"secrets file"中设置
secrets file = /etc/rsyncd.secrets
transfer logging = true
log file = /data/logs/rsync/rsyncd.log

[rsyncmodule]
  path = /root/src
  comment = Source Path

设置rsync用户和密码

echo "rsyncuser:password001" >> /etc/rsync.secrets
chmod 600 /etc/rsync.secrets

开启rsync服务

systemctl start rsyncd
systemctl enable rsyncd

客户端创建密码文件

echo "password001" >> /etc/rsync.secrets.rsyncuser
chmod 600 /etc/rsync.secrets.rsyncuser

客户端发起同步文件

rsync -av [email protected]::rsyncmodule/test.txt /tmp/ --password-file=/etc/rsync.pass.rsyncuser