inotify 是 Linux 系统中的一个内核子系统,它可以监控文件系统事件,如文件的创建、修改、删除等。利用 inotify 可以实现高效的文件监控和备份策略。以下是一个基本的步骤指南,介绍如何使用 inotify 进行备份:
首先,确保你的系统上安装了 inotify-tools,这是一个常用的 inotify 工具集。
sudo apt-get install inotify-tools # Debian/Ubuntu
sudo yum install inotify-tools # CentOS/RHEL
创建一个脚本来监控指定的目录,并在检测到文件变化时执行备份操作。
#!/bin/bash
# 监控的源目录和目标备份目录
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
# 使用 inotifywait 监控源目录
inotifywait -m -r -e create,modify,delete --format '%w%f' "$SOURCE_DIR" | while read FILE
do
# 获取当前时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR/$TIMESTAMP"
# 备份文件
cp -r "$FILE" "$BACKUP_DIR/$TIMESTAMP"
echo "Backup completed: $FILE -> $BACKUP_DIR/$TIMESTAMP"
done
确保脚本具有执行权限,并以后台模式运行。
chmod +x /path/to/your/script.sh
nohup /path/to/your/script.sh &
为了更好地管理备份过程,可以添加日志记录功能。
#!/bin/bash
# 监控的源目录和目标备份目录
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
LOG_FILE="/var/log/inotify_backup.log"
# 使用 inotifywait 监控源目录
inotifywait -m -r -e create,modify,delete --format '%w%f' "$SOURCE_DIR" | while read FILE
do
# 获取当前时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR/$TIMESTAMP"
# 备份文件
cp -r "$FILE" "$BACKUP_DIR/$TIMESTAMP"
# 记录日志
echo "$(date +"%Y-%m-%d %H:%M:%S") - Backup completed: $FILE -> $BACKUP_DIR/$TIMESTAMP" >> "$LOG_FILE"
echo "Backup completed: $FILE -> $BACKUP_DIR/$TIMESTAMP"
done
为了确保备份脚本持续运行,可以使用 systemd 或 cron 进行调度。
创建一个 systemd 服务文件 /etc/systemd/system/inotify-backup.service。
[Unit]
Description=Inotify Backup Service
After=network.target
[Service]
ExecStart=/path/to/your/script.sh
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable inotify-backup.service
sudo systemctl start inotify-backup.service
编辑 crontab 文件:
crontab -e
添加以下行以每分钟运行一次脚本:
* * * * * /path/to/your/script.sh >> /var/log/inotify_backup.log 2>&1
通过以上步骤,你可以利用 inotify 实现一个高效的文件监控和备份策略。