debian自动备份脚本及恢复测试方案

以下是一个用于Debian系统的自动备份脚本及恢复测试的详细方案,包含脚本说明和操作指南:


一、自动备份脚本 backup_script.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

# 配置部分
BACKUP_DIRS="/etc /home" # 需要备份的目录
DEST_DIR="/backups" # 备份文件存储目录
RETENTION_DAYS=7 # 备份保留天数
LOG_FILE="/var/log/backup.log" # 日志文件路径

# 创建备份目录和日志文件
mkdir -p "$DEST_DIR"
touch "$LOG_FILE"

# 生成备份文件名
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$DEST_DIR/backup-$TIMESTAMP.tar.gz"

# 执行备份
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 开始备份..." | tee -a "$LOG_FILE"
tar -czf "$BACKUP_FILE" $BACKUP_DIRS 2>> "$LOG_FILE"

# 检查备份结果
if [ $? -eq 0 ]; then
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 备份成功:$BACKUP_FILE" | tee -a "$LOG_FILE"
else
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 备份失败!请检查日志!" | tee -a "$LOG_FILE"
exit 1
fi

# 清理旧备份
find "$DEST_DIR" -name "backup-*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 已清理超过${RETENTION_DAYS}天的旧备份" | tee -a "$LOG_FILE"

二、恢复脚本 restore_script.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

# 配置部分
DEST_DIR="/backups" # 备份文件存储目录

# 列出可用备份
echo "可用的备份文件:"
ls -lh $DEST_DIR/backup-*.tar.gz | awk '{print NR ") " $NF}'

# 选择备份文件
read -p "请输入要恢复的备份编号: " NUM
BACKUP_FILES=($DEST_DIR/backup-*.tar.gz)
SELECTED_FILE=${BACKUP_FILES[$((NUM-1))]}

# 确认恢复
read -p "即将恢复 $SELECTED_FILE 到原始位置,确认吗?[y/N] " CONFIRM
if [[ $CONFIRM =~ [yY] ]]; then
tar -xzf "$SELECTED_FILE" -C /
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 恢复完成:$SELECTED_FILE"
else
echo "操作已取消"
fi

三、部署与使用说明

1. 安装脚本

1
2
3
4
5
6
7
# 创建脚本文件
sudo nano /usr/local/bin/backup_script.sh
sudo nano /usr/local/bin/restore_script.sh

# 赋予执行权限
sudo chmod +x /usr/local/bin/backup_script.sh
sudo chmod +x /usr/local/bin/restore_script.sh

2. 配置定时任务(每日凌晨2点执行)

1
2
3
sudo crontab -e
# 添加以下内容:
0 2 * * * /usr/local/bin/backup_script.sh

3. 测试备份

1
2
3
4
5
sudo /usr/local/bin/backup_script.sh
# 检查备份文件
ls -lh /backups/
# 查看日志
tail -f /var/log/backup.log

4. 恢复测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. 创建测试文件
sudo touch /etc/test-file.txt

# 2. 执行备份
sudo backup_script.sh

# 3. 删除测试文件
sudo rm /etc/test-file.txt

# 4. 执行恢复
sudo restore_script.sh
# 按提示选择备份编号并确认

# 5. 验证恢复结果
ls -l /etc/test-file.txt

四、关键功能说明

  1. 备份策略

    • 使用tar进行压缩打包
    • 自动清理旧备份(默认保留7天)
    • 详细日志记录在/var/log/backup.log
  2. 恢复机制

    • 交互式选择备份文件
    • 恢复前二次确认
    • 直接覆盖原始路径设计
  3. 安全建议

    • 建议将DEST_DIR设置为独立分区
    • 如需远程备份,可挂载NFS或使用rsync
    • 敏感数据建议加密备份(可添加-j选项使用bzip2压缩)
  4. 错误排查

    • 检查/var/log/backup.log错误信息
    • 确认脚本有执行权限
    • 确保存储目录有足够空间

五、扩展建议

  1. 邮件通知
    可在脚本中添加mail命令,在失败时发送报警邮件

  2. 远程备份
    添加以下命令到备份脚本末尾:

    1
    rsync -avz $DEST_DIR/backup-*.tar.gz user@remote:/remote/backup/
  3. 完整性检查
    在恢复前添加验证步骤:

    1
    tar -tzf $SELECTED_FILE > /dev/null && echo "备份文件有效"

这个方案提供了从备份到验证的完整闭环,建议首次部署后通过模拟故障恢复进行全流程测试。