Linux下rsync + inotify 实时文件同步方案

一、核心组件概述

1. inotify

inotify是 Linux 内核提供的文件系统变化监控机制,inotify-tools是用户态工具,用于持续监控文件或目录的数据变化(增删改)。

  • 监控事件:create、delete、modify、move、attrib 等

  • 常用命令:inotifywait

  • 特点:事件驱动,无需轮询,性能高

2. rsync

rsync是一款高效的文件数据同步与传输工具

对比项 cp rsync
跨节点 ❌(需 scp) ✅ 原生支持远程同步
数据传输 全量拷贝 差异(增量)同步
压缩传输 ✅ 默认/可选压缩
断点续传
权限/软链保留 有限 ✅ 丰富参数支持

rsync 默认采用 差异同步算法:只传输源与目标之间发生变化的数据块。


二、rsync 差异同步原理简述

假设源文件 A、目标文件 B,rsync 会:

  1. 比对文件块 checksum

  2. 仅传输存在差异的数据块

  3. 在目标端重组文件

复制代码

纯文本

纯文本

复制代码
A 文件(源)                     B 文件(目标)
a 1                             a 1
b 7                             b 7
c 3   ──差异同步──▶ 仅同步 c/e/f 变更块
d 4                             d 4
e 99  ← 修改
f 66  ← 修改

结果:不需要全量拷贝,仅同步变动部分,节省带宽与时间。


三、rsync + inotify 组合原理

复制代码

text

text

复制代码
inotify 监控目录变化
        │
        ▼
    事件触发
        │
        ▼
  rsync 增量同步
        │
        ▼
     目标端数据保持一致

Shell 脚本逻辑:

复制代码

bash

bash

复制代码
inotifywait -mrq --format '%w%f' -e modify,create,delete,move /src \
| while read file; do
    rsync -az --delete /src/ remote:/dst/
done
  • inotifywait:阻塞监听文件事件

  • 一旦触发 → 调用 rsync执行增量同步

  • 实现准实时、跨节点数据同步


四、rsync 清空目录的特殊用法

rsync 的同步目标是"使目标 == 源",因此可利用空目录快速清空目标目录:

复制代码

bash

bash

复制代码
# 创建一个空目录
mkdir /tmp/empty

# 将空目录同步到 /data ,达到清空 /data 的效果
rsync -a --delete /tmp/empty/ /data/

⚠️ 生产环境慎用 --delete,建议先 --dry-run测试


五、rsync 常见使用场景示例

1. 本地同步

复制代码

bash

bash

复制代码
rsync -avz /data/logs/ /backup/logs/

2. 跨节点同步(SSH)

复制代码

bash

bash

复制代码
rsync -avz /data/ root@node2:/data/

3. 作为守护进程(rsync server)

复制代码

bash

bash

复制代码
rsync -avz /data/ rsync_backup@backup::data_module

4. 结合 inotify 实时同步脚本示例

复制代码

bash

bash

复制代码
#!/bin/bash
SRC=/data/wwwroot/
DEST=root@node2:/data/wwwroot/
INOTIFY_CMD="inotifywait -mrq -e modify,create,delete,move $SRC"

$INOTIFY_CMD | while read dir event file; do
    rsync -az --delete $SRC root@node2:/data/wwwroot/
done

六、rsync 常用参数说明

参数 含义
-a 归档模式(递归+保留权限/时间/软链等)
-v 显示过程
-z 传输时压缩
-r 递归
--delete 目标比源多出的文件删除(镜像同步)
--exclude 排除指定文件
--bwlimit 限速(KB/s)
-P 显示进度 + 断点续传
--dry-run 模拟运行

七、典型应用场景总结

  • ✅ 网站代码实时同步(发布机 → 业务节点)

  • ✅ 日志集中收集

  • ✅ 灾备数据增量同步

  • ✅ 替代 scp 做大数据传输

  • ✅ 配合 inotify 实现准实时文件分发

相关推荐
一叶龙洲4 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker6 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
keyipatience7 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
元Y亨H8 小时前
生产环境监控与故障应急处理(5-5-5 标准)指南
运维
j7~8 小时前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
踏月的造梦星球8 小时前
达梦数据库执行计划与性能分析入门:EXPLAIN、AUTOTRACE 与 ET
服务器·数据库·oracle
观山岳五楼9 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
星夜夏空999 小时前
网络编程(1)
服务器·网络
川石课堂软件测试9 小时前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
m0_715646769 小时前
20260720
linux·arm