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
2
3
4
5
6
7
8
9
10
rsync -avzP --delete 10.0.0.1::data/data/test /data/test        //该种写法会在/data/test下再创建一层test目录,不会删除/data/test的其它目录

rsync -avzP --delete 10.0.0.1::data/data/test/ /data/test //该种写法会将本地/data/test目录下的文件与src目录强一致
的效果是截然不同的,自己体会下。细思极恐。。。

另外,
rsync -avzP --delete 10.0.0.1::data/data/test/ /data/test

rsync -avzP --delete 10.0.0.1::data/data/test/* /data/test //该种写法会将src目录下的子文件和目录和本地/data/test中的同名子文件和目录进行强一致,本地/data/test中的其它文件目录不会被删除
的效果也不同,使用时要十分谨慎。

rsync认证

  • RSYNC_PASSWORD仅适用于rsync协议,rsync配置中指定的用户密码,rsync服务需要通过daemon方式启动;

    1
    export RSYNC_PASSWORD="passwd"
  • rsync协议使用的两种方式

    • rsync 协议

      1
      2
      rsync rsync://username@1.2.3.4:/abc /def
      rsync 1.2.3.4::abc/ /def
    • ssh 协议

      1
      rsync 1.2.3.4:/abc/ /def
      • 仅适用rsync客户端,通过ssh协议传输

rsync 日志

  • transfer logging

    1
    transfer logging = yes
    • 配置文件中开启transfer logging,可以使rsync使用ftp格式的文件来记录下载和上载操作在单独的日志文件中
  • log format 格式定义符

1
2
3
4
5
6
7
8
9
10
11
12
13
%h 远程主机名
%a 远程IP地址
%l 文件长度字符数
%p 该次rsync会话的进程id
%o 操作类型:"send"或"recv"
%f 文件名
%P 模块路径
%m 模块名
%t 当前时间
%u 认证的用户名(匿名时是null)
%b 实际传输的字节数
%c 当发送文件时,该字段记录该文件的校验码
默认log格式为:"%o %h [%a] %m (%u) %f %l",通常,在每行的头上会添加"%t [%p] "。

配置文件范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# cat /etc/rsyncd.conf
address = 10.0.0.1
uid = root
gid = root
use chroot = yes
numeric ids = no
read only = no
max connections = 100
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
lock file = /var/run/rsync.lock

transfer logging = yes

[data1]
uid = nobody
gid = nobody
path = /data
hosts allow = 10.0.0.0/8 192.168.0.0/16

[data2]
uid = nobody
gid = nobody
path = /
exclude = *
include = data1/***
hosts allow = 10.0.0.0/8 192.168.0.0/16

[data]
uid = nobody
gid = nobody
comment = data
path = /
exclude = *
include = data1/***
read only = false
list = false
hosts allow = 10.0.0.0/8 192.168.0.0/16

参考

冷月无声 wechat
关注也是一种力量
-------------End of article. I appreciate whoever read and leave commends on articles.-------------

本文标题:rsync经典用例总结

文章作者:冷月无声

发布时间:2018年12月04日 - 12:12

最后更新:2019年08月27日 - 12:08

原始链接:https://www.lengyuewusheng.com/2018/12/04/00053_rsync经典用例总结/

许可协议:本博客所有文章除特别声明外,均采用 BY-NC-SA 3.0许可协议。转载请注明出处!