Sicherung auf USB?

roger.r

New Member
Aug 1, 2024
18
1
3
Hallo!
Derzeit habe ich den PBS als VM auf einem PVE installiert, welcher die Backups auf ein NFS sichert. Klappt für mich prima.

Ich hätte aber noch gern eine weitere Sicherung auf ein Laufwerk, welches nicht mit dem PVE/PBS dauerhaft verbunden ist.
Mein Traum wäre ja, eine USB Platte anschließen zu können, auf welche gesichert wird, welche nach Abschluss ausgeworfen wird.
Im Grunde habe ich das fast auch schon umgesetzt. Ich habe den Anschluss an den PBS durchgereicht und der sichert fleißig. Auch Folgebackups. Der wirft aber den USB Stick nicht raus. Das müsste ich wahrscheinlich mit "umount" und mittels cron machen. Oder? Gibt es dann eine Möglichkeit den USB Stick wieder automatisch zu mounten?
Vor allem: wo "umounte" ich den Stick? Im PBS, im PVE oder in beiden?
Wenn ich manuell auswerfe bekomme ich auch alle 5s im Syslog des PVE die Meldung, dass der Storage fehlt...

Ist das überhaupt noch eine zeitgemäße Methode?
Mir geht es ja darum, eine Sicherung zu haben, die im Falle eines Verschlüsselungstrojaners oder ähnlichem nicht mit angegriffen wird.
 
Hey,

unmounten musst du den im PBS, kannst du über die UI ("Unmount"-Button) oder mit proxmox-backup-manager datastore unmount <datastore>. Wenn du den USB port durchgereicht hast, sollte der removable datastore[1] automatisch gemounted werden sobald die USB Platte angeschlossen wird.

Wenn ich manuell auswerfe bekomme ich auch alle 5s im Syslog des PVE die Meldung, dass der Storage fehlt...
klingt so als ob du den removable datastore direkt im PVE als Storage eingetragen hast? Das funktioniert, allerdings wäre es wahrscheinlich besser vom haupt-Datastore per Syncjob Backups auf die USB Platte (den removable datastore) zu übertragen, also nicht direkt Backups direkt darauf machen.

Sowas wie sync jobs automatisch starten wenn die Platte angeschlossen wird ist in Arbeit, es gibt schon Patches[2] dazu. Unmounten oder verify nach dem sync könnte auch Sinn machen, ist aber noch nicht in Planung.

[1] https://pbs.proxmox.com/docs/storage.html#removable-datastores
[2] https://lore.proxmox.com/pbs-devel/.../T/#m9a65d2b7f58ada01d6394bb96391fea62ab444b9
 
Mit sync-Jobs habe ich mich noch nicht beschäftigt. Klingt aber prima, weil dann ja nur einmal die VM angefasst wird.
Ich kann aber leider keinen anlegen, weil ein "Target Remote" verlangt wird, das bei mir leer ist. Was kann/muss ich da einstellen?
 
Du musst oben "Local" auswählen. Dann wählst den den removable datastore aus. Dieser Job überträgt dann alle Änderungen(seit dem letzten sync) vom einen Datastore auf den anderen(in deinem Fall dem auf der USB Platte). Nur um sicher zu gehen, den datastore auf der USB Platte hast du als entfernbarer datastore[1] erstellt, richtig?

[1] https://pbs.proxmox.com/docs/storage.html#removable-datastores
 
Ja, ich habe den als "removeable" erstellt. Ich sehe zumindest die beiden Button "mount/umount".
Ich bin im PBS unter Datastores > Sync Jobs > Add > Push Sync Job:
Bildschirmfoto 2025-06-11 um 13.50.11.png
 
Ohh, "Local" geht bis jetzt nur mit Pull-Jobs. Also im Ziel-Datastore den Sync-Job einstellen.
 
Oha! Es wird "heller". Danke!
Wenn ich es richtig verstehe, wird dann der komplette "Source Datastore" kopiert/synchronisiert?
Oder kann ich irgendwo auswählen, welche VM, oder sogar wieviel Versionen davon?
Weil, so ein USB-Store ist gern hinsichtlich seiner Größe begrenzter, als ein Server-Share.

Ansonsten geht das ja schon in die gewünschte Richtung!
Alternativ wäre wohl eine zweite PBS, auf eigener Hardware, an einem anderen Ort, die dann "pulled", um meine oben angesprochene Angst (Verschlüsselte Datenträger) zu minimieren, oder?
 
Neue Backups brauchen nur so viel mehr Speicherplatz wie sich die Daten seit dem letzten Backup Daten geändert haben. Mit der "Transfer last"-Option unter "Advanced" kannst du einstellen wie viele der letzten Backups übertragen werden sollen, also bei z.B. 5 werden pro VM/CT nur die Letzten 5 Backups übertragen. Auch kannst du Pruning für den removable datastore einstellen und so festlegen wie lange und unter welchen Regeln Backups behalten werden sollen. Wenn du einen Sync-Job bearbeitetest gibt es oben einen Tab "Group Filter", da kannst du recht genau einstellen welche VM/CTs von dem Sync-Job berücksichtigt werden sollen.

