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