Ubuntu下使用inotify实现备份设置的完整指南
inotify是Linux内核提供的文件系统事件监控机制,结合inotify-tools工具集和rsync等备份工具,可实现文件变化的实时/增量备份,避免周期性备份的延迟问题。以下是具体实现步骤:
首先安装inotify-tools(提供inotifywait命令,用于监控文件系统事件)和rsync(用于增量备份):
sudo apt update
sudo apt install inotify-tools rsync
创建一个Shell脚本(如inotify_backup.sh),核心逻辑为:用inotifywait监控指定目录的变化(如创建、修改、删除),触发rsync执行增量备份。
#!/bin/bash
# 监控目录(需替换为实际路径)
MONITOR_DIR="/path/to/source"
# 备份目标目录(需替换为实际路径)
BACKUP_DIR="/path/to/backup"
# 使用inotifywait持续监控(-m:持续;-r:递归子目录;-e:指定事件类型)
inotifywait -m -r -e create,delete,modify --format '%e %f' "$MONITOR_DIR" | while read event file; do
# 根据事件类型执行不同备份操作
if [[ "$event" == "CREATE" ]]; then
# 新文件创建:同步新增文件(--ignore-existing:忽略目标已存在的文件)
rsync -av --ignore-existing "$MONITOR_DIR/" "$BACKUP_DIR/"
echo "[$(date)] New file created: $file -> Backup completed."
elif [[ "$event" == "DELETE" ]]; then
# 文件删除:同步删除目标文件(--delete:删除目标中源不存在的文件)
rsync -av --delete "$MONITOR_DIR/" "$BACKUP_DIR/"
echo "[$(date)] File deleted: $file -> Backup synchronized."
elif [[ "$event" == "MODIFY" ]]; then
# 文件修改:同步修改后的文件(--update:仅更新目标中较旧的文件)
rsync -av --update "$MONITOR_DIR/" "$BACKUP_DIR/"
echo "[$(date)] File modified: $file -> Backup updated."
fi
done
参数说明:
--format '%e %f':输出事件类型(如CREATE、MODIFY)和文件名;-av:rsync的归档模式(保留权限、时间戳等)和详细输出;--ignore-existing/--delete/--update:控制增量备份的行为。赋予脚本执行权限,运行并测试:
chmod +x inotify_backup.sh
./inotify_backup.sh
在MONITOR_DIR目录下创建、修改或删除文件,观察BACKUP_DIR是否同步变化。
若需脚本随系统启动自动运行,可创建systemd服务:
sudo nano /etc/systemd/system/inotify_backup.service
写入以下内容(替换脚本路径和用户名):
[Unit]
Description=Inotify Backup Service
After=network.target
[Service]
ExecStart=/path/to/inotify_backup.sh
Restart=always
User=your_username # 替换为运行脚本的用户名(如ubuntu)
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable inotify_backup.service
sudo systemctl start inotify_backup.service
sudo systemctl status inotify_backup.service # 检查服务状态
若监控大量文件(如超过10万),需调整内核参数避免Event Queue Overflow错误:
编辑/etc/sysctl.conf,添加或修改以下行:
fs.inotify.max_user_watches=100000 # 每个用户可监控的最大文件数(默认14165)
fs.inotify.max_user_instances=256 # 每个用户的inotify实例数(默认128)
fs.inotify.max_queued_events=65536 # 事件队列最大长度(默认16384)
应用配置:
sudo sysctl -p
MONITOR_DIR和BACKUP_DIR路径存在且有读写权限;inotifywait的-e参数可根据需求扩展(如move、attrib等);>> /var/log/inotify_backup.log 2>&1),便于排查问题;通过以上步骤,即可在Ubuntu上实现基于inotify的实时/增量备份,满足文件变化的快速响应需求。