你的 OpenClaw 實例裡儲存了對話記錄、記憶、個人化設定、Skills 和各種認證資訊。一次意外的磁碟損壞或不小心的 rm -rf,就能讓數月的互動成果歸零。
備份不是可選的,是必要的。本文完整介紹備份策略——從手動 tar 到自動化雲端同步,再到跨伺服器搬遷。
理解資料結構
~/.openclaw/ 目錄
~/.openclaw/
openclaw.json # 核心設定檔(含 API 金鑰)
gateway.db # Gateway 資料庫(對話、狀態)
memory/ # 長期記憶系統
embeddings.db # 記憶向量資料庫
documents/ # 記憶文件
skills/ # 已安裝的 Skills
sessions/ # 頻道 Session(Telegram/WhatsApp/Discord)
logs/ # 日誌檔案
plugins/ # 已安裝的外掛
| 目錄/檔案 | 重要性 | 丟失後果 |
|---|---|---|
openclaw.json |
關鍵 | 所有設定需重新配置 |
gateway.db |
關鍵 | 對話歷史全部遺失 |
memory/ |
關鍵 | 長期記憶不可恢復 |
skills/ |
重要 | 可重裝但自訂設定丟失 |
sessions/ |
重要 | 需重新配對所有頻道 |
logs/ |
一般 | 無重大影響 |
核心原則: openclaw.json、gateway.db 和 memory/ 絕對不能丟。
手動備份
基本 tar 備份
# 停止 OpenClaw(確保資料一致性)
openclaw stop
# 建立帶時間戳的備份
BACKUP_NAME="openclaw-backup-$(date +%Y%m%d-%H%M%S).tar.gz"
tar -czf ~/$BACKUP_NAME -C ~ .openclaw/
# 重新啟動
openclaw start
echo "Backup created: ~/$BACKUP_NAME"
不停機備份
gateway.db 是 SQLite 資料庫,寫入中備份可能損壞[1]。用 SQLite 備份 API 可以安全地不停機備份:
sqlite3 ~/.openclaw/gateway.db ".backup '/tmp/gateway-backup.db'"
sqlite3 ~/.openclaw/memory/embeddings.db ".backup '/tmp/embeddings-backup.db'"
tar -czf ~/openclaw-backup-$(date +%Y%m%d).tar.gz \
--exclude='.openclaw/gateway.db' \
--exclude='.openclaw/memory/embeddings.db' \
--exclude='.openclaw/logs' \
-C ~ .openclaw/
# 手動加入安全備份的資料庫
cp /tmp/gateway-backup.db /tmp/embeddings-backup.db ~/
rm /tmp/gateway-backup.db /tmp/embeddings-backup.db
自動化 Cron 備份
sudo tee /usr/local/bin/openclaw-backup.sh << 'SCRIPT'
#!/bin/bash
set -euo pipefail
BACKUP_DIR="/var/backups/openclaw"
OPENCLAW_DIR="$HOME/.openclaw"
RETENTION_DAYS=30
mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$BACKUP_DIR/openclaw-$TIMESTAMP.tar.gz"
# SQLite 安全備份
TEMP_DIR=$(mktemp -d)
sqlite3 "$OPENCLAW_DIR/gateway.db" ".backup '$TEMP_DIR/gateway.db'" 2>/dev/null || true
sqlite3 "$OPENCLAW_DIR/memory/embeddings.db" ".backup '$TEMP_DIR/embeddings.db'" 2>/dev/null || true
tar -czf "$BACKUP_FILE" \
--exclude='logs' --exclude='*.log' \
--exclude='gateway.db' --exclude='embeddings.db' \
-C "$(dirname $OPENCLAW_DIR)" "$(basename $OPENCLAW_DIR)/" \
-C "$TEMP_DIR" gateway.db embeddings.db 2>/dev/null
rm -rf "$TEMP_DIR"
find "$BACKUP_DIR" -name "openclaw-*.tar.gz" -mtime +$RETENTION_DAYS -delete
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo "$(date): Backup completed: $BACKUP_FILE ($BACKUP_SIZE)" >> "$BACKUP_DIR/backup.log"
SCRIPT
chmod +x /usr/local/bin/openclaw-backup.sh
# 每天凌晨 3 點備份
(crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/openclaw-backup.sh") | crontab -
備份驗證
沒有驗證的備份等於沒有備份:
# 驗證 tar 完整性
tar -tzf /var/backups/openclaw/openclaw-latest.tar.gz > /dev/null && echo "OK" || echo "CORRUPTED"
# 計算校驗碼
sha256sum backup.tar.gz > backup.tar.gz.sha256
sha256sum -c backup.tar.gz.sha256
雲端備份
本地備份無法防禦硬碟損壞或整台伺服器的災難。3-2-1 備份策略要求至少一份異地副本[2]。
AWS S3
aws s3 sync /var/backups/openclaw/ s3://your-bucket/openclaw-backups/ \
--storage-class STANDARD_IA --exclude "*.log"
Backblaze B2(更便宜)
B2 的儲存成本約為 S3 的四分之一[3]:
pip install b2
b2 authorize-account YOUR_KEY_ID YOUR_APPLICATION_KEY
b2 sync /var/backups/openclaw/ b2://openclaw-backups/
rclone(萬用方案)
rclone sync /var/backups/openclaw/ remote:openclaw-backups/
# 加密同步(推薦,因為備份含 API 金鑰)
rclone sync /var/backups/openclaw/ remote-crypt:openclaw-backups/
備份加密
上傳雲端前務必加密:
gpg --symmetric --cipher-algo AES256 ~/openclaw-backup.tar.gz
# 解密
gpg --decrypt openclaw-backup.tar.gz.gpg > openclaw-backup.tar.gz
還原流程
完整還原
openclaw stop
mv ~/.openclaw ~/.openclaw.old # 備份目前資料
tar -xzf ~/openclaw-backup.tar.gz -C ~/
openclaw start
openclaw doctor
部分還原
# 只還原設定
tar -xzf backup.tar.gz -C ~/tmp-restore/
cp ~/tmp-restore/.openclaw/openclaw.json ~/.openclaw/
# 只還原記憶
openclaw stop
cp ~/tmp-restore/.openclaw/memory/* ~/.openclaw/memory/
openclaw start
還原後檢查清單
openclaw status # 確認運行中
openclaw doctor # 診斷通過
openclaw config list # API 金鑰正確
openclaw memory search "test" # 記憶搜尋正常
openclaw skills list # Skills 已載入
# 從 Telegram/WhatsApp 發送測試訊息
伺服器搬遷
在舊伺服器上
openclaw stop
BACKUP="openclaw-migration-$(date +%Y%m%d).tar.gz"
tar -czf ~/$BACKUP -C ~ .openclaw/
openclaw --version > ~/migration-info.txt
scp ~/$BACKUP user@new-server:~/
在新伺服器上
# 安裝 Node.js 和 OpenClaw
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
npx openclaw onboard --skip-config
# 還原備份
tar -xzf ~/openclaw-migration-*.tar.gz -C ~/
openclaw start
openclaw doctor
Docker 環境搬遷
# 舊伺服器:備份 Volume
docker compose down
docker run --rm \
-v openclaw_data:/data -v $(pwd):/backup \
alpine tar -czf /backup/openclaw-volume.tar.gz -C /data .
# 新伺服器:還原 Volume
docker compose up -d && docker compose down
docker run --rm \
-v openclaw_data:/data -v ~/:/backup \
alpine sh -c "cd /data && tar -xzf /backup/openclaw-volume.tar.gz"
docker compose up -d
別忘了更新 DNS 記錄指向新伺服器 IP。
處理頻道 Sessions
Telegram Bot
Token 是全域的,不和伺服器綁定。備份 openclaw.json 中的 Token 後搬遷即可。如果配對失效:
openclaw pairing approve telegram CODE
WhatsApp Session 基於 WhatsApp Web 認證,和伺服器環境有一定綁定[4]。搬遷後有機率失效,需重新掃描 QR Code:
openclaw config set whatsapp.session ""
openclaw restart
Discord Bot
和 Telegram 類似,Token 是全域的,只要設定正確即可。
保留記憶與對話
記憶系統是最不能丟失的資料——它代表 AI 助理對你的了解[5]。
# 安全備份記憶
sqlite3 ~/.openclaw/memory/embeddings.db ".backup 'memory-backup.db'"
# 搬遷後驗證
openclaw memory search "important topic"
sqlite3 ~/.openclaw/memory/embeddings.db "SELECT COUNT(*) FROM memories;"
備份策略建議
個人使用者: 每日自動備份,保留 14 份,本地 + 一份雲端,GPG 加密。
團隊/多使用者: 每 6 小時備份,保留 30 份,本地 + S3/B2 + 異地副本,自動驗證 + 告警。
使用 ClawTank: 備份由平台自動處理並加密儲存。但定期匯出一份本地副本仍是好的實踐。
常見問題
備份太大: 通常是日誌佔空間,備份時 --exclude='logs'。
Gateway Token 不匹配: 用 openclaw config get gateway.token 確認,不一致則需重新配對。
跨版本還原: 版本不同可能有 schema 變更,執行 openclaw db migrate。
總結
花 30 分鐘設定自動備份,可以在未來省下數小時的痛苦重建。行動清單:
- 立即: 做一次手動完整備份
- 今天: 設定 Cron 自動備份
- 本週: 設定雲端同步
- 定期: 測試還原流程
你的 AI 助理的記憶和經驗是不可替代的。保護好它們。
