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 实现准实时文件分发

相关推荐
c238561 小时前
Vim 零基础核心基础篇
linux·编辑器·vim
liulilittle1 小时前
删除 Inflight Bounds:为什么 KCC 放弃了 BDP 钳位
linux·网络·tcp/ip·计算机网络·信息与通信·tcp·通信
云飞云共享云桌面1 小时前
面向机械研发:双服务器架构搭配云飞云运行 SolidWorks 方案详解
运维·服务器·前端·网络·架构·制造
风吹落枫1 小时前
银河麒麟V10 P1左下角不显示时间问题解决
linux
让我上个超影吧1 小时前
Cluade code:上下文压缩
java·服务器·ai
江华森1 小时前
深入 Linux 性能调试 —— BPF 与 BCC 工具实战指南
linux·运维·服务器
qq_163135751 小时前
Linux 【06-cp命令超详细教程】
linux
翼龙云_cloud2 小时前
阿里云代理商:部署 DeepSeek V4-Flash解析 快速部署与性能优化
运维·阿里云·性能优化·云计算·ai智能体
正经教主2 小时前
【docker基础】 第七课:Docker Compose 多容器实战
运维·docker·容器