技术架构全景
核心组件详解
1. inotify 内核子系统
- 功能:监控文件系统事件
- 内核支持:Linux 2.6.13+
- 监控能力:
- 单进程监控文件数:默认8192(可调优)
- 事件队列长度:默认16384(可调优)
- 响应延迟:毫秒级
2. Rsync 高效同步工具
特性 |
优势 |
适用场景 |
传输效率 |
增量同步 |
仅传输变化部分 |
大文件同步 |
极高 |
压缩传输 |
减少带宽占用 |
跨网络同步 |
高 |
校验机制 |
数据一致性保证 |
关键数据备份 |
可靠 |
权限保持 |
保留文件属性 |
系统迁移 |
完整 |
实践演示
一、环境准备与安装
1. 检查内核支持
[root@localhost ~]
5.14.0-284.el9.x86_64
[root@localhost ~]
CONFIG_INOTIFY_USER=y
2. 安装 inotify-tools
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
inotifywait 3.22.6
Wait for a particular event on a file or set of files.
Usage: inotifywait [options] file1 [file2] [file3] ...
二、配置 Rsync 服务端(目标机)
1. 创建 Rsync 配置文件
[root@localhost ~]
[backup]
path = /data/backup
uid = root
gid = root
read only = no
hosts allow = 192.168.1.0/24
2. 启动 Rsync 守护进程
[root@localhost ~]
[root@localhost ~]
tcp LISTEN 0 5 *:873 *:* users:(("rsync",pid=1234))
三、配置实时同步脚本(源机)
1. 创建同步脚本
[root@localhost ~]
SRC="/var/www/html"
DEST="192.168.1.100::backup"
LOG="/var/log/inotify_rsync.log"
inotifywait -mrq -e create,delete,move,modify,attrib "$SRC" | while read path event file
do
rsync -azP --delete "$SRC" "$DEST" >> "$LOG" 2>&1
echo "[$(date +'%F %T')] $file 事件: $event" >> "$LOG"
done
2. 设置权限并启动
[root@localhost ~]
[root@localhost ~]
四、测试与验证
[root@localhost ~]
[root@localhost ~]
test1.txt test2.txt test3.txt
[root@localhost ~]
[2025-07-28 14:22:05] test1.txt 事件: CREATE
[2025-07-28 14:22:05] test2.txt 事件: CREATE
[2025-07-28 14:22:06] test3.txt 事件: CREATE
命令总结表格
演示命令 |
功能描述 |
关键参数/文件 |
dnf install inotify-tools rsync -y |
安装核心工具 |
inotify-tools 提供监控能力 |
vi /etc/rsyncd.conf |
配置 Rsync 服务端 |
read only=no 允许写入 |
inotifywait -mrq -e create,delete,... |
监控文件事件 |
-e 指定事件类型 |
rsync -azP --delete $SRC $DEST |
增量同步并删除目标多余文件 |
--delete 保持严格一致 |
nohup /opt/inotify_rsync.sh & |
后台运行监控脚本 |
避免终端关闭导致进程退出 |
功能作用详解
1. 核心事件类型说明
事件类型 |
触发场景 |
同步必要性 |
create |
文件/目录创建 |
必需 |
delete |
文件/目录删除 |
必需(配合 --delete ) |
modify |
文件内容修改 |
必需 |
move |
文件移动或重命名 |
必需 |
attrib |
权限/属性变更(如 chmod) |
可选 |
2. 内核参数优化
[root@localhost ~]
fs.inotify.max_user_watches = 1000000
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
[root@localhost ~]