v3.3: 添加本地保留数量、远程保留天数配置,自动清理旧快照

This commit is contained in:
mango
2026-02-02 11:07:25 +08:00
parent 5c04e8f661
commit 8c331ca17b

View File

@@ -498,9 +498,39 @@ create_snapshot() {
local size=$(du -h "$snapshot_file" | cut -f1)
log "快照已创建: $snapshot_file ($size)"
# 清理本地旧快照
cleanup_local
echo "$snapshot_file"
}
#===============================================================================
# 清理旧快照
#===============================================================================
cleanup_local() {
local snap_dir="${LOCAL_DIR:-/var/snapshots}"
local keep=${LOCAL_KEEP:-3}
local count=$(ls -1 "$snap_dir"/*.tar.gz 2>/dev/null | wc -l)
if [ "$count" -gt "$keep" ]; then
log "🧹 清理本地旧快照 (保留$keep个)..."
ls -t "$snap_dir"/*.tar.gz | tail -n +$((keep+1)) | xargs rm -f
fi
}
cleanup_remote() {
[ -z "$REMOTE_IP" ] && return
local days=${REMOTE_KEEP_DAYS:-30}
local remote_path="${REMOTE_DIR:-/backup}/${VPS_NAME:-$(hostname)}"
log "🧹 清理远程旧快照 (保留${days}天)..."
sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no \
-p "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP" \
"find $remote_path -name '*.tar.gz' -mtime +$days -delete 2>/dev/null" || true
}
#===============================================================================
# 本地恢复
#===============================================================================
@@ -619,6 +649,9 @@ do_sync_remote() {
-e "ssh -o StrictHostKeyChecking=no -p ${REMOTE_PORT:-22}" \
"$latest" "${REMOTE_USER:-root}@$REMOTE_IP:$remote_path/"
# 清理远程旧快照
cleanup_remote
log "✅ 同步完成"
}
@@ -644,14 +677,16 @@ load_config() {
save_config() {
cat > "$CONFIG_FILE" << EOF
VPS_NAME="$VPS_NAME"
TG_BOT_TOKEN="$TG_BOT_TOKEN"
TG_CHAT_ID="$TG_CHAT_ID"
LOCAL_DIR="$LOCAL_DIR"
LOCAL_KEEP="$LOCAL_KEEP"
REMOTE_IP="$REMOTE_IP"
REMOTE_PORT="$REMOTE_PORT"
REMOTE_USER="$REMOTE_USER"
REMOTE_PASS="$REMOTE_PASS"
REMOTE_DIR="$REMOTE_DIR"
LOCAL_DIR="$LOCAL_DIR"
REMOTE_KEEP_DAYS="$REMOTE_KEEP_DAYS"
TG_BOT_TOKEN="$TG_BOT_TOKEN"
TG_CHAT_ID="$TG_CHAT_ID"
EOF
chmod 600 "$CONFIG_FILE"
}
@@ -667,6 +702,9 @@ do_setup() {
read -p "本地快照目录 [/var/snapshots]: " LOCAL_DIR
LOCAL_DIR=${LOCAL_DIR:-/var/snapshots}
read -p "本地保留快照数量 [3]: " LOCAL_KEEP
LOCAL_KEEP=${LOCAL_KEEP:-3}
echo ""
info "远程备份配置 (可选,留空跳过)"
read -p "远程服务器 IP: " REMOTE_IP
@@ -677,8 +715,10 @@ do_setup() {
REMOTE_USER=${REMOTE_USER:-root}
read -s -p "远程密码: " REMOTE_PASS
echo ""
read -p "远程目录 [/backup/$VPS_NAME]: " REMOTE_DIR
REMOTE_DIR=${REMOTE_DIR:-/backup/$VPS_NAME}
read -p "远程目录 [/backup]: " REMOTE_DIR
REMOTE_DIR=${REMOTE_DIR:-/backup}
read -p "远程保留天数 [30]: " REMOTE_KEEP_DAYS
REMOTE_KEEP_DAYS=${REMOTE_KEEP_DAYS:-30}
fi
echo ""