Difference between revisions of "Proxmox USB-Backup"

From 6bit.ch wiki
Jump to navigation Jump to search
(Created page with "== Ziel == Proxmox-VMs auf externe, wechselnde USB-Disk(s) sichern. == Weg zum Ziel == USB-Disks können ab Proxmox 8 mit der x-systemd.automount-Option über ''/etc/fstab'' automatisch gemounted werden. Da die Gerätepfade nicht konstant sind werden Regeln mit ''udev'' erstellt, welche die USB-Disks verlässlich am gleichen Ort präsentieren. === Nur für NTFS-formatierte Platten: ntfs-3g installieren (WebGUI Shell/SSH) === Nativ kann Linux NTFS nur als RO mounten, da...")
 
 
Line 76: Line 76:
fi
fi
# EOF</nowiki>
# EOF</nowiki>
Der Sensortyp ist ''SSH Script'', als Parameter muss das Backupverzeichnis (in diesem Beispiel ''/mnt/usbackup'') mitgegeben werden.\\
Der Sensortyp ist ''SSH Script'', als Parameter muss das Backupverzeichnis (in diesem Beispiel ''/mnt/usbackup'') mitgegeben werden.
Funktionsweise: Es wird geprüft, ob innerhalb des Backupverzeichnisses .zst-Dateien existieren, die jünger als 3 Tage sind. Wenn dies nicht der Fall ist, geht der Sensor in den Fehlerstatus.\\
Funktionsweise: Es wird geprüft, ob innerhalb des Backupverzeichnisses .zst-Dateien existieren, die jünger als 3 Tage sind. Wenn dies nicht der Fall ist, geht der Sensor in den Fehlerstatus.

Latest revision as of 15:37, 16 August 2024

Ziel

Proxmox-VMs auf externe, wechselnde USB-Disk(s) sichern.

Weg zum Ziel

USB-Disks können ab Proxmox 8 mit der x-systemd.automount-Option über /etc/fstab automatisch gemounted werden. Da die Gerätepfade nicht konstant sind werden Regeln mit udev erstellt, welche die USB-Disks verlässlich am gleichen Ort präsentieren.

Nur für NTFS-formatierte Platten: ntfs-3g installieren (WebGUI Shell/SSH)

Nativ kann Linux NTFS nur als RO mounten, daher brauchen wir NTFS-3G.

# apt install ntfs-3g

USB-Disk am Proxmox-Host anhängen (WebGUI Shell/SSH)

Ob die Disk erkannt wurde kann mit lsusb geprüft werden. Der aktuelle Ort innerhalb /dev wird mit lsblk angezeigt, diese Information (beispielsweise /dev/sde1) ersetzt im folgenden Schritt /dev/geraet.

udev-Attribute auslesen (WebGUI Shell/SSH)

Wir brauchen ein eindeutiges Identifikationsattribut, um die Disk zu referenzieren. Welche Informationen dafür geeignet sind, ist gerätespezifisch.

Attribute können folgendermassen angezeigt werden:

# udevadm info -a -p $(udevadm info -q path -n /dev/geraet)

Mit folgendem Befehl kann die Seriennummer angezeigt werden, diese eignet sich gut für die Identifikation:

# udevadm info -a -p $(udevadm info -q path -n /dev/geraet) | grep serial

Mit folgendem Befehl kann die Seriennummer direkt ins Rule-File geschrieben werden, damit spart man sich mühsames Copypasten:

# udevadm info -a -p $(udevadm info -q path -n /dev/geraet) | grep serial >> /etc/udev/rules.d/69-usb.rules

udev-Regeln erstellen (WebGUI Shell/SSH)

Hier wird udev angewiesen, für ein gelistetes Gerät (mit Seriennummer XX oder YY) eine fixe Verknüpfung /dev/usbackup1 (%n = Partitionsnummer) zu erstellen. Die externe USB-Disk wird so immer unter /dev/usbackup1 angezeigt. Falls mehrere Disks angehängt sind, werden diese chronologisch (später angeschlossene zuerst) dem Pfad zur Verfügung gestellt. Pro Zeile wird eine Disk aufgeführt.

# /etc/udev/rules.d/69-usb.rules
SUBSYSTEM=="block", ATTRS{serial}=="XX", SYMLINK+="usbackup%n"
SUBSYSTEM=="block", ATTRS{serial}=="YY", SYMLINK+="usbackup%n"

💡 Bei geänderten Regeln muss udev angewiesen werden, diese neu zu laden:

# udevadm control --reload-rules && udevadm trigger

Mountpoint für die Backupdisk(s) erstellen (WebGUI Shell/SSH)

# mkdir /mnt/usbackup

Eintrag in der FS-Table erstellen (WebGUI Shell/SSH)

# /etc/fstab /dev/usbackup1 /mnt/usbackup auto noauto,x-systemd.automount,x-systemd.idle-timeout=69 0 2

Cronjob für den Diskwechsel einrichten (WebGUI Shell/SSH)

Hiermit wird jeden Freitag um 1000 das Backup-Repo ordentlich deaktiviert und die Disk vom Mountpoint entfernt. Nun hat man einige Stunden Zeit, die Disk abzuhängen und eine Weitere anzuschliessen. Um 1700 wird das Storageverzeichnis wieder aktiviert und damit die Disk gemountet.

# crontab -e
0 10 * * fri /usr/sbin/pvesm set usbackup --disable 1 && /usr/bin/umount /mnt/usbackup
0 17 * * fri /usr/sbin/pvesm set usbackup --disable 0

⚠️ Gemountete Disks mit aktivem PVE-Storage sollten nicht einfach so ausgesteckt werden. Dies führt zu kuriosem Verhalten und kann auch systemweite Disk-Timeouts auslösen.\\

PRTG-Sensor

Dieses Script muss ins Verzeichnis /var/prtg/scripts kopiert werden.

#!/usr/bin/env bash
# Proxmox USB-Backup Sensor für PRTG (SSH Script)
#
if [ -z "$1" ]
then
        echo "Benützig: backupsensor.sh <BACKUPDIR>"
        exit 1
else
        if find $1 -mtime -3 -type f -iname '*.zst' | grep . 1>/dev/null
        then
                echo "0:0:Backup aktuell (<=3 Tage)"
                exit 0
        else
                echo "2:2:Backup zu alt (>3 Tage)"
                exit 0
        fi
fi
# EOF

Der Sensortyp ist SSH Script, als Parameter muss das Backupverzeichnis (in diesem Beispiel /mnt/usbackup) mitgegeben werden. Funktionsweise: Es wird geprüft, ob innerhalb des Backupverzeichnisses .zst-Dateien existieren, die jünger als 3 Tage sind. Wenn dies nicht der Fall ist, geht der Sensor in den Fehlerstatus.