
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):列出最新备份时间、大小、上一次失败记录(如有)










