备份与灾备

不做备份等于裸奔 —— 自动化备份方案

数据丢了就是丢了

硬盘会坏、服务器会挂、人会手滑、勒索病毒会来敲门。不做备份,出了任何一种情况,你的数据就彻底没了。而做好备份,再大的灾难也能原地满血复活。

💀 数据丢失的恐惧

你花了几个月积累的对话记录、精心调校的 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
这篇教程对你有帮助吗?