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

相关推荐
深圳恒讯3 小时前
海外服务器延迟高怎么解决?从线路到TCP协议的6层排查清单
运维·服务器·tcp/ip
夏虫不可与之言冰3 小时前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
小羊没烦恼!3 小时前
jQuery1.5的改进细节
java·服务器·开发语言·前端·c#
北龙云海3 小时前
AI驱动数据库运维变革:北龙云海智能巡检平台实践与展望
运维·数据库·人工智能
AI职业加油站3 小时前
AI 校招现状:大模型应用工程师证书,助力简历能力证明
大数据·运维·人工智能·学习·职场发展
春涧草茶4 小时前
慢就是快12-12手动抛出异常
java·linux·前端
Lsetea4 小时前
curl报58 unable to set private key file:客户端证书与私钥加载排查
运维·https·ssl证书·openssl·curl
天远Date Lab4 小时前
零信任架构实战:基于天远学籍核验三要素构建自动化竞赛资格审查网关
运维·人工智能·架构·自动化
KING-WU5125 小时前
Linux 工具之Make 与 Makefile
java·linux·服务器
阿乔外贸日记5 小时前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算