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>
128 lines
4.3 KiB
Plaintext
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}
|