Files
proxmox-snapshot-service/handbuch/docs/nachschlagen/konfiguration.md
T
duffyduckandClaude Opus 5.5 74be5aee59 Platz vor jedem Snapshot pruefen, bei Mangel alte loeschen, per Mail warnen
Volle Ceph-Pools legen alle VMs darauf lahm. Vor jedem Snapshot gilt jetzt
je Storage des Gastes: frei >= sofortiger Verbrauch + space_min_free
(Vorgabe 20 %). Die Reserve bleibt also auch nach dem Snapshot frei.

Reicht es nicht, wird der aelteste pvesnap-Snapshot des Gastes geloescht und
neu geprueft, bis es reicht. Sind nur noch die neuesten space_keep (Vorgabe
7) uebrig, entfaellt der Snapshot und der naechste Gast kommt dran.

Gezaehlt wird je Gast ueber alle Gruppen, anders als bei der Vorhaltezeit.
Auf dem Testhost haette eine Grenze je Gruppe nie gegriffen: keep_count = 5
liegt unter 7, und 13 GiB steckten in einer Gruppe, die es nicht mehr gibt.

Sofortiger Verbrauch: Dicke ZFS-Zvols muessen ihre Reservierung auch nach
dem Snapshot garantieren, das kostet alles seit dem letzten Snapshot
Geschriebene. Exakt ist das refreservation - usedbyrefreservation; die Werte
kommen per zfs get, bei anderen Nodes per ssh ueber die IP aus dem
Clusterstatus, weil Node-Namen nicht ueberall aufloesen. Dazu kommt der RAM
bei vmstate. --dry-run zeigt die Rechnung je Storage.

Ceph und ZFS geben Platz erst im Hintergrund frei. Deshalb wird nach jedem
Loeschen gewartet, solange der Platz waechst, und erst nach space_settle
(Vorgabe 30s) ohne Zuwachs weitergemacht. Ohne das wurde auf Ceph ein Snapshot
zu viel geloescht. Laesst sich der Platz nicht feststellen, wird nichts
geloescht und der Snapshot trotzdem versucht.

Neu ist [mail]: eine Alarm-Mail je Gruppe und Lauf, wenn ein Snapshot wegen
Platzmangels ausfaellt. STARTTLS oder SSL/TLS mit Zertifikatspruefung, ohne
Rueckfall auf Klartext. Einzurichten im Editor (Taste m) oder von Hand, Test
mit pvesnap mail-test. Liegt ein Passwort in der Datei, setzt der Editor die
Rechte auf 600, auch fuer die .bak.

Das Handbuch beschreibt, wie man Ceph (Ratios) und ZFS (Notreserve) frueher
"voll" sagen laesst und was im Notfall zu tun ist. Ausserdem war
"pvesnap run --dry-run" ueberall falsch: Die Option ist global und muss vor
dem Unterbefehl stehen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 10:27:21 +01:00

9.2 KiB
Raw Blame History

Alle Einstellungen

Die Datei liegt unter /etc/pvesnap/pvesnap.conf und ist eine gewöhnliche INI-Datei mit drei Arten von Abschnitten:

[global]           # gilt für alles
[defaults]         # Vorgaben für alle Gruppen (optional)
[group:NAME]       # eine Gruppe, beliebig viele davon

Nach jeder Änderung:

pvesnap check
systemctl reload pvesnap

!!! note "Zeitangaben"

Überall dasselbe Format: `30s`, `15m`, `1h`, `6h`, `2d12h`, `1w`.
`0` heißt „unbegrenzt" bzw. „keine".

!!! note "Kommentare am Zeilenende"

Hinter jedem Wert darf ein Kommentar stehen:

```ini
keep_time = 7d      # eine Woche
```

Einzige Ausnahme ist `description` — dort bleibt die Zeile unverändert,
damit ein `#` in der Beschreibung erhalten bleibt.

[global]

