Files
proxmox-snapshot-service/config/pvesnap.conf.example
T
duffyduckandClaude Opus 5 e9aeaf9e62 Snapshot-Laeufe gegen cfs-Sperren des Storages absichern
Auf einem echten Host schlugen Snapshots reihenweise mit
"cfs-lock 'storage-NAME' error: got lock request timeout" fehl.

Ursache: 'pvesh create .../snapshot' lief mit dem allgemeinen
Kommando-Zeitlimit von 60s. Genau so lange wartet Proxmox aber auf den
Storage-Lock. Lief der Aufruf in unser Zeitlimit, ging es mit der naechsten
VM weiter, waehrend der Task noch lief - und die naechste VM scheiterte
dann an derselben Sperre. Eine VM konnte so einen ganzen Lauf umwerfen.

* Snapshot-Aktionen laufen jetzt mit dem langen task_timeout statt mit dem
  kurzen Zeitlimit fuer Lesezugriffe.
* Ohne UPID in der Antwort wird ersatzweise gewartet, bis der Gast nicht
  mehr gesperrt ist, statt sofort weiterzumachen.
* Sperr-Fehler gelten als voruebergehend und werden 'retries'-mal mit
  'retry_delay' Abstand wiederholt; echte Fehler wie "storage does not
  support snapshots" nicht.
* Neu: 'pause_between' fuer eine Pause zwischen zwei Gaesten.

Ausserdem: Kommentare hinter einem Wert ("retries = 2  # ...") wurden nicht
abgeschnitten und machten die Konfiguration ungueltig - das eigene
Beispiel war davon betroffen. 'description' bleibt bewusst unangetastet,
damit ein '#' in der Beschreibung erhalten bleibt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 01:54:59 +02:00

128 lines
4.3 KiB
Plaintext

# =====================================================================
# pvesnap - Konfiguration
# =====================================================================
#
# Nach jeder Aenderung: systemctl reload pvesnap
# Pruefen: pvesnap check
# Komfortabel bearbeiten: pvesnap config (ncurses-Editor)
#
# Zeitangaben ueberall: 30m 1h 6h 2d12h 1w (0 = unbegrenzt)
# ---------------------------------------------------------------------
[global]
# Praefix aller von pvesnap angelegten Snapshots. Nur Snapshots, die mit
# diesem Praefix beginnen, werden jemals automatisch geloescht - von Hand
# angelegte Snapshots bleiben also garantiert unangetastet.
# Namensschema: <prefix>-<gruppe>-<JJJJMMTT>-<HHMMSS>
prefix = auto
# Wie oft der Dienst prueft, ob eine Gruppe faellig ist.
check_interval = 60s
# Merkt sich, wann welche Gruppe zuletzt gelaufen ist.
state_file = /var/lib/pvesnap/state.json
log_level = INFO
# log_file = /var/log/pvesnap.log
# Maximale Wartezeit auf einen einzelnen Snapshot-Task in Proxmox.
task_timeout = 15m
# Proxmox sperrt beim Anlegen eines Snapshots kurz das Storage
# ("cfs-lock 'storage-NAME'"). Ist es gerade belegt, laeuft der Task nach 60s
# in "got lock request timeout". Solche Faelle sind voruebergehend - pvesnap
# versucht es dann noch einmal:
retries = 2 # zusaetzliche Versuche je Snapshot
retry_delay = 60s # Wartezeit vor dem naechsten Versuch
# Pause zwischen zwei Gaesten. Bei vielen VMs auf demselben Storage nimmt das
# Druck vom Storage-Lock; 0 = ohne Pause.
pause_between = 0s
# yes = beim Dienststart sofort einen Durchlauf machen,
# no = auf den naechsten regulaeren Termin warten.
run_on_start = no
# yes = nichts wirklich anlegen/loeschen, nur protokollieren.
dry_run = no
# Hinweis: Hinter jedem Wert darf ein Kommentar stehen ("keep_time = 7d # …").
# Einzige Ausnahme ist "description" - dort bleibt die Zeile unveraendert
# stehen, damit ein '#' in der Beschreibung erhalten bleibt.
#
# Beschreibung, die an jedem Snapshot haengt (in der Proxmox-Oberflaeche
# sichtbar). Platzhalter:
# {group} {group_slug} {vmid} {name} {node} {type} {pool} {tags}
# {date} {time} {datetime} {timestamp} {keep_time} {keep_count} {schedule}
description = pvesnap | Gruppe: {group} | erstellt: {datetime} | Vorhaltezeit: {keep_time} | max: {keep_count}
# ---------------------------------------------------------------------
# [defaults] gilt als Vorgabe fuer *alle* Gruppen und kann in jeder
# Gruppe einzeln ueberschrieben werden.
# ---------------------------------------------------------------------
[defaults]
enabled = yes
skip_stopped = no
vmstate = no
# ---------------------------------------------------------------------
# Gruppen - beliebig viele, Abschnittsname: [group:NAME]
# ---------------------------------------------------------------------
#
# Zeitplan (entweder ... oder):
# interval = 30m alle 30 Minuten
# align = yes an der Uhr ausrichten (00:00, 00:30, 01:00 ...)
# oder
# schedule = hourly + minute = 15
# schedule = daily + at = 02:30
# schedule = weekly + at = 03:00, day_of_week = so
# schedule = monthly + at = 04:00, day_of_month = 1
# schedule = yearly + at = 04:00, day_of_month = 1, month = 1
#
# Vorhaltezeit (beides kombinierbar, 0 = unbegrenzt):
# keep_count = 24 hoechstens 24 Snapshots je VM
# keep_time = 7d nichts aelter als 7 Tage
# keep_min = 1 so viele bleiben immer stehen
#
# Auswahl der Gaeste (alles kombinierbar, wirkt als ODER):
# all = yes
# vmids = 100,101,105-110
# names = web-*, db-*
# tags = prod, wichtig
# pools = Kunden
# types = qemu (oder lxc; leer = beides)
# exclude_vmids = 999
# exclude_names = *-test
# exclude_tags = nosnap
# ---------------------------------------------------------------------
[group:stuendlich]
enabled = no
interval = 1h
align = yes
keep_count = 24
keep_time = 2d
tags = stuendlich
skip_stopped = yes
[group:taeglich]
enabled = no
schedule = daily
at = 02:30
keep_count = 14
keep_time = 21d
names = web-*, db-*
[group:monatlich]
enabled = no
schedule = monthly
day_of_month = 1
at = 04:00
keep_count = 6
keep_time = 400d
all = yes
exclude_tags = nosnap
description = Monatssicherung {name} ({vmid}) vom {date}