[[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]]