inotify是Linux内核提供的文件系统事件监控机制,通过内核空间与用户空间的交互,实时捕获文件或目录的变化(如创建、删除、修改、移动等),并将事件通知给应用程序。它是Debian系统中实现实时文件同步的关键底层组件,解决了传统轮询监控(如dnotify)的资源浪费问题。
Debian系统提供了多种文件同步工具,其中rsync是最常用的增量同步工具(支持保留文件权限、时间戳等元数据,仅同步变化部分);lsyncd是基于rsync的实时同步守护进程,通过监控文件系统事件自动触发rsync;unison则是跨平台的双向同步工具,适合多设备数据共享。
Debian系统可通过inotify-tools包(包含inotifywait、inotifywatch命令)实现实时监控与同步。inotifywait阻塞监听指定目录的变化(如-e modify,create,delete),当事件发生时,调用rsync命令将变化的文件同步到目标目录。这种方式灵活,适合定制化同步需求(如仅同步特定文件类型)。
示例脚本:
#!/bin/bash
SOURCE_DIR="/path/to/source"
TARGET_DIR="/path/to/target"
inotifywait -m -r -e modify,create,delete "$SOURCE_DIR" | while read path action file; do
rsync -avz --delete "$SOURCE_DIR/" "$TARGET_DIR/"
done
lsyncd(Live Syncing Daemon)是Debian中常用的实时同步工具,它整合了inotify内核机制与rsync同步功能。通过配置文件(如/etc/lsyncd.conf),lsyncd会持续监控源目录,当检测到变化时,自动调用rsync进行增量同步。这种方式无需手动编写脚本,适合长期运行的生产环境。
配置示例:
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status"
}
sync {
default.rsync,
source = "/path/to/source",
target = "/path/to/target",
rsync = {
archive = true,
compress = true,
delete = true
}
}
--exclude='*.tmp')。fs.inotify.max_user_watches)和队列大小(fs.inotify.max_queued_events)需根据系统负载调整,避免事件丢失;rsync -e ssh),防止数据泄露。