restore.sh aktualisiert

main
sebastian.serfling 2026-03-18 11:56:33 +00:00
parent b8f2b02612
commit f1f23b154b
1 changed files with 27 additions and 11 deletions

View File

@ -2,7 +2,7 @@
# ============================================================================= # =============================================================================
# /opt/windmill-restore/restore.sh # /opt/windmill-restore/restore.sh
# Windmill Backup Restore Worker # Windmill Backup Restore Worker
# Version: 1.0.14 # Version: 1.0.15
# #
# Unterstützt sowohl VM (qm) als auch CT (pct) Backups. # Unterstützt sowohl VM (qm) als auch CT (pct) Backups.
# Backup-Typ wird automatisch aus dem Backup-Pfad erkannt (vm/ oder ct/). # Backup-Typ wird automatisch aus dem Backup-Pfad erkannt (vm/ oder ct/).
@ -289,22 +289,38 @@ for i in range(1000, 2000):
echo " Restore-ID: $VM_ID_RESTORED" echo " Restore-ID: $VM_ID_RESTORED"
# ═════════════════════════════════════════════════════════════════════════════ # ═════════════════════════════════════════════════════════════════════════════
# [2.5/13] CONFIG-ONLY CHECK # [2.5/13] CONFIG-CHECK
# Config-only Restore um VM-Name zu ermitteln und zu prüfen ob ZIP bereits # Config direkt aus PBS-Backup lesen (kein Restore nötig) um VM-Name zu
# auf dem Backup-Server existiert → bei Fund: Restore überspringen # ermitteln und zu prüfen ob ZIP bereits auf dem Backup-Server existiert.
# ═════════════════════════════════════════════════════════════════════════════ # ═════════════════════════════════════════════════════════════════════════════
echo "" echo ""
echo "==> [2.5/13] Config-only Restore zum Prüfen..." echo "==> [2.5/13] Config aus PBS-Backup lesen..."
CONFIG_VM_NAME="" CONFIG_VM_NAME=""
CONFIG_TMP="/tmp/pbs_config_${VM_ID_ORIGINAL}_$$.conf"
# proxmox-backup-client restore holt nur die Config-Datei aus dem Backup
# SNAPSHOT_PATH Format: "vm/100/2024-01-15T02:00:00Z"
# Config-Datei im Backup heißt "vm.conf" oder "pct.conf"
if [[ "$BACKUP_TYPE" == "ct" ]]; then if [[ "$BACKUP_TYPE" == "ct" ]]; then
pct restore "$VM_ID_RESTORED" "$PVE_BACKUP_REF" --storage "$RESTORE_PATH" --config-only 1 2>/dev/null || true CONF_FILE_IN_BACKUP="pct.conf"
CONFIG_VM_NAME=$(grep -m1 "^hostname:" /etc/pve/lxc/${VM_ID_RESTORED}.conf 2>/dev/null | awk -F': ' '{print $2}' | tr -d '[:space:]' || echo "") NAME_KEY="^hostname:"
pct destroy "$VM_ID_RESTORED" --purge 1 2>/dev/null || true
else else
qmrestore "$PVE_BACKUP_REF" "$VM_ID_RESTORED" --storage "$RESTORE_PATH" --config-only 1 2>/dev/null || true CONF_FILE_IN_BACKUP="vm.conf"
CONFIG_VM_NAME=$(grep -m1 "^name:" /etc/pve/qemu-server/${VM_ID_RESTORED}.conf 2>/dev/null | awk -F': ' '{print $2}' | tr -d '[:space:]' || echo "") NAME_KEY="^name:"
qm destroy "$VM_ID_RESTORED" --purge 1 2>/dev/null || true fi
export PBS_PASSWORD
export PBS_REPOSITORY="${PBS_USER}@${PBS_HOST}:${DATASTORE}"
proxmox-backup-client restore "${BACKUP_TYPE}/${VM_ID_ORIGINAL}/$(echo "$SNAPSHOT_PATH" | cut -d/ -f3)" "$CONF_FILE_IN_BACKUP" "$CONFIG_TMP" 2>/dev/null || true
if [[ -f "$CONFIG_TMP" ]]; then
CONFIG_VM_NAME=$(grep -m1 "$NAME_KEY" "$CONFIG_TMP" 2>/dev/null | awk -F': ' '{print $2}' | tr -d '[:space:]' || echo "")
rm -f "$CONFIG_TMP"
echo " VM-Name aus Config: ${CONFIG_VM_NAME:-unbekannt}"
else
echo " Config nicht lesbar überspringe ZIP-Check."
fi fi
echo " VM-Name aus Config: ${CONFIG_VM_NAME:-unbekannt}" echo " VM-Name aus Config: ${CONFIG_VM_NAME:-unbekannt}"