Zwei Luecken, die seit dem Umbau offenstanden.
1. Transfer-Laufwerke waren aus dem Explorer nicht erreichbar
F2 zeigte nur die Dateisysteme des Snapshots. Jetzt stehen die
Transfer-Laufwerke in derselben Liste - aus Sicht des Bedieners ist es
dieselbe Frage ("wo soll ich hinschauen?"), und der Weg ueber
pvesnap-recovery entfaellt.
Das gewaehlte Laufwerk landet im rechten Fenster, links bleibt der
Snapshot. Damit laesst sich direkt aus einem Snapshot auf das
Austauschmedium kopieren, das anschliessend in die wiederhergestellte
Maschine wandert - ohne Zwischenlager auf dem Host.
Ausgehaengt wird beim Verlassen, und zwar nur, was wir selbst eingehaengt
haben: ein Laufwerk, das schon vorher am Host hing, gehoert jemand
anderem. Das finally faengt auch Absturz und Strg-C ab - bliebe es
eingehaengt, gaelte es spaeter als belegt.
2. cleanup fand geschuetzte Snapshots ohne Klon nicht
Loescht jemand eine Wiederherstellung in der Proxmox-Oberflaeche, raeumt
Proxmox den Klon durchaus mit ab - aber nicht den Schutz seines
Quell-Snapshots (rbd snap protect, den setzt es beim Klonen selbst).
Zurueck bleibt ein geschuetzter Snapshot ohne Klon: die Vorhaltezeit
scheitert an ihm jede Nacht mit "snapshot is protected", und
find_orphans() findet prinzipiell nichts, weil es den Datentraeger, nach
dem es sucht, wirklich nicht mehr gibt. Dasselbe entsteht nach einem von
Hand ausgefuehrten rbd flatten.
find_stale_protections() sucht deshalb direkt nach der Ursache: jeder
geschuetzte Snapshot, an dem kein Klon haengt. Ein solcher Schutz hat
keinen Zweck - er existiert einzig dafuer, dass ein Klon seine Grundlage
behaelt. Geloest wird nur der Schutz, geloescht wird nichts. Vor jedem
Loesen wird ein zweites Mal nachgesehen, ob inzwischen doch ein Klon
daran haengt.
cleanup laeuft damit in zwei Durchgaengen und liegt neu auch in der
Oberflaeche auf Taste c - man sucht sonst lange nach einem Befehl, den
man nur im Notfall braucht.
Getestet gegen die Kulisse der Handbuch-Werkstatt: die rbd-Attrappe
kennt jetzt snap ls und children und enthaelt beide Zustaende
nebeneinander - ein geschuetzter Snapshot mit Klon (muss in Ruhe
gelassen werden) und einer ohne (muss gefunden werden).
Handbuch und README nachgezogen, zwei Bildschirmfotos dazu.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
7.8 KiB
7.8 KiB
Alle Befehle
pvesnap
Der Snapshot-Dienst und seine Verwaltung.
pvesnap [globale Optionen] <befehl> [optionen]
Globale Optionen
| Option | Vorgabe | |
|---|---|---|
-c, --config <pfad> |
/etc/pvesnap/pvesnap.conf |
andere Konfiguration verwenden (auch über PVESNAP_CONFIG) |
-n, --dry-run |
— | nichts wirklich anlegen oder löschen, nur anzeigen |
-v, --verbose |
— | ausführliche Ausgabe |
-V, --version |
— | Version anzeigen |
Unterbefehle
| Befehl | |
|---|---|
status |
Übersicht über Gruppen, letzte und nächste Läufe — auch die Vorgabe ohne Befehl |
vms |
alle VMs und Container mit den Gruppen, in denen sie stecken |
list |
vorhandene pvesnap-Snapshots |
check |
Konfiguration prüfen |
config (oder edit) |
ncurses-Editor |
run |
fällige Gruppen jetzt ausführen |
prune |
nur aufräumen, nichts anlegen |
daemon |
Dienst im Vordergrund starten (für systemd) |
run
| Option | |
|---|---|
-g, --group <name> |
nur diese Gruppe (mehrfach möglich) |
-f, --force |
unabhängig vom Zeitplan ausführen |
--no-prune |
nicht aufräumen |
pvesnap run # was fällig ist
pvesnap run --force -g taeglich # diese Gruppe sofort
pvesnap run --force --dry-run # Probelauf
pvesnap run -g taeglich -g monatlich # zwei Gruppen
prune
| Option | |
|---|---|
-g, --group <name> |
nur diese Gruppe |
list
| Option | |
|---|---|
-g, --group <name> |
nur diese Gruppe |
-a, --all |
auch fremde und von Hand angelegte Snapshots anzeigen |
pvesnap-explorer
pvesnap-explorer [vmid] [snapshot] [optionen]
| Parameter | Vorgabe | |
|---|---|---|
vmid |
— | Gast direkt vorwählen |
snapshot |
— | Snapshot direkt vorwählen |
-l, --local <pfad> |
aktuelles Verzeichnis | Startverzeichnis im rechten Fenster |
-p, --path <pfad> |
— | beliebiges Verzeichnis öffnen, ohne Proxmox zu fragen |
--cleanup |
— | hängengebliebene Einbindungen lösen und beenden |
-v, --verbose |
— | ausführliches Protokoll |
-V, --version |
— | Version anzeigen |
pvesnap-explorer # alles auswählen
pvesnap-explorer 101 # Snapshot von VM 101 wählen
pvesnap-explorer 101 auto-taeglich-20260809-023000 # direkt öffnen
pvesnap-explorer --local /srv/restore # rechtes Fenster startet dort
pvesnap-explorer --path /mnt/x # ohne Proxmox
pvesnap-explorer --cleanup # aufräumen
Braucht root, außer bei --path.
pvesnap-web
pvesnap-web [vmid] [snapshot] [optionen]
| Parameter | Vorgabe | |
|---|---|---|
-P, --port <nummer> |
8823 |
Port, auf dem gelauscht wird |
-b, --bind <adresse> |
0.0.0.0 |
Netzwerkadresse; 127.0.0.1 = nur lokal |
-a, --auth pve|token|none |
pve |
Anmeldeart |
--require-privilege <recht> |
VM.Snapshot |
nötiges Recht auf dem Gast |
--allow-user <user@realm> |
— | dieser Benutzer darf alles (mehrfach möglich) |
-t, --token <schlüssel> |
zufällig | Zugangsschlüssel selbst vorgeben |
--no-token |
— | Kurzform für --auth none |
-p, --path <verzeichnis> |
— | beliebiges Verzeichnis statt eines Snapshots |
--cleanup |
— | hängengebliebene Einbindungen lösen und beenden |
-v, --verbose |
— | ausführliches Protokoll |
-V, --version |
— | Version anzeigen |
Als Dienst stehen dieselben Parameter in /etc/pvesnap/web.conf:
PVESNAP_WEB_ARGS=--bind 0.0.0.0 --port 8823 --auth pve
pvesnap-recovery
pvesnap-recovery # ncurses-Oberfläche
pvesnap-recovery <befehl> [optionen]
Unterbefehle
| Befehl | |
|---|---|
live <VMID> [snapshot] |
abgeschottet starten (ohne Snapshot: der neueste) |
recover <VMID> [snapshot] |
mit Netzwerk und gleicher Identität starten |
list |
vorhandene Wiederherstellungen anzeigen |
start <VMID> |
starten |
stop <VMID> |
herunterfahren |
console <VMID> |
noVNC-Adresse ausgeben |
spice <VMID> |
Verbindungsdatei für remote-viewer |
flatten <VMID> |
vom Quell-Snapshot lösen |
cleanup |
aufräumen: Klone ohne Gast und geschützte Snapshots ohne Klon |
destroy <VMID> |
restlos verwerfen |
Optionen von live und recover
| Parameter | |
|---|---|
--newid <ID> |
VMID der neuen Maschine (Vorgabe: nächste freie) |
--node <name> |
auf welchem Node sie laufen soll |
--net none|down|on |
keine Karte / Karte ohne Leitung / voll am Netz |
--resume / --no-resume |
Arbeitsspeicher laden bzw. bewusst kalt starten |
--transfer <name> |
Austauschlaufwerk anhängen (mehrfach möglich) |
--spice |
SPICE-Anzeige (vga: qxl), zusätzlich zu noVNC |
--usb <n> |
so viele USB-Weiterleitungen über SPICE (schaltet --spice mit ein) |
--iso <volid> |
Abbild als CD einlegen, z. B. local:iso/virtio-win.iso |
--memory <MB> |
abweichender Arbeitsspeicher (nicht mit --resume) |
--cores <n> |
abweichende Kernzahl (nicht mit --resume) |
--name <name> |
Name der neuen Maschine |
--keep-binds |
durchgereichte Host-Verzeichnisse des Originals übernehmen |
--no-start |
nur einrichten, nicht starten |
-y, --yes |
Routinefragen überspringen |
--force |
auch anlegen, wenn das Original noch läuft |
!!! danger "-y deckt --force nicht ab"
`recover` mit `-y` bei laufendem Original wird **abgewiesen** (Rückgabewert
2). Siehe [Mit Netzwerk](../wiederherstellen/netzwerk.md).
Optionen der übrigen Befehle
| Befehl | Option | |
|---|---|---|
spice |
-o <datei> |
in eine Datei schreiben statt auf die Standardausgabe |
flatten |
--force |
auch bei knappem Speicherplatz |
cleanup |
--all |
auch Datenträger ohne Elternteil |
cleanup, destroy, flatten |
-y, --yes |
ohne Rückfrage |
Beispiele
# Kurz hineinschauen, mit Werkzeugen
pvesnap-recovery live 101 --transfer werkzeuge
# Ein bestimmter Snapshot, kalt gestartet, mit Dongle
pvesnap-recovery live 105 auto-taeglich-20260809-023000 --usb 2 --no-resume
# Ernstfall: Original steht, Wiederherstellung übernimmt
qm stop 101
pvesnap-recovery recover 101 --newid 9101
pvesnap-recovery flatten 9101
# Verbindungsdatei für den Arbeitsplatz
ssh root@pve2 pvesnap-recovery spice 9104 > vm.vv && remote-viewer vm.vv
# Aufräumen
pvesnap-recovery destroy 9101
pvesnap-recovery cleanup
systemd
systemctl status pvesnap
systemctl reload pvesnap # Konfiguration neu einlesen (SIGHUP)
systemctl restart pvesnap
journalctl -u pvesnap -f
systemctl status pvesnap-web
systemctl restart pvesnap-web # nach Änderungen in web.conf
systemctl stop pvesnap-web
journalctl -u pvesnap-web -f
Installation
./install.sh [optionen]
./uninstall.sh [--purge]
| Option | |
|---|---|
--with-webexplorer |
Web-Oberfläche als Dienst einrichten (erfordert --port) |
--port <nummer> |
Port der Web-Oberfläche |
--bind <adresse> |
Adresse, auf der sie lauscht (Vorgabe 0.0.0.0) |
--no-start |
installieren, aber Dienste nicht starten |
--no-install-deps |
parted und exfatprogs nicht nachinstallieren |
--force |
auch ohne erkanntes Proxmox VE installieren |
--help |
Übersicht |
Hilfswerkzeug
tools/get-guest-tools.sh <iso-storage>
Holt die virtio-win-Treiber auf einen ISO-Storage — für Windows-Gäste, die Treiber brauchen, oder für Zwischenablage und Mauszeiger unter SPICE.