89 lines
2.3 KiB
Bash
Executable File
89 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# ====== 备份验证脚本 ======
|
|
# 每周日凌晨 04:00 自动运行
|
|
# 验证备份完整性,解压测试 SQLite 数据库
|
|
|
|
set -e
|
|
|
|
DATE=$(date +%Y%m%d)
|
|
VERIFY_DIR="/tmp/zhiyi_verify_${DATE}"
|
|
LOG_FILE="${HOME}/.hermes/logs/backup_verify.log"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log "===== 备份验证开始 ====="
|
|
|
|
# 1. Clone backup 仓库
|
|
log "[1/4] 拉取备份..."
|
|
if [ ! -d "${HOME}/zhiyi-backup-verify" ]; then
|
|
git clone "http://192.168.123.11:3000/xiaoxue_admin/zhiyi-backup.git" "${HOME}/zhiyi-backup-verify"
|
|
else
|
|
cd "${HOME}/zhiyi-backup-verify"
|
|
git pull origin main
|
|
fi
|
|
|
|
cd "${HOME}/zhiyi-backup-verify"
|
|
|
|
# 找最新备份
|
|
LATEST=$(ls -t *.tar.gz 2>/dev/null | head -1)
|
|
if [ -z "$LATEST" ]; then
|
|
log "ERROR: 未找到任何备份文件"
|
|
exit 1
|
|
fi
|
|
log "验证备份: ${LATEST}"
|
|
|
|
# 2. 校验 tar.gz 完整性
|
|
log "[2/4] 校验 tar.gz 完整性..."
|
|
if tar -tzf "$LATEST" > /dev/null 2>&1; then
|
|
log "✓ tar.gz 文件完整"
|
|
else
|
|
log "ERROR: tar.gz 文件损坏"
|
|
exit 1
|
|
fi
|
|
|
|
# 3. 解压并校验 SQLite
|
|
log "[3/4] 解压并校验 SQLite..."
|
|
mkdir -p "${VERIFY_DIR}"
|
|
tar -xzf "$LATEST" -C "${VERIFY_DIR}"
|
|
|
|
DATA_DIR=$(ls -d "${VERIFY_DIR}"/zhiyi_backup_* 2>/dev/null | head -1)
|
|
if [ -z "$DATA_DIR" ]; then
|
|
log "ERROR: 无法找到解压后的数据目录"
|
|
exit 1
|
|
fi
|
|
|
|
# 校验 graph.db
|
|
if [ -f "${DATA_DIR}/memoryweave/graph.db" ]; then
|
|
NODE_COUNT=$(sqlite3 "${DATA_DIR}/memoryweave/graph.db" "SELECT count(*) FROM nodes;" 2>/dev/null || echo "ERR")
|
|
if [ "$NODE_COUNT" != "ERR" ]; then
|
|
log "✓ 图谱数据库正常 (${NODE_COUNT} nodes)"
|
|
else
|
|
log "ERROR: 图谱数据库损坏"
|
|
fi
|
|
else
|
|
log "WARN: graph.db 不存在"
|
|
fi
|
|
|
|
# 校验 memoryweave.db
|
|
if [ -f "${DATA_DIR}/memoryweave/memoryweave.db" ]; then
|
|
DB_SIZE=$(du -sh "${DATA_DIR}/memoryweave/memoryweave.db" | cut -f1)
|
|
log "✓ LiteDB 数据库存在 (${DB_SIZE})"
|
|
else
|
|
log "WARN: memoryweave.db 不存在"
|
|
fi
|
|
|
|
# 校验 LanceDB 目录
|
|
if [ -d "${DATA_DIR}/memoryweave/memories.lance" ]; then
|
|
LANCE_SIZE=$(du -sh "${DATA_DIR}/memoryweave/memories.lance" | cut -f1)
|
|
log "✓ LanceDB 向量目录存在 (${LANCE_SIZE})"
|
|
else
|
|
log "WARN: memories.lance 不存在"
|
|
fi
|
|
|
|
# 4. 清理
|
|
log "[4/4] 清理临时文件..."
|
|
rm -rf "${VERIFY_DIR}"
|
|
log "===== 备份验证完成 ====="
|
|
echo "" |