一rsync实战
从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
1.1 rsync简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pt4XH6aZ-1673600259248)(null)]
rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
rsync 的官方站点的网址是 rsync.samba.org/,目前最新版本是 3.1.3,由 Wayne Davison 进行维护。作为一种最常用的文件备份工具,rsync 往往是 Linux 和 UNIX 系统默 认安装的基本组件之一。
1.2 rsync特性
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
二、rsync同步源服务器
在远程同步任务中,负责发起 rsync 同步操作的客户机称为发起端,而负责响应来自客户机的 rsync 同步操作的服务器称为同步源。
- 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
- 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。
如果想查看 async 提供的所有选项,可直接执行 async 命令。
三、配置rsync下行同步(定时同步)
源服务器:10.50.10.25
客户机(发起端):10.50.10.28
3.1 配置源服务器
这里就是服务器A,备份中心服务器
关于配置的几个关键点
- 如果要把起作为远程备份服务器就需要将read only 设置为no. 如果只是从让其他人远程拉去数据则只需要配置read only 设置为yes比较安全
- 给需要往备份中心服务器备份数据的用户新建一个用户,权责分明
- 因为是要保存客户端的密码,所以权限一定要管理好。不能给其他用户看到这个密码。chmod 600 /etc/rsyncd_users.db
# 关闭防火墙 systemctl stop firewalld # rpm -q rsync #一般系统已默认安装rsync #建立/etc/rsyncd.conf配置文件 vim /etc/rsyncd.conf #添加以下配置项 uid = root gid = root use chroot = yes #禁锢在源目录 address = 0.0.0.0 #监听地址 port = 873 #监听端口tcp/udp 873,可通过cat /etc/services | grep rsync查看 log file = /var/1og/rsyncd.1og #日志文件位置 pid file = /var/run/rsyncd.pid #存放进程ID的文件位置 hosts allow = 10.50.10.28,10.50.10.170 #允许访问的客户机地址。多个地址以空格分隔 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型 [r+inotify] #共享模块名称 path = /tmp/etl #源目录的实际路径 comment = modify remote path by ninesun #备注 read only = no #是否为只读。yes表示客户端只能读取目录内容,不能写入。只允许下行,不允许上行。 也就是只让录取不让写入。 auth users = backupuser #授权账户,多个账号以空格分隔。授权用户,允许读取备份中心的用户名。 secrets file = /etc/rsyncd_users.db #存放授权账户信息的数据文件 #如采用匿名的方式,只要将其中的“auth users"和“secrets file"配置项去掉即可。 #为备份账户创建数据文件。 vim /etc/rsyncd_users.db backupuser:123456 #无须建立同名系统用户。 chmod 600 /etc/rsyncd_users.db #保证所有用户对源目录/tmp/etl 都有读取权限 chmod +r /tmp/etl ls -ld /tmp/etl #启动rsync服务程序 rsync --daemon #启动rsync 服务,以独立监听服务的方式(守护进程)运行 netstat -anpt | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 127452/rsync tcp6 0 0 :::873 :::* LISTEN 127452/rsync #关闭rsync 服务 kill $(cat /var/run/rsyncd.pid) 或者使用pkill rsync rm -rf /var/run/rsyncd.pid
3.2 发起端配置
基本格式:
rsync [选项] 原始位置 目标位置
rsync 命令的基本格式有多种,分别是:
[root@localhost ~]# rsync [OPTION] SRC DEST [root@localhost ~]# rsync [OPTION] SRC [USER@]HOST:DEST [root@localhost ~]# rsync [OPTION] [USER@]HOST:SRC DEST [root@localhost ~]# rsync [OPTION] [USER@]HOST::SRC DEST [root@localhost ~]# rsync [OPTION] SRC [USER@]HOST::DEST
针对以上 5 种命令格式,rsync 有 5 种不同的工作模式:
- 第一种用于仅在本地备份数据;
- 第二种用于将本地数据备份到远程机器上;
- 第三种用于将远程机器上的数据备份到本地机器上;
- 第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。
要知道,使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::),则使用 rsync 协议。
ssh 协议和 rsync 协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险。
另外,以上几种格式中各个参数的含义如下:
- SRC:用来表示要备份的目标数据所在的位置(路径);
- DEST:用于表示将数据备份到什么位置;
- USER@:当做远程同步操作时,需指明系统登录的用户名,如果不显示指定,默认为以 root 身份登录系统并完成同步操作。
常用选项:
选项 | 功能 |
-r | 递归模式,包含目录及子目录中的所有文件。 |
-l | 对于符号链接文件仍然复制为符号链接文件。 |
-v | 显示同步过程的详细(verbose)信息。 |
-z | 在传输文件时进行压缩(compress)。 |
-a | 归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgop"。 |
-p | 保留文件的权限标记。 |
-t | 保留文件的时间标记。 |
-g | 保留文件的属组标记(仅超级用户使用)。 |
-o | 保留文件的属主标记(仅超级用户使用)。 |
-H | 保留硬连接文件。 |
-A | 保留ACL属性信息。 |
-D | 保留设备文件及其他特殊文件。 |
–delete | 删除目标位置有而原始位置没有的文件。(这个特性也用来删除大量文件) |
–checksum | 根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。 |
配置:
#将指定的资源下载到本地/opt目录下进行备份。密码abc123 格式一: #用户名@主机地址::共享模块名 rsync -avz backupuser@192.168.132.6::r+inotify /opt/ #r+inotify为共享模块名,密码abc123 #backupuser指的是我在同步的时候用的哪个用户身份,备份服务器可能会备份多个用户的数据,一定要用隔离开来,不相互影响。 #r+inotify代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了 #/opt/指的是同步到本地的目录 # 10.50.10.25 是备份中心服务器. 格式二: #rsync:/用户名@主机地址/共享模块名 rsync -avz rsync://backupuser@10.50.10.25/wwwroot /opt/ # 免交互格式配置: echo "abc123" > /etc/server.pass chmod 600 /etc/server.pass #密码文件权限必须为600,即除了属主,其他人都没有查看权限。 rsync -avz --password-file=/etc/server.pass backupuser@192.168.132.6::r+inotify /opt/ #免密同步 #定时同步 crontab -e 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backupuser@192.168.142.10::wwwroot /opt/ #为了在同步过程中不用输入密码,需要创建一个密码文件,保存backupuser用户的密码,如/etc/server.pass。 在执行rsync 同步时使用选项"--password-file=/etc/server.pass"指定即可。 systemctl restart crond systemctl enable crond
四、rsync实时同步(上行同步)
4.1 定期同步的不足
- 执行备份的时间固定,延迟明显、实时性差
- 当同步源长期不变化时,密集的定期任务是不必要的
4.2 实时同步的优点
- 一旦同步源出现变化,立即启动备份
- 只要同步源无变化,则不执行备份
4.3 Linux内核的inotify机制
- 从版本2.6.13开始提供
- 可以监控文件系统的变动情况,并做出通知响应
- 辅助软件:inotify-tools
curl -O 10.50.10.25/pigsty/inotify-tools-3.14-9.el7.x86_64.rpm && yum -y install inotify-tools-3.14-9.el7.x86_64.rpm && rm -rf inotify-tools-3.14-9.el7.x86_64.rpm
4.4 发起端配置rsync+Inotify
- 使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
- 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
- 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。
五、配置rsync实时同步(上行同步)
发起端需要配置 rsync+Inotify。
5.1 修改rsync源服务器配置文件
这里对应服务器A
vim /etc/ rsyncd. conf read only = no #关闭只读,上行同步需要可以写 #之后重启 kill $(cat /var/run/rsyncd.pid) rm -rf /var/run/rsyncd.pid rsync --daemon netstat -anpt | grep rsync #创建一个同步目录,并修改权限 mkdir /data chmod 777 /data
5.2 发起端,调整 inotify 内核参数
在Linux内核中,默认的inotify机制提供了三个调控参数:
- max_queue_events ( 监控事件队列,默认值为16384)、
- max_user_instances (最多监控实例数,默认值为128)、
- max_user_watches (每个实例最多监控文件数,默认值为8192)。
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
cat /proc/sys/fs/inotify/max_queued_events cat /proc/sys/fs/inotify/max_user_instances cat /proc/sys/fs/inotify/max_user_watches vim /etc/sysctl.conf #内核参数都在该文件中修改 fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 sysctl -p
5.3 发起端,安装 inotify-tools
用inotify 机制还需要安装inotify-tools, 以便提供inotifywait、 inotifywatch 辅助工具程序,用来监控、汇总改动情况。
- inotifywait:可监控modify (修改)、create (创建)、move (移动)、delete (删除)、attrib ( 属性更改)等各种事件,一有变动立即输出结果。
- inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
# 安装inotify-tools curl -O 10.50.10.25/pigsty/inotify-tools-3.14-9.el7.x86_64.rpm && yum -y install inotify-tools-3.14-9.el7.x86_64.rpm && rm -rf inotify-tools-3.14-9.el7.x86_64.rpm #可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /data 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。 inotifywait -mrq -e modify,create,move,delete /data #选项“-e”:用来指定要监控哪些事件 #选项“-m”:表示持续监控 #选项“-r”:表示递归整个目录 #选项“-q”:简化输出信息
5.4 发起端,编写触发式同步脚本
在 客户端10.50.10.28上编写脚本监听FS的变化。将变化的文件通过rsync传输到备份中心服务器上.
vi rsync-inotify.sh #!/bin/bash # #******************************************************************** #Author: ninesun #Date: 2023年1月12日15:53:04 #FileName: inotify_rsync.sh #desc: 这个脚本是在客户端执行,数据实时传输到远程备份中心服务器 #******************************************************************** #可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /data 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。 #定义inotifywait监控/tmp/data 目录中文件事件的变量。attrib表示属性变化。 #选项“-e”:用来指定要监控哪些事件 #选项“-m”:表示持续监控 #选项“-r”:表示递归整个目录 #选项“-q”:简化输出信息 INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /tmp/data" #定义执行 rysnc 上行同步的变量。--delete保证两边目录内容一致,可以不加。 # --password-file 存储备份中心给你建的账户密码,让你备份你的文件 # r+inotify 是目标服务器上的/etc/rsyncd.conf配置。如果不配置会报错: ERROR: The remote path must start with a module name not a / # :: 代表使用rsync协议传输 # 如果r+inotify 这个remote pathmodule name是 path=/tmp/etl, 则同步到备份中心服务器的目录结果是/tmp/etl/data RSYNC_CMD="rsync -azH --delete --password-file=/tmp/shell/rsync-password/rsync.password /tmp/data backupuser@10.50.10.25::r+inotify" #使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录 $INOTIFY_CMD | while read DATE TIME DIR FILE do FILEPATH=${DIR}${FILE} #如果rsync未在执行,则立即启动 if [ $(pgrep rsync | wc -l) -le 0 ];then $RSYNC_CMD && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log # eg: At MODIFY on /tmp/etl/, file b.txt was backuped up via rsync fi done
5.4.1 添加消息队列或缓冲对脚本进行优化
如果同步的文件比较大,同步时比较慢导致后面文件没来的及同步,则需要在脚本内添加消息队列或缓冲:
#!/bin/bash # #******************************************************************** #Author: ninesun #Date: 2023年1月12日15:53:04 #FileName: inotify_rsync.sh #desc: 添加消息队列或缓冲对脚本进行优化 #******************************************************************** INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /tmp/data" #定义执行 rysnc 上行同步的变量。--delete保证两边目录内容一致,可以不加。 # --password-file 存储备份中心给你建的账户密码,让你备份你的文件 # r+inotify 是目标服务器上的/etc/rsyncd.conf配置。如果不配置会报错: ERROR: The remote path must start with a module name not a / # :: 代表使用rsync协议传输 # 如果r+inotify 这个remote pathmodule name是 path=/tmp/etl, 则同步到备份中心服务器的目录结果是/tmp/etl/data RSYNC_CMD="rsync -azH --delete --password-file=/tmp/shell/rsync-password/rsync.password /tmp/data backupuser@10.50.10.25::r+inotify" #使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录 $INOTIFY_CMD | while read DATE TIME DIR FILE; do FILEPATH=${DIR}${FILE} #小于等于0,则等待它执行完再去同步其他文件 until [ $(pgrep rsync | wc -l) -le 0 ]; do sleep 1 done $RSYNC_CMD && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>/var/log/changelist.log done
5.5 验证同步效果
上述脚本用来检测本机/tmp/etl 目录的变动情况,一旦有更新触发rsync 同步操作,便使用rsync协议上传备份至服务器10.50.10.25 的r+inotify共享目录下。
触发式上行同步的验证过程如下:
(1)在本机运行脚本程序.
(2)切换到本机的 /tmp/etl 目录,执行增加、删除、修改文件等操作。
(3)查看远端服务器中的r+inotify目录下的变化情况。
六、将备份中心服务器的数据进行分发
#!/bin/bash # #******************************************************************** #Author: ninesun #Date: 2023年1月12日15:53:04 #FileName: inotify_rsync_assign.sh #******************************************************************** src=/data/rsync #下面是认证模块 des=r+inotify #多个IP写法host="10.0.0.105 10.0.0.106" # 如果是下行,例如将备份数据分发到多个服务器上时可以这样做. host="10.50.10.28" inotifywait -mrq --timefmt '%F %T' --format '%T %w %f' -e modify,delete,create,attrib $src|while read files do for hostip in $host do rsync -vzH --delete --progress --password-file=/tmp/shell/rsync-password/rsync.password $src backupuser@$hostip::$des done echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 done
七、使用rsync快速删除大量文件
假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好用了,因为要等待很长一段时间。
在这种情况下我们可以使用rsync来巧妙处理。
rsync实际用的是替换原理。
注意点:
- SRC 一定要是目录的绝对路径
#先建立一个空的文件夹: mkdir /home/blank #用rsync删除目标目录: rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp #这样目标目录很快就被清空了
选项说明:
选项 | 作用 |
–delete-before | 接收者在传输进行删除操作 |
-a | 归档模式,表示以递归方式传输文件,并保持所有文件属性 |
-H | 保持硬连接的文件 |
-v | 详细输出模式 |
–progress | 在传输时显示传输过程 |
–stats | 给出某些文件的传输状态 |
七、手册
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src} -m 是保持一直监听 -r 是递归查看目录 -q 是打印出事件 -e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件 /usr/bin/rsync -ahqzt --delete $SRC $DST -a 存档模式 -h 保存硬连接 -q 制止非错误信息 -z 压缩文件数据在传输 -t 维护修改时间 -delete 删除于多余文件 rsync的完整参数说明: -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename)存放在在目录下。 -suffix=SUFFIX 定义备份文件前缀 -u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结 --safe-links 忽略指向SRC路径目录树以外的链结 -H, --hard-links 保留硬链结 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 -D, --devices 保持设备文件信息 -t, --times 保持文件时间信息 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间 -n, --dry-run现实哪些文件将被传输 -W, --whole-file 拷贝文件,不进行增量检测 -x, --one-file-system 不要跨越文件系统边界 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节 -e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 --rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息 -C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete 删除那些DST中SRC没有的文件 --delete-excluded 同样删除接收端那些被该选项指定排除的文件 --delete-after 传输结束以后再删除 --ignore-errors 及时出现IO错误也进行删除 --max-delete=NUM 最多删除NUM个文件 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输 --force 强制删除目录,即使不为空 --numeric-ids 不将数字的用户和组ID匹配为用户名和组名 --timeout=TIME IP超时时间,单位为秒 -I, --ignore-times 不跳过那些有同样的时间和长度的文件 --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0 -T --temp-dir=DIR 在DIR中创建临时文件 --compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份 -P 等同于 --partial --progress 显示备份过程 -z, --compress 对备份的文件在传输时进行压缩处理 --exclude=PATTERN 指定排除不需要传输的文件模式 --include=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除FILE中指定模式的文件 --include-from=FILE 不排除FILE指定模式匹配的文件 --version 打印版本信息 --address 绑定到特定的地址 --config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件 --port=PORT 指定其他的rsync服务端口 --blocking-io 对远程shell使用阻塞IO -stats 给出某些文件的传输状态 --progress 在传输时现实传输过程 --log-format=formAT 指定日志文件格式 --password-file=FILE 从FILE中得到密码 --bwlimit=KBPS 限制I/O带宽,KBytes per second -h, --help 显示帮助信息 要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。 要排除某个目录的事件监听的处理时,为inotifywait添加--exclude或--excludei参数,具体查看man inotifywait。 # https://blog.csdn.net/MyySophia/article/details/120737154?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167359930016800184191002%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167359930016800184191002&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-120737154-null-null.blog_rank_default&utm_term=rsync&spm=1018.2226.3001.4450 -v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。 -P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。 -n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。 -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -r --recursive:递归到目录中去。 -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新 :检查出mtime不同从而导致增量传输无效。 -o --owner:保持owner属性(属主)。 -g --group:保持group属性(属组)。 -p --perms:保持perms属性(权限,不包括特殊权限)。 -D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。 -l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。 -z :传输时进行压缩提高效率。 -R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。 --size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。 -u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。 -d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。 --max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m") --min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。 --exclude :指定排除规则来排除不需要传输的文件。 --delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在 :exclude/include规则生效之后才执行的。 -b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。 --backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。 -e :指定所要使用的远程shell程序,默认为ssh。 --port :连接daemon时使用的端口号,默认为873端口。 --password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。 -W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。 --existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。 --ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。 --remove-source-files:要求删除源端已经成功传输的文件。
思考
备份的目的是什么?如果用minio对象存储呢?inotify 这个hook点去触发mc client 将资料上传到Minio中。 minio 支持高可用的文件、对象存储. 彻底解决了单点问题。rsync 这时候显得有点繁琐。 minio增加了维护成本,但是"一劳永逸"的事情做一次还是值得的。