v3.3: 添加本地保留数量、远程保留天数配置,自动清理旧快照
This commit is contained in:
@@ -498,9 +498,39 @@ create_snapshot() {
|
|||||||
|
|
||||||
local size=$(du -h "$snapshot_file" | cut -f1)
|
local size=$(du -h "$snapshot_file" | cut -f1)
|
||||||
log "快照已创建: $snapshot_file ($size)"
|
log "快照已创建: $snapshot_file ($size)"
|
||||||
|
|
||||||
|
# 清理本地旧快照
|
||||||
|
cleanup_local
|
||||||
|
|
||||||
echo "$snapshot_file"
|
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}" \
|
-e "ssh -o StrictHostKeyChecking=no -p ${REMOTE_PORT:-22}" \
|
||||||
"$latest" "${REMOTE_USER:-root}@$REMOTE_IP:$remote_path/"
|
"$latest" "${REMOTE_USER:-root}@$REMOTE_IP:$remote_path/"
|
||||||
|
|
||||||
|
# 清理远程旧快照
|
||||||
|
cleanup_remote
|
||||||
|
|
||||||
log "✅ 同步完成"
|
log "✅ 同步完成"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,14 +677,16 @@ load_config() {
|
|||||||
save_config() {
|
save_config() {
|
||||||
cat > "$CONFIG_FILE" << EOF
|
cat > "$CONFIG_FILE" << EOF
|
||||||
VPS_NAME="$VPS_NAME"
|
VPS_NAME="$VPS_NAME"
|
||||||
TG_BOT_TOKEN="$TG_BOT_TOKEN"
|
LOCAL_DIR="$LOCAL_DIR"
|
||||||
TG_CHAT_ID="$TG_CHAT_ID"
|
LOCAL_KEEP="$LOCAL_KEEP"
|
||||||
REMOTE_IP="$REMOTE_IP"
|
REMOTE_IP="$REMOTE_IP"
|
||||||
REMOTE_PORT="$REMOTE_PORT"
|
REMOTE_PORT="$REMOTE_PORT"
|
||||||
REMOTE_USER="$REMOTE_USER"
|
REMOTE_USER="$REMOTE_USER"
|
||||||
REMOTE_PASS="$REMOTE_PASS"
|
REMOTE_PASS="$REMOTE_PASS"
|
||||||
REMOTE_DIR="$REMOTE_DIR"
|
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
|
EOF
|
||||||
chmod 600 "$CONFIG_FILE"
|
chmod 600 "$CONFIG_FILE"
|
||||||
}
|
}
|
||||||
@@ -667,6 +702,9 @@ do_setup() {
|
|||||||
read -p "本地快照目录 [/var/snapshots]: " LOCAL_DIR
|
read -p "本地快照目录 [/var/snapshots]: " LOCAL_DIR
|
||||||
LOCAL_DIR=${LOCAL_DIR:-/var/snapshots}
|
LOCAL_DIR=${LOCAL_DIR:-/var/snapshots}
|
||||||
|
|
||||||
|
read -p "本地保留快照数量 [3]: " LOCAL_KEEP
|
||||||
|
LOCAL_KEEP=${LOCAL_KEEP:-3}
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
info "远程备份配置 (可选,留空跳过)"
|
info "远程备份配置 (可选,留空跳过)"
|
||||||
read -p "远程服务器 IP: " REMOTE_IP
|
read -p "远程服务器 IP: " REMOTE_IP
|
||||||
@@ -677,8 +715,10 @@ do_setup() {
|
|||||||
REMOTE_USER=${REMOTE_USER:-root}
|
REMOTE_USER=${REMOTE_USER:-root}
|
||||||
read -s -p "远程密码: " REMOTE_PASS
|
read -s -p "远程密码: " REMOTE_PASS
|
||||||
echo ""
|
echo ""
|
||||||
read -p "远程目录 [/backup/$VPS_NAME]: " REMOTE_DIR
|
read -p "远程目录 [/backup]: " REMOTE_DIR
|
||||||
REMOTE_DIR=${REMOTE_DIR:-/backup/$VPS_NAME}
|
REMOTE_DIR=${REMOTE_DIR:-/backup}
|
||||||
|
read -p "远程保留天数 [30]: " REMOTE_KEEP_DAYS
|
||||||
|
REMOTE_KEEP_DAYS=${REMOTE_KEEP_DAYS:-30}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user