温馨提示×

ubuntu inotify如何备份设置

小樊
46
2025-10-14 08:28:27
栏目: 智能运维

Ubuntu下使用inotify实现备份设置的完整指南

inotify是Linux内核提供的文件系统事件监控机制,结合inotify-tools工具集和rsync等备份工具,可实现文件变化的实时/增量备份,避免周期性备份的延迟问题。以下是具体实现步骤:

1. 安装必要工具

首先安装inotify-tools(提供inotifywait命令,用于监控文件系统事件)和rsync(用于增量备份):

sudo apt update
sudo apt install inotify-tools rsync

2. 基础备份脚本编写

创建一个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)和文件名;
  • -avrsync的归档模式(保留权限、时间戳等)和详细输出;
  • --ignore-existing/--delete/--update:控制增量备份的行为。

3. 设置脚本权限并测试

赋予脚本执行权限,运行并测试:

chmod +x inotify_backup.sh
./inotify_backup.sh

MONITOR_DIR目录下创建、修改或删除文件,观察BACKUP_DIR是否同步变化。

4. 配置系统服务(可选,开机自启)

若需脚本随系统启动自动运行,可创建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  # 检查服务状态

5. 优化inotify内核参数(可选,提升性能)

若监控大量文件(如超过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_DIRBACKUP_DIR路径存在且有读写权限;
  • 事件覆盖inotifywait-e参数可根据需求扩展(如moveattrib等);
  • 日志记录:可将脚本输出重定向到日志文件(如>> /var/log/inotify_backup.log 2>&1),便于排查问题;
  • 备份验证:定期检查备份目录,确保数据一致性。

通过以上步骤,即可在Ubuntu上实现基于inotify的实时/增量备份,满足文件变化的快速响应需求。

0