[[Uebersicht|← Zurück zur Homepage]] # snapshot_weekly.sh – Wöchentliche Snapshot-Rotation **Version:** 1.0 **Datum:** 2026-07-07, 11:00 Uhr **Erstellt:** mit Claude.ai --- ## Übersicht | Eigenschaft | Wert | | ----------- | ------------------------------------------ | | Pfad | `/usr/local/bin/snapshot_weekly.sh` | | Aufruf | `bash /usr/local/bin/snapshot_weekly.sh` | | Log-Datei | `/var/log/snapshot_weekly.log` | | Cronjob | `0 2 * * 0` (sonntags 02:00 Uhr) | | Snapshot-Name | `Stand` | | HA-Ausschluss | automatisch, siehe [[03 Promox Update Script\|Update Script]] | ## Beschreibung Rotiert wöchentlich einen einzelnen Snapshot namens `Stand` auf allen VMs und LXC-Containern außer Home Assistant. Home Assistant hat einen eigenen, stündlichen Job: [[05 VM109-Auto-Snapshot|VM109-Auto-Snapshot]]. ## Ablauf 1. **Home Assistant ermitteln:** iteriert über alle laufenden VMs (`qm list`) und prüft per `qm guest exec <vmid> -- ha core info`, ob `version:` in der Ausgabe steht. Die gefundene VM-ID wird von der Rotation ausgeschlossen. 2. **Für jede übrige VM/LXC:** - ältesten vorhandenen Snapshot ermitteln (`qm listsnapshot` / `pct listsnapshot`, erste Zeile ohne `current`-Marker) und löschen - danach neuen Snapshot mit Namen `Stand` anlegen 3. Fehler (z. B. gesperrte VM durch gleichzeitiges Backup) werden protokolliert, brechen den Lauf aber nicht ab — die restlichen Gäste werden trotzdem abgearbeitet. ## Source Code ```bash #!/bin/bash # /usr/local/bin/snapshot_weekly.sh # Woechentliche Snapshot-Rotation fuer alle Gaeste ausser Home Assistant # (Home Assistant hat einen eigenen stuendlichen Job: vm109_snapshot.sh) # Aufruf: bash /usr/local/bin/snapshot_weekly.sh PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SNAP_NAME="Stand" echo "=== $(date '+%Y-%m-%d %H:%M:%S') Start woechentliche Snapshot-Rotation ===" # Home Assistant VM dynamisch ermitteln und ausschliessen HA_VMID="" while read -r VMID VMSTATUS; do [ "$VMSTATUS" != "running" ] && continue if qm guest exec "$VMID" -- ha core info 2>/dev/null | grep -q 'version:'; then HA_VMID="$VMID" break fi done < <(qm list | awk 'NR>1 {print $1, $3}') snapshot_guest() { LIST_CMD="$1"; SNAP_CMD="$2"; DEL_CMD="$3"; VMID="$4"; NAME="$5" OLDEST=$($LIST_CMD "$VMID" | awk '$2!="current"{print $2; exit}') if [ -n "$OLDEST" ]; then echo " $VMID ($NAME): loesche aeltesten Snapshot '$OLDEST'" $DEL_CMD "$VMID" "$OLDEST" || echo " FEHLER: Snapshot '$OLDEST' auf $VMID konnte nicht geloescht werden" fi echo " $VMID ($NAME): erstelle neuen Snapshot '$SNAP_NAME'" $SNAP_CMD "$VMID" "$SNAP_NAME" --description "Woechentlicher Snapshot $(date '+%Y-%m-%d')" \ || echo " FEHLER: Snapshot '$SNAP_NAME' auf $VMID konnte nicht erstellt werden" } while read -r VMID VMNAME; do [ "$VMID" = "$HA_VMID" ] && continue snapshot_guest "qm listsnapshot" "qm snapshot" "qm delsnapshot" "$VMID" "$VMNAME" done < <(qm list | awk 'NR>1 {print $1, $2}') while read -r CTID CTNAME; do snapshot_guest "pct listsnapshot" "pct snapshot" "pct delsnapshot" "$CTID" "$CTNAME" done < <(pct list | awk 'NR>1 {print $1, $3}') echo "=== $(date '+%Y-%m-%d %H:%M:%S') Ende woechentliche Snapshot-Rotation ===" ``` --- ## Einrichtung ```bash # 1. Script anlegen nano /usr/local/bin/snapshot_weekly.sh # 2. Ausführbar machen chmod +x /usr/local/bin/snapshot_weekly.sh # 3. Cronjob (als root auf Proxmox-Host) crontab -e ``` Cronjob-Eintrag: ``` 0 2 * * 0 /usr/local/bin/snapshot_weekly.sh >> /var/log/snapshot_weekly.log 2>&1 ``` --- ## Letzter Lauf (Testlauf 2026-07-07) | Gast | Ergebnis | |---|---| | 104 (tor-snowflake) | alter `Stand` gelöscht, neuer `Stand` erstellt | | 105 (zigbee2mqtt) | alter `Stand` gelöscht, neuer `Stand` erstellt | | 108 (ghost-blog) | alter `Stand` gelöscht, neuer `Stand` erstellt | | 103 (w11) | fehlgeschlagen: `VM is locked (backup)` — zeitgleich lief ein manueller vzdump-Backup, alter Snapshot blieb unangetastet erhalten. Kein Konflikt im Regelbetrieb, da Cronjob (So 02:00) nicht mit dem Backup-Zeitplan (06/12/18 Uhr) überschneidet. | | 109 (haproxmox/Home Assistant) | korrekt ausgeschlossen (eigener Job) | --- ## Abhängigkeiten - `qm` (Proxmox QEMU CLI) - `pct` (Proxmox LXC CLI) - QEMU-Guest-Agent auf der Home-Assistant-VM (für die HA-Erkennung per `ha core info`) --- [[Hinweise/Impressum|Impressum]] | [[Hinweise/Datenschutzerklärung|Datenschutz]]