备份与灾备
不做备份等于裸奔 —— 自动化备份方案
数据丢了就是丢了
硬盘会坏、服务器会挂、人会手滑、勒索病毒会来敲门。不做备份,出了任何一种情况,你的数据就彻底没了。而做好备份,再大的灾难也能原地满血复活。
💀 数据丢失的恐惧
你花了几个月积累的对话记录、精心调校的 Prompt、所有的配置 —— 突然有一天全没了。可能是硬盘坏了,可能是误操作 rm -rf 了,也可能是服务器被黑加密勒索了。没有备份的话,这一切就真的永远消失了。
自动化备份 + 异地存储 = 万无一失
写一个备份脚本,用 cron 定时执行,把备份文件同步到另一个地方(云存储、另一台机器、甚至 U 盘都行)。关键是自动化 —— 依赖人记着去备份,迟早会忘。
五步搭建备份体系
1
制定备份策略
想清楚备份什么、多久备一次、保留多久。建议:数据目录每天备份,配置文件每次修改后立刻备份,保留最近 30 天的备份。
2
编写备份脚本
写一个 Shell 脚本,把需要备份的目录打包压缩,文件名带上日期方便区分。脚本要可靠,加上错误处理和日志记录。
3
配置定时任务
用 cron 让备份脚本每天自动跑。选个没人用的时间段(凌晨 3-4 点),避免影响正常使用。
4
异地存储
备份文件不能只放在同一台机器上 —— 机器挂了备份也没了。同步到云存储(S3、OSS)、另一台服务器、或者 NAS 上。
5
恢复演练
备份做了不代表能用。每个月找个时间,用备份文件做一次完整恢复测试。等到真出事才发现备份是坏的,那就白做了。
备份脚本
这是一个实用的备份脚本,支持打包压缩、日志记录、自动清理旧备份:
backup.sh — 自动备份脚本
#!/bin/bash
# OpenClaw 自动备份脚本
set -euo pipefail
# ===== 配置 =====
DATA_DIR="/opt/openclaw"
BACKUP_DIR="/opt/backups/openclaw"
REMOTE_DIR="s3://your-bucket/openclaw-backups" # 可选:S3 异地备份
KEEP_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$BACKUP_DIR/backup.log"
# ===== 开始备份 =====
echo "[$DATE] Starting backup..." >> "$LOG_FILE"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 停止服务(可选,确保数据一致性)
# docker compose -f /opt/openclaw/docker-compose.yml stop
# 打包数据
tar -czf "$BACKUP_DIR/openclaw_$DATE.tar.gz" \
-C "$DATA_DIR" data config docker-compose.yml .env
# 重新启动服务
# docker compose -f /opt/openclaw/docker-compose.yml start
# 清理旧备份
find "$BACKUP_DIR" -name "openclaw_*.tar.gz" -mtime +$KEEP_DAYS -delete
# 同步到远端(可选)
# aws s3 sync "$BACKUP_DIR" "$REMOTE_DIR" --delete
# 或者用 rclone:
# rclone sync "$BACKUP_DIR" remote:openclaw-backups
FILESIZE=$(du -h "$BACKUP_DIR/openclaw_$DATE.tar.gz" | cut -f1)
echo "[$DATE] Backup completed: openclaw_$DATE.tar.gz ($FILESIZE)" >> "$LOG_FILE"
定时任务配置
crontab — 每日自动备份
# 编辑定时任务
crontab -e
# 每天凌晨 3 点执行备份
0 3 * * * /opt/openclaw/backup.sh >> /opt/backups/openclaw/cron.log 2>&1
# 每周日凌晨 4 点做一次完整备份(包含日志)
0 4 * * 0 tar -czf /opt/backups/openclaw/full_$(date +\%Y\%m\%d).tar.gz -C /opt openclaw
# 验证 crontab 是否生效
# crontab -l
RAID 不是备份!RAID 只防硬盘物理故障,防不了误删、病毒加密、软件 bug 写坏数据。很多人以为上了 RAID 就高枕无忧,结果 rm -rf 一下全完了。RAID 和备份是两回事,两个都要做。
恢复流程
真出事了别慌,按步骤来:
从备份恢复
# 1. 查看可用的备份文件
ls -lh /opt/backups/openclaw/
# 2. 选择最近的备份
BACKUP_FILE="openclaw_20260314_030000.tar.gz"
# 3. 停止当前服务
cd /opt/openclaw && docker compose down
# 4. 备份当前(可能损坏的)数据
mv /opt/openclaw/data /opt/openclaw/data.broken
# 5. 解压备份
tar -xzf "/opt/backups/openclaw/$BACKUP_FILE" -C /opt/openclaw/
# 6. 重启服务
docker compose up -d
# 7. 验证服务正常
curl -s http://localhost:3000/health
# 8. 确认没问题后删掉损坏的数据
# rm -rf /opt/openclaw/data.broken