oggy01

Script LXC löschen und aktuelles Backup zurückspielen

gelöstFrageProxmox
Hallo,
ich habe ein Backup-Proxmox-Server und möchte dort in unregelmäßigen Abständen gewisse LXCs löschen und ein aktuelles Backup zurückspielen.

Das Löschen funktioniert, nur beim Wiederherstellen gibt es eine Fehlermeldung.

Hier das Script.
#!/bin/bash

# Name oder ID des Containers, den du löschen möchtest
CONTAINER_ID=205

# Container stoppen, falls er läuft
pct stop $CONTAINER_ID

# Container löschen
pct destroy $CONTAINER_ID

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich gelöscht."  

# Variablen anpassen
BACKUP_NAME=vzdump-lxc-205-2025_05_25-21_44_29.tar.zst
STORAGE_ID=local-lvm
VM_ID=205

# Backup wiederherstellen
proxmox-backup-client restore $STORAGE_ID:$BACKUP_NAME /mnt/pve/pmoxbackup/dump/$VM_ID --vmid $VM_ID --force

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich zurückgespielt."  

Hier die Fehlermeldung.
Error: parameter verification failed:
- 'force': missing parameter value.
- 'target': missing argument
Usage: proxmox-backup-client restore <snapshot> <archive-name> <target> [OPTIONS]
...

Kann man dazu das so anpassen, dass für den entsprechenden LXC automatisch das Backup mit dem neueren Datum genommen wird?

Danke.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 673026

Url: https://administrator.de/forum/script-lxc-loeschen-und-aktuelles-backup-zurueckspielen-673026.html

Ausgedruckt am: 22.06.2025 um 13:06 Uhr

shebang
shebang 26.05.2025 aktualisiert um 06:33:14 Uhr
Goto Top
Tach,

force
finde ich nicht in der Doku.

target
target path for restore on local filesystem.

local-lvm
??

Doku lesen.
pbs.proxmox.com/docs/proxmox-backup-client/man1.html

Gruß
Oggy01
Oggy01 26.05.2025 um 08:19:33 Uhr
Goto Top
"local-lvm" Dort liegen die CTs/VMs also der Zielpfad.
clipboard-image
Oggy01
Oggy01 26.05.2025 um 11:38:23 Uhr
Goto Top
Das Skript läuft nun durch, kann man das noch so anpassen, dass automatisch für den jeweiligen LCX immer automatisch das neuste Backup genommen wird?

#!/bin/bash

# Name oder ID des Containers, der gelöscht werden soll
CONTAINER_ID=205

# Container stoppen, falls er läuft
pct stop $CONTAINER_ID

# Container löschen
pct destroy $CONTAINER_ID

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich gelöscht."  

# Variablen anpassen
BACKUP_NAME="vzdump-lxc-205-2025_05_25-21_44_29.tar.zst"  
STORAGE_ID="local-lvm"  
VM_ID=205

# Backup wiederherstellen
pct restore $VM_ID /mnt/pve/pmoxbackup/dump/$BACKUP_NAME --storage $STORAGE_ID

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich zurückgespielt."  
pebcak7123
pebcak7123 26.05.2025 um 16:10:51 Uhr
Goto Top
Moin würde ich so machen
BACKUP_DIR="/mnt/pve/pmoxbackup/dump"  
BACKUP_NAME=$(ls -t $BACKUP_DIR/vzdump-lxc-205-*.tar.zst | head -n 1)
Oggy01
Oggy01 26.05.2025 um 16:20:49 Uhr
Goto Top
Aktuell habe ich das so...
#!/bin/bash

# Name oder ID des Containers, den du löschen möchtest
CONTAINER_ID=205

# Container stoppen, falls er läuft
pct stop $CONTAINER_ID

# Container löschen
pct destroy $CONTAINER_ID

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich gelöscht."  

# Variablen anpassen
VM_ID="$CONTAINER_ID"  
STORAGE_PFAD="/mnt/pve/pmoxbackup/dump/"  
BACKUP_NAME="vzdump-lxc-$CONTAINER_ID-*.tar.zst"  
STORAGE_ID="local-lvm"  

# Backup wiederherstellen
pct restore $VM_ID $STORAGE_PFAD$BACKUP_NAME --storage $STORAGE_ID

echo "Der Container mit der ID $CONTAINER_ID wurde erfolgreich zurückgespielt."  

Das funktioniert aber nur solange, wie es pro LXC nur 1 Backup im Backup Verzeichnis gibt. Möchte man jedoch zwei oder mehr Backups, pro LXC, aufbewahren, dann funktioniert es nicht mehr.
Oggy01
Lösung Oggy01 29.05.2025, aktualisiert am 31.05.2025 um 00:00:31 Uhr
Goto Top
So, habe das Problem für die LXCs gelöst, für die VMs werde ich das die Tage anpassen.

Hier das Script, welches nur bei den LXCs funktioniert, es sucht das neuste Backup und spielt das zurück.
Man kann auch angeben, ob der LXC nach der erfolgreichen Wiederherstellung gestartet werden soll oder nicht.
Natürlich ist das Script auf mein System angepasst, es muss von jeden selbst konfiguriert werden. Dieses Script sollte erst auf einer Testumgebung angepasst werden. Die Verwendung geschieht auf eigene Gefahr, ich übernehme für Datenverluste keine Haftung.

EDIT: Das Script nimmt ab jetzt nur Veränderungen vor, wenn ein Backup gefunden wird.
EDIT: Optimierungen und die Option...
# LXC beim Booten automatisch starten, 0=deaktiviert 1=aktiviert
pct set $LXC_ID -onboot 0

hinzugefügt.

