Files
proxmox/scripts/maintenance/proxmox-backup-all-running-ct.sh
defiQUG b8613905bd
Some checks failed
Deploy to Phoenix / validate (push) Failing after 15s
Deploy to Phoenix / deploy (push) Has been skipped
chore: sync workspace — configs, docs, scripts, CI, pnpm, submodules
- Submodule pins: dbis_core, cross-chain-pmm-lps, mcp-proxmox (local, push may be pending), metamask-integration, smom-dbis-138
- Atomic swap + cross-chain-pmm-lops-publish, deploy-portal workflow, phoenix deploy-targets, routing/aggregator matrices
- Docs, token-lists, forge proxy, phoenix API, runbooks, verify scripts

Made-with: Cursor
2026-04-21 22:01:33 -07:00

66 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Fleet vzdump of all *running* LXC on a Proxmox node (intended: r630-01 via cron).
# - Uses zstd (faster / often better than gzip for this workload; extension .tar.zst).
# - Retention: do NOT use rough mtime deletes here — keep /etc/cron.d/vzdump-prune-local
# (prune-proxmox-vzdump-dump.sh keep=2) as the cap on /var/lib/vz/dump.
# Install (from repo, r630-01):
# scp scripts/maintenance/proxmox-backup-all-running-ct.sh root@192.168.11.11:/usr/local/bin/proxmox-backup.sh
# ssh root@192.168.11.11 'chmod 755 /usr/local/bin/proxmox-backup.sh'
# Cron (root on r630-01, single daily run with lock):
# 0 2 * * * /usr/bin/flock -n /var/lock/proxmox-backup.lock /usr/local/bin/proxmox-backup.sh
# To skip a few very large VMIDs (space-separated) on that run only, use:
# VZDUMP_SKIP_VMIDS="2101 2500" /usr/local/bin/proxmox-backup.sh
# Or: VZDUMP_COMPRESS=gzip if you must match legacy .tar.gz (not recommended).
#
set -euo pipefail
BACKUP_STORAGE="${BACKUP_STORAGE:-local}"
LOG_DIR="${LOG_DIR:-/var/log/proxmox-backups}"
LOG_FILE="${LOG_DIR}/backup_$(date +%Y%m%d).log"
COMPRESS="${VZDUMP_COMPRESS:-zstd}"
# Space-separated VMIDs to skip (e.g. test CTs)
SKIP_VMIDS="${VZDUMP_SKIP_VMIDS:-}"
mkdir -p "$LOG_DIR"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"; }
is_skipped() {
local v="$1"
for s in $SKIP_VMIDS; do [[ "$v" == "$s" ]] && return 0; done
return 1
}
log "Starting backup job (compress=$COMPRESS storage=$BACKUP_STORAGE)..."
mapfile -t vmids < <(pct list 2>/dev/null | awk 'NR>1 && $2=="running" {print $1}')
if ((${#vmids[@]} == 0)); then
log "No running containers."
exit 0
fi
log "VMIDs: ${vmids[*]}"
ok=0
fail=0
for vmid in "${vmids[@]}"; do
is_skipped "$vmid" && { log "SKIP $vmid (VZDUMP_SKIP_VMIDS)"; continue; }
log "vzdump $vmid..."
if command -v ionice >/dev/null 2>&1; then
run=(nice ionice -c2 -n7 vzdump)
else
run=(nice vzdump)
fi
if "${run[@]}" "$vmid" --storage "$BACKUP_STORAGE" --compress "$COMPRESS" --mode snapshot --quiet; then
log "OK $vmid"
ok=$((ok + 1))
else
log "FAIL $vmid (non-zero exit)"
fail=$((fail + 1))
fi
done
log "Done. success=$ok fail=$fail. Retention: /usr/local/sbin/prune-proxmox-vzdump-dump.sh (weekly cron)."
exit 0