Ja, ein externer PBS kann die regelmäßig Backups vom lokalen PBS mit einem Pull Sync-Job abholen.
 
Das klingt prima. Danke!
Irgendwie stehe ich aber auf dem Schlauch. Ich kann mit "Add Include" den "Filter Type" und den "Filter Value" einstellen. Aber wo wähle ich aus, welche VM gesichert werden soll?
Bildschirmfoto 2025-06-11 um 14.54.17.png
 
Du kannst entweder einstellen was ignoriert, oder was berücksichtigt werden soll. Kleines Beispiel:
Code:
Type: VM -> alle VMs

Group: ct/110 -> CT mit der ID 110

mit 'Regex' kannst du einen Regex Ausdruck festlegen welcher verwendet werden soll.

Bei 'Include' muss eine der Regeln erfüllt sein. 'Exclude' wird nach dem 'Include' angewendet.
Also z.B. 'Include' alles VMs und CTs, dann 'Exclude' vm/112 und ct/102.
 
Ahhh!!! Danke, danke, danke!
Da bin ich falsch ran gegangen. Wenn ich die VMs mit der ID 101 und 103 sichern möchte, muss ich einfach so vorgehen, dass ich zwei Filter bei "Include Filter" mit dem "Type" "Group" angebe. Bei Filter wird mir dann eine Auswahl angegeben:
Bildschirmfoto 2025-06-11 um 16.18.46.png
 
Du bist da bei einem wunden Punkt, den Proxmox seit Jahrzehnten rumschleppt.
Ich schätze die Plattform wirklich sehr, aber externe USB-Medien haben die Jungs und Mädels immer noch nicht auf dem Zettel. Eine halbgare LTO-"Verwaltung" gibt es immer noch. Da kenne ich aber niemanden, der sie je überhaupt ernsthaft genutzt hat. Das tote Pferd seit Aufgalopp.

Am besten klappt es, per CLI parallel eine Logik mittels Script aufzubauen. Ärgerlich und nervig aber es funktioniert wenigstens zuverlässig.
Per WebGUI ist es einfach illusorisch.
Ich glaube es ist der Tatsache geschuldet, das die "Profis" lediglich gelächelt haben, wenn irgendwer LTO links liegen lässt. Deshalb gibt es eine Alibi "LTO-Verwaltung".
Während dessen hüsert und puzzlet fast die ganze Welt mit USB-Devices.
Dabei ist das eher trivial...
 
Last edited:
Gerne. Ich verwende folgende scripte:
  1. setenv.sh setzt benötigte Parameter.
  2. GETUUID.sh prüft ob die richtige Platte angeschlossen ist.
  3. mountexternal.sh mountet die USB-Platte
  4. rsyncexternal.sh wird per crontab aufgerufen.
Nun zu den scripten:
setenv.sh

Code:
#! /bin/sh

. /root/GETUUID.sh

MAILTO="xxx@xyz.de"
EXTDIR="/mnt/extern"
INTDIR="/mnt/backup"
MAXKILLED=1500
CURDOW=`date "+%A"`
DATEDIR=`date "+%Y-%m/%d"`
#DATEDIR="2019-10/01"
SHORTDATE=`date "+%Y-%m-%d"`
#SHORTDATE="2019-10-01"
DOW=$(date +%u)
STATUS=""
today=`date +'%d'.'%m'.'%Y'`
#today='01.01.2019'
my_year=`date +'%Y'`
feiertage=~/feiertage_$my_year.csv

if [ ! -f "$feiertage" ]
   then
   wget 'www.feiertage.net/csvfile.php?state=HH&year='$my_year'&type=csv' -O ~/feiertage_$my_year.csv
fi

FEIERTAG=$(grep -n $today $feiertage | awk -F: '{ print $1; }')

if [ "$FEIERTAG" = "" ]; then
 FEIERTAG=0
fi

WRONGDISK=0

if [ "$CURDOW" != "$CURUSB" ]; then
  WRONGDISK=1
fi

if [ $DOW -gt 0 ] && [ $DOW -lt 6 ]; then
 WE="NO"
else
 WE="WE"
fi

GETUUID.sh
Code:
#! /bin/sh

#echo "# "`date`" externes Medium "$EXTDIR" einbinden."
EXTUUID="UNKNOWN"
CURUSB="UNKNOWN"

#### Montag ####
TOCHECK=100c026e-bbb5-48a6-a0d4-144fe93d9ddb
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Montag"
fi


#TOCHECK=c96ae3f8-af16-4359-9df1-e73ded152a2a

#TOCHECK=860ec0a7-8aa3-4979-bc22-82deb5fe50d8
TOCHECK=c96ae3f8-af16-4359-9df1-e73ded152a2a
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Montag"
fi

TOCHECK=860ec0a7-8aa3-4979-bc22-82deb5fe50d8
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Montag"
fi