Diese Punkte müssen angepasst werden
# LXC ID, welcher gelöscht und wiederhergestellt werden soll
LXC_ID=


# Variablen anpassen
STORAGE_PFAD=
BACKUP_NAME=
STORAGE_ID=


# LXC nach der Wiederherstellung starten
#pct start $LXC_ID


Nur die gerade aufzeigten Punkte anpassen.

#!/bin/bash

# LXC ID, welcher gelöscht und wiederhergestellt werden soll
LXC_ID=205

# Variablen anpassen
LXC_ID="$LXC_ID"  
STORAGE_PFAD="/mnt/pve/pmoxbackup/dump/"  
BACKUP_NAME="vzdump-lxc-$LXC_ID-*.tar.zst"  
LATEST_BACKUP="$latest_backup"  
STORAGE_ID="local-lvm"  

# Das neueste Backup finden
latest_backup=$(ls -t $STORAGE_PFAD$BACKUP_NAME | head -n 1)

if [ -z "$latest_backup" ]; then  
  echo "Kein Backup gefunden!"  
  echo "Die Wiederherstellung für den LXC $LXC_ID ist fehlgeschlagen, es wurden keine Änderungen vorgenommen."  
  exit
fi

echo "Das neueste Backup ist: $latest_backup"  

# LXC stoppen, falls er läuft
pct stop $LXC_ID

# LXC löschen
pct destroy $LXC_ID

# Prüfen, ob der Container existiert
if pct status $LXC_ID > /dev/null 2>&1; then
    echo "Der LXC $LXC_ID, wurde nicht gelöscht."  
    # Prüfen, ob der Container läuft
    STATUS=$(pct status $LXC_ID | awk '{print $2}')  
    if [ "$STATUS" = "running" ]; then  
        echo "Der LXC $LXC_ID läuft."  
    else
        echo "Der LXC $LXC_ID wurde beendet."  
    fi
else
    echo "Der LXC, mit der ID $LXC_ID, wurde erfolgreich gelöscht."  
fi

# Backup wiederherstellen
pct restore $LXC_ID $latest_backup --storage $STORAGE_ID

# LXC beim Booten automatisch starten, 0=deaktiviert 1=aktiviert
pct set $LXC_ID -onboot 0

#LXC nach der Wiederherstellung starten
#pct start $LXC_ID

# Prüfen, ob der Container existiert
if pct status $LXC_ID > /dev/null 2>&1; then
    echo "Das neuste Backup für den LXC $LXC_ID, wurde erfolgreich wiederhergestellt."  
    # Prüfen, ob der Container läuft
    STATUS=$(pct status $LXC_ID | awk '{print $2}')  
    if [ "$STATUS" = "running" ]; then  
        echo "Der LXC $LXC_ID wurde gestartet."  
    else
        echo "Der LXC $LXC_ID wurde nicht gestartet."  
    fi
else
    echo "Die Wiederherstellung für den LXC $LXC_ID ist fehlgeschlagen."  
fi
Oggy01
Lösung Oggy01 31.05.2025 um 00:04:47 Uhr
Goto Top
Hier das Script, welches nur die VMs funktioniert, es Einstellungen der Variablen usw. ist wie beim LXC Script.

#!/bin/bash

# VM ID, welche gelöscht und wiederhergestellt werden soll
QM_ID=102

# Variablen anpassen
VM_ID="$QM_ID"  
STORAGE_PFAD="/mnt/pve/pmoxbackup/dump/"  
BACKUP_NAME="vzdump-qemu-$QM_ID-*.vma.zst"  
LATEST_BACKUP="$latest_backup"  
STORAGE_ID="local-lvm"  

# Verzeichnis, in dem die Backups liegen
backup_dir="$STORAGE_PFAD"  

# Das neueste Backup finden
latest_backup=$(ls -t "$STORAGE_PFAD"$BACKUP_NAME | head -n 1)  

if [ -z "$latest_backup" ]; then  
  echo "Kein Backup gefunden!"  
  echo "Die Wiederherstellung für die VM $QM_ID ist fehlgeschlagen, es wurden keine Änderungen vorgenommen."  
  exit 1
fi

echo "Das neueste Backup ist: $latest_backup"  

# VM stoppen, falls diese läuft
qm stop $QM_ID

# VM löschen
qm destroy $QM_ID

# Prüfen, ob die VM existiert
if [ -f "/etc/pve/qemu-server/${QM_ID}.conf" ]; then  
  echo "VM ${QM_ID} konnte nicht gelöscht werden."  

  # Überprüfen, ob die VM läuft
  if qm status ${QM_ID} | grep -q "Running"; then  
    echo "VM ${QM_ID} läuft."  
  else
    echo "VM ${QM_ID} wurde beendet."  
  fi

else
  echo "VM ${QM_ID} wurde erfolgreich gelöscht."  
fi

# Backup wiederherstellen
qmrestore $latest_backup $QM_ID --storage $STORAGE_ID

# VM beim Booten automatisch starten, 0=deaktiviert 1=aktiviert
qm set 102 -onboot 0

#VM nach der Wiederherstellung starten
#qm start $VM_ID

# Prüfen, ob die VM existiert
if [ -f "/etc/pve/qemu-server/${QM_ID}.conf" ]; then  
  echo "Das Backup für die VM, mit der ID $QM_ID, wurde erfolgreich wiederhergestellt"  

  # Überprüfen, ob die VM läuft
  if qm status $QM_ID | grep -q "Running"; then  
    echo "VM ${QM_ID} wurde gestartet."  
  else
    echo "VM ${QM_ID} wurde nicht gestartet."  
  fi

else
  echo "Die Wiederherstellung für die VM, mit der ID $QM_ID, ist fehlgeschlagen."  
fi