Einleitung
Mit cv4pve-autosnap können die Snapshots von VMs und CTs in Proxmox automatisiert werden. Da der Restore aus den Backups meiner VMs je nach Größe mehrere Stunden benötigt, wollte ich eine Lösung für einen potenziellen schnelleren Restore, wenn ich beim rumspielen mal wieder was kaputt gemacht habe.
Dabei kann die Anwendung Remote oder lokal auf den Proxmox Host ausgeführt werden. Dafür wird ein Benutzer oder seit PVE 6.2 ein API Token genutzt werden.
Installation
Für die Installation wird die kompilierte Version heruntergeladen, entpackt, Rechte angepasst und verschoben:
wget https://github.com/Corsinvest/cv4pve-autosnap/releases/latest/download/cv4pve-autosnap-linux-x64.zip
unzip cv4pve-autosnap-linux-x64.zip
chmod +x cv4pve-autosnap
mv cv4pve-autosnap /usr/local/bin/
Rechte
Zur Ausführung benötigt der Proxmox Benutzer oder der API Token die folgenden Rechte
- VM.Audit
- VM.Snapshot
- Datastore.Audit
- Pool.Audit
Dabei muss zunächst unter “Datacenter > Permissions > Roles” eine neue Rolle mit den benötigten Rechten angelegt werden angelegt werden.
Gefolgt von der Erstellung eines Benutzers oder API Token.
Zuletzt werden die Rechte mit den Benutzer unter dem Menüpunkt “Permissions” verknüpft. Wähle dabei die zuvor erstellte Rolle aus.
Sollten Rechte fehlen wird das auch vom Programm entsprechend bei der Ausführung hervorgehoben.
Ausführung
Ausgeführt wird das Programm normal über die Commando Line.
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all snap --label="daily" --keep=6
Labels
Über die Labels erkennt das Programm die Snapshots und kann darüber zählen wie viele Snapshots existieren, welche gelöscht werden müssen und welche behalten werden können. Labels können frei gewählt werden. Empfehlenswert sind aber prägnante Namen wie “daily”, “weekly” oder “hourly”, da das Label auch im Namen des Snapshots auftaucht.
Über verschiedene Labels hinweg können auch unterschiedlich viele Snapshots aufbewahrt werden.
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all snap --label="daily" --keep=6
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all snap --label="weekly" --keep=4
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all snap --label="monthly" --keep=2
Timestamps
Über den –timestamp-format Parameter kann der Timestamp, welcher im Namen auftaucht angepasst werden. Standardmäßig wird yyMMddHHmmss
verwendet, was ich persönlich ein wenig unübersichtlich finde. Daher verwende ich lieber yyyy-MM-dd-HHmm
.
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all --timestamp-format -yyyy-MM-dd-HHmm snap --label="monthly" --keep=2
Cron
Um die Snapshots regelmäßig und zu einem gewissen Zeitpunkt auszuführen, kann der Befehl oder die mehreren Befehle einfach im cron hinzugefügt werden.
Um den Schedule zu erstellen kann ich https://crontab.guru empfehlen. Ist die Zeit definiert, kopiert einfach den Befehl dahinter.
15 15 * * * /usr/local/bin/cv4pve-autosnap --host=127.0.0.1 --usenname="autosnap@pve" --password="PASSWORD" --vmid=all --timestamp-format -yyyy-MM-dd-HHmm snap --label="12h" --keep=6
15 21 * * * /usr/local/bin/cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all --timestamp-format -yyyy-MM-dd-HHmm snap --label="12h" --keep=6
Status der Snapshots anzeigen
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all status
Löschen aller Snapshots
Fürs löschen aller oder bestimmter Snapshots nutzt man den clean
Befehl und kann dann einfach den --keep
Parameter auf 0 setzen. Darüber hinaus kann über --vmid
bestimmt werden ob alle VMs betroffen sind oder nur bestimmte IDs.
cv4pve-autosnap --host=127.0.0.1 --username="autosnap@pve" --password="PASSWORD" --vmid=all clean --label="daily" --keep=0