rsync经典用例总结
rsync是经典的数据传输工具,但本篇博客总结的既不细致,也不全面。惭愧,惭愧。。。
更新策略
rsync默认通过比较文件修改时间(Modify)和大小进行启发式更新
策略验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/bin/bash
mkdir /tmp/{a,b}
# 文件内容不同,大小相同
echo a >/tmp/a/index.html
sleep 1
echo b >/tmp/b/index.html
# touch -d "2019-08-27 11:35:00" /tmp/{a,b}/*
# 访问时间不同
touch -ad "2019-08-27 11:35:00" /tmp/a/index.html
touch -ad "2019-08-27 11:36:00" /tmp/b/index.html
# Modify时间相同,change时间不同
touch -md "2019-08-27 11:35:00" /tmp/a/index.html
sleep 1
touch -md "2019-08-27 11:35:00" /tmp/b/index.html
stat /tmp/{a,b}/*
# rsync没有覆盖
rsync -avzP /tmp/a/index.html /tmp/b/index.html干预策略的参数:
- –size-only: 仅比较文件大小
- –ignore-times或-I:无脑覆盖
- –checksum或-c: 忽略时间,检查大小,大小相同时比较MD5
- –whole-file或-w:禁用rsync delta算法,源和目的文件不同时,传输整个文件
备份更新
1 | rsync -avzP -b --suffix=$(date "+.bak%Y%m%d%H%M%S") --backup-dir=/data/backup/ ${src} ${dst} |
- 备份目录下如果存在同名文件会被新的备份文件强制覆盖
- -b –suffix 既适用推送也适用于拉取,但是都是在dest侧备份
- -b –backup-dir 仅适用于拉取,推送数据时适用会报错
- 另外mv命令也有备份实现方案
alias mv='mv -v -b -S "$(date "+.mvbak%Y%m%d_%H%M")"'
递归创建目录
1 | rsync -avzP -R src dest |
- -R 参数会在dest目录基础上递归创建src目录路径,如
rsync -avzP -R 10.0.0.1::data/data/test1/test2/test3 /data/test
,在本地会生成路径/data/test/data/test1/test2/test3
慎用–delete
1 | rsync -avzP --delete 10.0.0.1::data/data/test /data/test //该种写法会在/data/test下再创建一层test目录,不会删除/data/test的其它目录 |
安全相关
相关配置解释
1 | use chroot = yes # rsync守护进程将在与客户机的文件传输之前chroot到“path” |
- rsync配置文件中如果出现多个重复模块定义,会merge到一起,也就是说在上一个模块中定义的配置如果在下一个同名模块中没有被覆盖依然生效
- merge 引入的子配置文件的起始内容认为是引入位置所在模块的局部配置,include引入的子配置文件的起始内容认为是引入位置之后的全局配置
- rsync不是按格式区分全局配置还是局部配置,在出现模块定义之前的配置是全局配置,在出现模块定义之后出现的配置都属于这个模块
- 安全提醒:配置文件权限没有限制,建议应设置成600
- 如果在子配置文件中定义全局配置如
read only = yes
对于&include之前已经出现过的模块不生效 &include
不支持跟多个文件,如:&include /etc/rsyncd.d/a.conf /etc/rsyncd.d/b.conf
- 如果使用
&include
引入子配置,子配置文件不存在时会导致rsync服务不可用,错误信息:rsync: safe_read failed to read 1 bytes [Receiver]: Connection reset by peer (104) (code 12)
rsync认证
RSYNC_PASSWORD仅适用于rsync协议,rsync配置中指定的用户密码,rsync服务需要通过daemon方式启动;
1
export RSYNC_PASSWORD="passwd"
rsync协议使用的两种方式
rsync 协议
1
2rsync rsync://username@1.2.3.4:/abc /def
rsync 1.2.3.4::abc/ /defssh 协议
1
rsync 1.2.3.4:/abc/ /def
- 仅适用rsync客户端,通过ssh协议传输
rsync 日志
transfer logging
1
transfer logging = yes
- 配置文件中开启transfer logging,可以使rsync使用ftp格式的文件来记录下载和上载操作在单独的日志文件中
log format 格式定义符
1 | %h 远程主机名 |
配置文件范例
1 | # cat /etc/rsyncd.conf |