Schlüssel Vorgabe
prefix auto Namenspräfix aller pvesnap-Snapshots. Bestimmt zugleich, was jemals gelöscht wird — siehe Namensschema.
check_interval 60s wie oft der Dienst nach Fälligem schaut
state_file /var/lib/pvesnap/state.json merkt sich die letzten Läufe
log_level INFO DEBUG, INFO, WARNING, ERROR
log_file — zusätzliche Protokolldatei; ohne sie geht alles ins Journal
task_timeout 15m Geduld mit einem einzelnen Proxmox-Task
retries 2 zusätzliche Versuche, wenn eine Sperre belegt ist
retry_delay 60s Wartezeit vor dem nächsten Versuch
pause_between 0s Pause zwischen zwei Gästen
space_settle 30s Geduld, bis nach dem Löschen bei Platzmangel der Platz zurückkommt
run_on_start no beim Dienststart sofort einen Durchlauf machen
dry_run no yes = nichts wirklich tun, nur protokollieren
description siehe unten Standard-Beschreibung aller Snapshots
[global]
prefix = auto
check_interval = 60s
state_file = /var/lib/pvesnap/state.json
log_level = INFO
task_timeout = 15m
retries = 2
retry_delay = 60s
pause_between = 0s
run_on_start = no
dry_run = no
description = pvesnap | Gruppe: {group} | erstellt: {datetime} | Vorhaltezeit: {keep_time} | max: {keep_count}

[mail]

Meldet per Mail, wenn wegen Platzmangels ein Snapshot ausfällt. Am bequemsten im Editor: pvesnap config, Taste ++m++, dort sendet ++t++ eine Test-Mail. Von der Kommandozeile geht das mit pvesnap mail-test.

[mail]
enabled = yes
server = mail.example.org
security = starttls
user = pvesnap@example.org
password = geheim
sender = pvesnap@example.org
recipients = admin@example.org, technik@example.org
Schlüssel Vorgabe
enabled no Alarm einschalten
server — SMTP-Server
security starttls starttls (TLS nach dem Verbinden), ssl (SSL/TLS von Anfang an) oder none
port passend zu security 587, 465 bzw. 25
tls_verify yes Zertifikat des Servers prüfen; no nur bei selbstsignierten Zertifikaten
user, password — Anmeldung; ohne user wird nicht angemeldet
sender — Absender
recipients — Empfänger, mehrere mit Komma
  • Bietet der Server kein STARTTLS an, schlägt der Versand fehl. Auf Klartext ausgewichen wird nie.
  • Eine Anmeldung mit security = none lehnt pvesnap check ab, weil das Passwort sonst im Klartext übertragen würde.
  • Das Passwort steht im Klartext in der Datei. Der Editor setzt beim Speichern die Rechte 600; wer von Hand einträgt, macht das selbst. pvesnap check warnt, wenn jeder die Datei lesen darf.
  • Je Gruppe und Lauf geht höchstens eine Mail heraus, in der alle betroffenen Gäste stehen. Bleibt das Problem bestehen, kommt sie bei jedem Lauf erneut.
  • Scheitert der Versand, steht das im Protokoll. Die Snapshots laufen weiter.

[defaults]

Vorgaben für alle Gruppen. Jede Gruppe darf sie einzeln überschreiben.

[defaults]
enabled = yes
skip_stopped = no
vmstate = no

Erlaubt sind hier dieselben Schlüssel wie in einer Gruppe.

!!! warning "Der Editor löst [defaults] auf"

Beim Speichern im [ncurses-Editor](../sichern/editor.md) verschwindet der
Abschnitt — die Werte stehen danach in jeder Gruppe einzeln. Inhaltlich
ändert sich nichts.

[group:NAME]

Allgemein

Schlüssel Vorgabe
enabled yes Gruppe aktiv. In der Auslieferung stehen alle auf no.

Zeitplan

Entweder interval oder schedule — nicht beides.

Schlüssel Vorgabe
interval — 30m, 1h, 6h, 2d12h, 1w
align no yes = an der Uhr ausgerichtet (00:00, 00:30 …)
schedule — hourly, daily, weekly, monthly, yearly
at — Uhrzeit HH:MM bei daily und größer
minute 0 Minute bei hourly
day_of_week mo mo di mi do fr sa so bei weekly
day_of_month 1 1–31 bei monthly; zu große Werte fallen auf den Monatsletzten
month 1 1–12 bei yearly

Einzelheiten unter Zeitpläne.

Vorhaltezeit

