Linux 自动化备份系统设计

4次阅读

Linux 自动化备份系统设计

linux 自动化备份系统的核心是可靠、可追溯、低干预——用标准工具组合(rsync + cron + shell 脚本 + 日志 + 保留策略)就能满足大多数场景,无需复杂软件。

备份内容与目标路径要明确分离

避免把源目录和备份目录放在同一文件系统或同一块磁盘上。例如:

  • 源数据在 /data/app,备份到 /backup/local/app(本地另一块盘)
  • 远程备份则走 rsync over ssh,目标为 user@backup-server:/backup/remote/app
  • 每次备份目录建议带时间戳(如 app_20240520_1430),便于识别和脚本清理

用 rsync 实现高效增量同步

rsync 的 –link-dest 是关键:复用前次备份的相同文件,硬链接节省空间,真正实现“增量归档”。

  • 示例命令片段:
    rsync -av –delete –link-dest=”/backup/app_latest” /data/app/ “/backup/app_$(date +%Y%m%d_%H%M)”
  • 执行后立即创建软链接 app_latest → app_20240520_1430,供下次 –link-dest 引用
  • 务必加 –delete 保持目标与源结构一致(慎用于首次运行,可先加 –dry-run 验证)

定时任务与执行环境需隔离验证

cron 默认环境变量精简,容易导致脚本中命令找不到(如 rsync、date 路径异常)或 ssh 密钥不可用。

  • 在脚本开头显式声明 PATH:
    PATH=/usr/local/bin:/usr/bin:/bin
  • ssh 备份必须用免密密钥,且密钥不能设密码;测试时用 sudo -u backupuser crontab -e 并手动模拟环境:
    env -i PATH=”$PATH” SHELL=/bin/bash HOME=/home/backupuser /path/to/backup.sh
  • 所有 cron 条目末尾加日志重定向:
    0 2 * * * /backup/scripts/app_backup.sh >> /backup/logs/app_backup.log 2>&1

保留策略与健康检查不能只靠脚本

自动删旧备份前,必须确认新备份已成功完成,否则可能误删唯一副本。

  • 备份脚本结尾写标记文件:
    touch /backup/app_$(date +%Y%m%d_%H%M)/.backup_ok
  • 清理脚本先检查该标记存在,再按时间排序保留最近 7 个完整备份:
    find /backup -maxdepth 1 -name “app_*” -type d -mmin +10 -not -name “app_latest” | sort | head -n -7 | xargs rm -rf
  • 每周发一次摘要邮件(用 mail 或 sendmail):列出最新备份时间、大小、上一次失败记录(如有)
text=ZqhQzanResources