- 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
66 lines
2.2 KiB
Bash
Executable File
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
|