当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/989582/

相关文章:

  • MATLAB版MVDR波束成形工具包:含阵列信号处理、压缩感知重构与瑞利信道仿真
  • 荣昌全屋整装哪家好?2026年本地供应厂家综合实力分析 - 优质品牌商家
  • 071、Gamma 校正:从线性空间到非线性空间的映射曲线与暗部和亮部分配
  • 向量数据库中的过滤近似最近邻搜索技术解析
  • LinkSwift:2025年终极网盘直链下载助手完全攻略
  • BoilR完整指南:5分钟学会将Epic、GOG等游戏平台整合到Steam
  • Redis 从入门到精通:Python 操作 Redis
  • 深度解析:ViVeTool GUI - Windows隐藏功能可视化管理的完整技术指南
  • Redis 从入门到精通:Python 操作 Redis 进阶
  • SpringBoot+Vue 校园周边美食分享平台 | 毕业设计完整源码 | 前后端分离
  • 纯C++命令行宝可梦对战程序:支持账号管理、精灵养成与回合制战斗
  • VisionPro九点标定实战:手把手教你搞定机械手与相机的‘对齐’(附完整C#补偿值计算代码)
  • MATLAB实操包:5G NOMA多用户配对与功率分配(2/4/8/12用户可选)
  • MRI影像画质升级工具:PyTorch实现的ESRGAN去噪+MoDL超分双模型方案
  • 告别Arduino,用TM1668芯片低成本驱动多位数码管:硬件方案与驱动代码全解析
  • Spring Boot项目里用Netty手搓MQTT客户端,从连接、订阅到消息重发,一个完整Demo的踩坑实录
  • 别再只会用Matlab仿真了!手把手教你用FPGA实现FSK解调(附AFC环完整代码)
  • 京东面试官问:Agent成本突然翻倍查谁
  • 从真人舞步到虚拟偶像:OpenMMD如何用AI技术重塑3D动画创作
  • 神州控股发布AI共创计划,构建供应链AI轻量化落地新路径
  • Windows虚拟桌面命令行管理工具VDesk技术深度解析
  • OpenModScan:3分钟快速上手的免费开源Modbus调试工具终极指南
  • 基于51单片基于51单片机的恒温控制自动报警加热系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码或者私信
  • 跨平台数据采集方案:原神祈愿记录导出工具的技术实现与开源实践
  • B站视频下载终极指南:5分钟掌握BilibiliDown跨平台免费下载神器
  • 告别GRACE低分辨率:手把手教你用GNSS2TWS开源MATLAB工具箱反演高精度陆地水储量
  • 功夫量化:10个技巧让您的量化交易系统从入门到精通
  • Transformer位置编码:RoPE与Sinusoidal PE的相位转换对比
  • Citra模拟器终极优化指南:15分钟提升游戏性能200%
  • 深度解析edge-tts WebSocket连接故障:架构优化与性能调优指南