Schlüssel Vorgabe
keep_count 0 höchstens so viele je VM und Gruppe (0 = unbegrenzt)
keep_time 0 nichts älter als (0 = unbegrenzt)
keep_min 0 so viele bleiben in jedem Fall stehen
space_min_free 20% so viel muss vor dem Snapshot frei sein, auch absolut (20G); 0 = keine Prüfung
space_keep 7 so viele bleiben je VM auch bei Platzmangel stehen, über alle Gruppen gezählt

Mindestens eine von keep_count und keep_time muss gesetzt sein. Einzelheiten unter Vorhaltezeit und Platz vor dem Snapshot.

Auswahl der Gäste

Schlüssel Vorgabe
all no alle VMs und Container
vmids — 100,101,105-110
names — web-*, db-0? — mit *, ?, [abc]
tags — produktion, wichtig
pools — Kunden
types — qemu oder lxc; leer = beides
exclude_vmids —
exclude_names —
exclude_tags —

Einschlüsse wirken als ODER, Ausschlüsse gewinnen immer. Einzelheiten unter Welche Gäste?.

Snapshot-Optionen

Schlüssel Vorgabe
vmstate no Arbeitsspeicher mitsichern — nur QEMU, nur bei laufender VM
skip_stopped no gestoppte Gäste überspringen
description aus [global] eigene Beschreibung für diese Gruppe

Platzhalter der Beschreibung

{group} Name der Gruppe täglich
{group_slug} Kurzname im Snapshot taeglich
{vmid} VMID 101
{name} Name des Gastes db01
{type} VM oder LXC VM
{node} Cluster-Knoten pve1
{pool} Proxmox-Pool Hausnetz
{tags} Tags des Gastes produktion,datenbank
{date} Datum 2026-08-09
{time} Uhrzeit 02:30:00
{datetime} beides 2026-08-09 02:30:00
{timestamp} Unix-Zeit 1786257000
{keep_time} Vorhaltezeit der Gruppe 3w
{keep_count} Anzahl 14
{schedule} Zeitplan im Klartext täglich um 02:30

Ein unbekannter Platzhalter führt nicht zum Abbruch — dann wird eine Ersatzbeschreibung eingesetzt.


Deutsche Schreibweisen

Damit die Datei lesbar bleibt, versteht pvesnap eine Reihe deutscher Synonyme:

deutsch entspricht
aktiv, aktiviert enabled
intervall interval
zeitplan schedule
uhrzeit, zeit at
wochentag day_of_week
monatstag day_of_month
monat month
anzahl, max_anzahl, behalte_anzahl keep_count
vorhaltezeit, behalte_zeit, max_alter keep_time
mindestens keep_min
mindestens_frei space_min_free
verschluesselung security
benutzer user
passwort password
absender sender
empfaenger recipients
platzmangel_behalten space_keep
alle all
namen names
typen types
beschreibung description
ausschluss_vmids exclude_vmids
ausschluss_namen exclude_names
gestoppte_ueberspringen skip_stopped

Bindestriche und Unterstriche sind austauschbar, Groß- und Kleinschreibung egal.


Eine vollständige Beispieldatei

[global]
prefix = auto
check_interval = 60s
state_file = /var/lib/pvesnap/state.json
log_level = INFO
task_timeout = 15m
retries = 2
retry_delay = 60s
pause_between = 0s
run_on_start = no
dry_run = no
description = pvesnap | Gruppe: {group} | erstellt: {datetime} | Vorhaltezeit: {keep_time} | max: {keep_count}

[defaults]
enabled = yes
skip_stopped = no
vmstate = no

[group:stuendlich]
interval = 1h
align = yes
keep_count = 24
keep_time = 2d
keep_min = 1
tags = stuendlich
skip_stopped = yes

[group:taeglich]
schedule = daily
at = 02:30
keep_count = 14
keep_time = 21d
keep_min = 1
tags = produktion
exclude_tags = nosnap

[group:monatlich]
schedule = monthly
day_of_month = 1
at = 04:00
keep_count = 6
keep_time = 400d
all = yes
exclude_tags = nosnap, pvesnap-recovery
description = Monatssicherung {name} ({vmid}) vom {date}