#### Dienstag ####
TOCHECK=98d49f4e-68b1-46a7-bc31-f8d0cf2d4c49
#TOCHECK=bbc7cac5-81ba-4dfd-b279-aeead8f4a485
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Dienstag"
fi

#### Mittwoch ####
TOCHECK=d9dab6b4-329f-4a1c-a010-1ae8329a0680
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Mittwoch"
fi

#### Donnerstag ####
TOCHECK=50e077c3-8583-4b4b-a08d-434a217b8345
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Donnerstag"

fi

#### Freitag ####
TOCHECK=69606cc3-803e-43bd-ad4e-01309e67c6d0
if [ `/sbin/blkid -o list -w /dev/null | grep -c $TOCHECK` -gt 0 ]
then
 EXTUUID=$TOCHECK
 CURUSB="Freitag"
fi

mountexternal.sh
Code:
#! /bin/sh

. /root/setenv.sh

echo "        externes Medium in "$EXTDIR" einbinden."

if [ ! -f $EXTDIR/notmounted ]; then
  echo "        Ein externes Medium ist bereits unter "$EXTDIR" verfügar."
  echo "        Dieses wird ohne weitere Prüfung verwendet."
else
  . /root/GETUUID.sh
  if [ $EXTUUID != "UNKNOWN" ]; then
    if [ $WRONGDISK != 0 ]; then
      echo "        WARNUNG: Die falsche Platte vom "$CURUSB" ist angeschlossen!"
      echo "                 Platte wird trotzdem verwendet!"
    fi
    mount /dev/disk/by-uuid/$EXTUUID $EXTDIR
    if [ $? -eq 0 ]; then
      echo "        Erfolg: /dev/disk/by-uuid/"$EXTUUID" "$EXTDIR" ist gemountet"
    else
      echo "        FEHLER (Error="$?"): mount /dev/disk/by-uuid/"$EXTUUID" "$EXTDIR
    fi
  else
    echo "        FEHLER: kein bekanntes Wechselmedium verfügbar!"
    echo "        Es findet KEINE externe Sicherung statt."
  fi
fi

rsyncexternal.sh

Code:
#! /bin/sh

. /root/setenv.sh

echo "#############"
echo "# "`date`" internes Sicherungmedium mit einem oder mehreren externen Wechselmedien synchronisieren."
echo "# "
echo "# Info: Es wurden insgesamt "$KILLEDFILES" Dateien gelöscht."
echo "# "
. /root/mountextern.sh
echo "  "
STATUS="Warnung: "
if [ ! -f $EXTDIR/notmounted ]; then
  if [ ! -f $INTDIR/notmounted ]; then
    if [ $KILLEDFILES -lt $MAXKILLED ]; then
      echo `date +'%H:%M'`" rsync --delete -avrz "$INTDIR"/dump/ "$EXTDIR"/dump/ > syncdump.txt"
      rsync --delete -avrz $INTDIR/dump/ $EXTDIR/dump/ >syncdump.txt 2> exterr.txt
      echo `date +'%H:%M'`" rsync --delete -avrz "$INTDIR"/root/ "$EXTDIR"/root/ > syncroot.txt"
      rsync --delete -avrz $INTDIR/root/ $EXTDIR/root/ > syncroot.txt 2> exterr.txt
      echo `date +'%H:%M'`" rsync --delete -avrz "$INTDIR"/omv/ "$EXTDIR"/omv/ > syncomv.txt"
      rsync --delete -avrz $INTDIR/omv/ $EXTDIR/omv/ > syncomv.txt 2> exterr.txt
      echo "  "
      df -h | grep -e sd -e Benutzt
      echo "  "
      crontab -l | grep -v '^#'
      STATUS=""
    else
      echo   "NOTBREMSE Datensicherung - mehr als 500 ("$KILLEDFILES") gelöschte Dateien. Es wurden KEINE Dateien auf das Wechselmedium geschrieben."
    fi
  else
    echo "  FEHLER! Internes Medium "$INTDIR" ist nicht eingebunden!"
  fi
else
  echo "  FEHLER! Externes Medium "$EXTDIR" ist nicht eingebunden!"
fi
echo "  "
echo "# "`date`" rsyncexternal.sh beendet"
echo "#############"
root@pve:~#
 
  • Like
Reactions: roger.r
Hmm, meints du in PVE, oder PBS? Ich sehe nämlich glaub ich nichts was deine Scripts machen, das nicht auch mit removable datastores[1] möglich wäre.

[1] https://pbs.proxmox.com/docs/storage.html#removable-datastores
In PVE. Die scripte tun wie bereits erwähnt nichts spektakuläres. Die Lösung läuft aber zuverlässig. Ich habe es noch nie zuverlässig hinbekommen, innerhalb der PVE-WebGUI wechselnde externe Platten mit Prüfung und Benachrichtigung einzubinden.
 
Hast du da ein Script in der Schublade und würdest es teilen?
Vielleicht hilft dir auch folgender Gedankenaustausch:
 
Last edited: