Worst-Case-Szenario im HomeLab: Proxmox Backup Server mit ZFS richtig testen

👉 Direkt auf YouTube schauen und abonnieren:
Smart Home & More auf YouTube

Worst-Case-Szenario im HomeLab: Proxmox Backup Server mit ZFS richtig testen

Einleitung

Ich spreche in meinen Videos und Blogbeiträgen oft über Backups, Redundanz und saubere HomeLab-Setups. Aber ganz ehrlich: Backups zu haben bringt nur dann wirklich etwas, wenn man den Worst Case auch einmal realistisch testet. Genau darum geht es in diesem Beitrag.

Was passiert, wenn:

  • die Hardware komplett ausfällt?
  • ein NAS abraucht?
  • ein ZFS-Pool plötzlich nicht mehr verfügbar ist?

Ich zeige hier Schritt für Schritt, wie ich ein solches Worst-Case-Szenario mit einem Proxmox Backup Server (PBS) und ZFS simuliert und erfolgreich wiederhergestellt habe – inklusive Import eines bestehenden ZFS-Pools und dem Austausch einer defekten Festplatte.


Ausgangssituation: Mein HomeLab-Setup

In meinem Setup läuft ein Großteil der Infrastruktur auf einem UGREEN DXP 8800 Plus (8-Bay NAS).

Angebot
UGREEN NASync DXP8800 Plus 8-Bay NAS Server, Intel i5-1235U 10-Kern, 8GB DDR5, 128GB SSD, 2×10GbE, 2×M.2 NVMe, 8K HDMI, 2×Thunderbolt 4, Kompatibel mit Drittanbieter HDD/SSD (Diskless)
  • Zwei 10GbE-Netzwerkanschlüsse: Zwei 10GbE-Hochgeschwindigkeitsnetzwerkanschlüsse, die zu einer Bandbreite von 20 G zusammengefasst werden können, um Downloadgeschwindigkeiten von bis zu 2500 MB/s zu erreichen. Große Dateien lassen sich problemlos übertragen. Die Last zwischen den beiden Portverbindungen kann dynamisch angepasst und ausgeglichen werden, um die Übertragungseffizienz zu verbessern.
  • Beispiellose Verarbeitungsleistung: Mit einem Intel Core i5-Prozessor der 12. Generation mit 10 Kernen und 12 Threads wird die Verarbeitungsleistung im Vergleich zu früheren Prozessoren sprunghaft verbessert.
  • 8-Bay, 256 TB riesiger Datenspeicher: Ausgestattet mit acht SATA- und zwei M.2 NVMe-Laufwerkschächten verfügt das NASync DXP8800 Plus über eine maximale Speicherkapazität von bis zu 256 TB. Speichern Sie Tausende von HD-Filmen, Bildern und Dokumenten und machen Sie NASync zu einer Filmbibliothek, einem Fotoalbum und einem Dateispeicherplatz in einem.
  • Eine umfassende App: Anstatt einzelne Anwendungen für bestimmte Funktionen herunterzuladen, integriert die NAS-App diese Funktionen an einem Ort. Greifen Sie von einem praktischen Ort aus auf Speichermanager, Dateien, Fotos und mehr zu.
  • Professionelle Datensicherheit: Im Vergleich zu Cloud-Laufwerken ermöglicht NASync Benutzern, große Mengen persönlicher Daten auf vertrauenswürdigen lokalen Geräten zu speichern, wodurch Datenverlust und Überwachung weitestgehend verhindert werden. Datenübertragung und Konten können mit professioneller Verschlüsselung und Multi-Faktor-Authentifizierung vollständig geschützt werden.

Darauf befindet sich unter anderem:

  • Proxmox
  • eine virtuelle Maschine mit Proxmox Backup Server
  • zwei per PCI-Passthrough durchgereichte HDDs
  • darauf ein ZFS-Mirror-Pool für die Backups

Zusätzlich habe ich ein zweites System, ein DXP 4800 Plus (4-Bay NAS), das im Ernstfall als Ersatz dienen kann.

Angebot
UGREEN NASync DXP4800 Plus 4-Bay Desktop NAS, Intel Pentium Gold 8505 5-Core CPU, 8GB DDR5 RAM, 128G SSD, 1 * 10GbE, 1 * 2,5GbE, 2*M.2 NVMe-Steckplätze, 4K HDMI, Network Attached Storage (Diskless)
  • 12. Gen 5-Kern Intel Prozessor: Diese leistungsstarke CPU von Intel bietet ein außergewöhnlich flüssiges Erlebnis und sorgt für einen erheblichen Leistungszuwachs im Vergleich zu früheren Generationen.
  • Benutzerfreundliche App: Verwalte deinen Speicher und greife von all deinen Geräten auf deine Dateien zu, ganz einfach mit unserer maßgeschneiderten Software – und das alles ohne mehrere Tools oder komplizierte Drittanbieter-Software. Verfügbar für Android, iOS, Windows, Mac, Webbrowser und Smart-TVs.
  • 4 Bays und maximal 136TB: Die vier SATA-Bays unterstützen jeweils bis zu 30TB. Zusätzlich können zwei kompakte M.2 NVMe SSDs mit jeweils bis zu 8TB installiert werden (für SSD-Caching oder zusätzlichen schnellen Speicher). Bei vollständiger Ausnutzung aller Steckplätze beträgt die maximale Kapazität beeindruckende 136TB.
  • Blitzschnelle 10GbE- und 2.5GbE-Netzwerkanschlüsse: Der NASync DXP4800 Plus bietet Datenraten von bis zu beeindruckenden 1250 MB/s über zwei separate Anschlüsse. Ideal für alle, die eine schnelle und reibungslose Übertragung von 4K-Videos und großen Dateien benötigen.
  • Professionelle Datensicherheit: Mit sicherer Verschlüsselung sind Benutzerkonten und Daten vollständig geschützt.

Das Ziel dieses Tests:

Was passiert, wenn das 8-Bay-NAS komplett ausfällt – und wie komme ich wieder an meine Backups?


Szenario 1: Totalausfall der Hardware

Annahme

Das komplette Hauptsystem ist defekt. Mainboard, Netzteil – egal. Die Festplatten sind aber noch intakt.

Vorgehen

  1. Ich baue die beiden ZFS-Festplatten aus dem 8-Bay-NAS aus.
  2. Die Platten stecke ich in das 4-Bay-NAS.
  3. Auf dem neuen System installiere ich Proxmox.
  4. Anschließend setze ich einen neuen Proxmox Backup Server als VM auf.

Die ursprüngliche PBS-Konfiguration habe ich bewusst nicht gesichert, um ein realistisches Worst-Case-Szenario zu simulieren.


ZFS-Pool importieren

Nach der frischen Installation des Proxmox Backup Servers sind die Festplatten zwar sichtbar, aber:

  • kein Datastore
  • kein eingebundener ZFS-Pool

ZFS-Pool finden

In der PBS-Shell führe ich folgenden Befehl aus:

zpool import

Damit wird mir der vorhandene ZFS-Pool angezeigt.

Pool importieren

Der Import erfolgt mit:

zpool import -f zfspool

(„zfspool“ natürlich durch den eigenen Poolnamen ersetzen.)

Danach ist der Pool im System verfügbar, aber noch nicht als Datastore eingebunden.


Datastore wiederherstellen

Jetzt kommt der entscheidende Punkt:

  1. In der PBS-Weboberfläche gehe ich auf Add Datastore
  2. Name: identisch zum alten Datastore
  3. Pfad:

/mnt/datastore/zfspool

  1. Unter Advanced aktiviere ich:

Reuse existing datastore

Nach dem Hinzufügen erscheint:

  • der alte Datastore
  • inklusive aller Backups

Die virtuelle Maschine ist sofort wieder verfügbar.

Ergebnis:

➡️ Vollständige Wiederherstellung der Backups – ohne vorherige Konfigurationssicherung.


Szenario 2: Ausfall einer einzelnen Festplatte

Jetzt wird es noch realistischer.

Simulation

  • Eine der beiden ZFS-Platten wird entfernt
  • Der Pool ist anschließend degraded

Der Proxmox Backup Server meldet beim Start:

One or more devices could not be used


Defekte Platte ersetzen

Alte Platte entfernen

Zunächst ermittele ich die ID der Platte, die nicht mehr erreichbar ist.

zpool status -g zfspool

Neue Platte einbinden

  1. Neue HDD physisch einsetzen
  2. Per Passthrough an die PBS-VM durchreichen
  3. Disk-ID ermitteln:

ls -l /dev/disk/by-id/

Pool reparieren

Jetzt ersetze ich die defekte Platte durch die neue:

zpool replace zfspool <alte-disk-id> <neue-disk-id>

Falls auf der neuen Platte noch Daten liegen:

  • entweder per Shell löschen
  • oder komfortabel über die Weboberfläche Wipe Disk

Danach den Befehl erneut ausführen.


Resilvering & Abschluss

Nach kurzer Zeit startet das Resilvering.

Mit:

zpool status zfspool

lässt sich der Fortschritt prüfen.

Nach Abschluss:

  • Pool Status: ONLINE
  • Keine Fehler
  • Alle Backups vollständig vorhanden

Fazit: Warum dieser Test extrem wichtig ist

Dieser Test zeigt sehr deutlich:

  • Backups ohne Wiederherstellungstest sind wertlos
  • ZFS ist extrem robust und flexibel
  • Ein Proxmox Backup Server mit ZFS ist absolut worst-case-tauglich

Selbst bei:

  • kompletter Hardware-Zerstörung
  • Neuinstallation ohne Konfigurationssicherung
  • Ausfall einzelner Festplatten

konnte ich meine Backups vollständig und sauber wiederherstellen.


Meine Empfehlung

Wenn du ein HomeLab betreibst:

  • teste mindestens einmal dein Worst-Case-Szenario
  • simuliere Hardware-Ausfälle
  • überprüfe, ob du wirklich wieder an deine Daten kommst

Denn genau dann, wenn es darauf ankommt, willst du keine Experimente mehr machen.


Wenn du weitere Beiträge rund um Proxmox, ZFS, Backups und saubere HomeLab-Architekturen suchst, schau gern auf meinem YouTube-Kanal Smart Home & More vorbei.

Proxmox Energie sparen: Von 100W auf 39W im Home Lab (Anleitung)

👉 Direkt auf YouTube schauen und abonnieren:
Smart Home & More auf YouTube

Einleitung: Der Kampf gegen den Stromzähler

Kennst du das Gefühl, wenn du auf dein Strommessgerät schaust und dir kurz der Atem stockt? In meinem Fall standen da in Summe über 100 Watt. Dauerhaft. Für ein Home Lab, das zwar leistungsstark sein soll, aber nicht unnötig Energie verbrennen darf.

Mein Ziel war klar: Ich wollte runter von diesem hohen Verbrauch – und zwar drastisch. Das Ergebnis? Ich bin jetzt bei rund 40 Watt.

In diesem Beitrag zeige ich dir genau, wie ich das geschafft habe. Wir schauen uns an, wie wir die „Low Hanging Fruits“ ernten – also die Festplatten (HDDs), die wir schlafen legen, wenn sie nicht gebraucht werden. Außerdem zeige ich dir, wie ich meinen Backup-Server so automatisiere, dass er wirklich nur dann läuft, wenn ein Backup ansteht. Das Wichtigste dabei: Die Dinge, die ich hier zeige, lassen sich auch auf andere Systeme anwenden – du brauchst also nicht zwingend ein Ugreen NAS, um das hier nachzubauen

Lass uns direkt loslegen.


Mein Hardware-Setup: Die Basis

Bevor wir in die Konfiguration gehen, musst du verstehen, wie mein System aufgebaut ist. Das ist wichtig, um die Logik hinter den Skripten später zu verstehen.

Ich nutze aktuell zwei Systeme von Ugreen:

  1. Der Primary*: Ein Ugreen DXP 8800 Plus (8-Bay NAS). Hier läuft mein Hauptsystem mit Proxmox. Bestückt ist es mit 8 Festplatten.

Angebot


UGREEN NASync DXP8800 Plus 8-Bay NAS Server, Intel i5-1235U 10-Kern, 8GB DDR5, 128GB SSD, 2×10GbE, 2×M.2 NVMe, 8K HDMI, 2×Thunderbolt 4, Kompatibel mit Drittanbieter HDD/SSD (Diskless)

  • Zwei 10GbE-Netzwerkanschlüsse: Zwei 10GbE-Hochgeschwindigkeitsnetzwerkanschlüsse, die zu einer Bandbreite von 20 G zusammengefasst werden können, um Downloadgeschwindigkeiten von bis zu 2500 MB/s zu erreichen. Große Dateien lassen sich problemlos übertragen. Die Last zwischen den beiden Portverbindungen kann dynamisch angepasst und ausgeglichen werden, um die Übertragungseffizienz zu verbessern.
  • Beispiellose Verarbeitungsleistung: Mit einem Intel Core i5-Prozessor der 12. Generation mit 10 Kernen und 12 Threads wird die Verarbeitungsleistung im Vergleich zu früheren Prozessoren sprunghaft verbessert.
  • 8-Bay, 256 TB riesiger Datenspeicher: Ausgestattet mit acht SATA- und zwei M.2 NVMe-Laufwerkschächten verfügt das NASync DXP8800 Plus über eine maximale Speicherkapazität von bis zu 256 TB. Speichern Sie Tausende von HD-Filmen, Bildern und Dokumenten und machen Sie NASync zu einer Filmbibliothek, einem Fotoalbum und einem Dateispeicherplatz in einem.
  • Eine umfassende App: Anstatt einzelne Anwendungen für bestimmte Funktionen herunterzuladen, integriert die NAS-App diese Funktionen an einem Ort. Greifen Sie von einem praktischen Ort aus auf Speichermanager, Dateien, Fotos und mehr zu.
  • Professionelle Datensicherheit: Im Vergleich zu Cloud-Laufwerken ermöglicht NASync Benutzern, große Mengen persönlicher Daten auf vertrauenswürdigen lokalen Geräten zu speichern, wodurch Datenverlust und Überwachung weitestgehend verhindert werden. Datenübertragung und Konten können mit professioneller Verschlüsselung und Multi-Faktor-Authentifizierung vollständig geschützt werden.

  1. Der Secondary*: Ein Ugreen DXP 4800 Plus (4-Bay NAS). Dies dient als reines Backup-Ziel.

Angebot


UGREEN NASync DXP4800 Plus 4-Bay Desktop NAS, Intel Pentium Gold 8505 5-Core CPU, 8GB DDR5 RAM, 128G SSD, 1 * 10GbE, 1 * 2,5GbE, 2*M.2 NVMe-Steckplätze, 4K HDMI, Network Attached Storage (Diskless)

  • 12. Gen 5-Kern Intel Prozessor: Diese leistungsstarke CPU von Intel bietet ein außergewöhnlich flüssiges Erlebnis und sorgt für einen erheblichen Leistungszuwachs im Vergleich zu früheren Generationen.
  • Benutzerfreundliche App: Verwalte deinen Speicher und greife von all deinen Geräten auf deine Dateien zu, ganz einfach mit unserer maßgeschneiderten Software – und das alles ohne mehrere Tools oder komplizierte Drittanbieter-Software. Verfügbar für Android, iOS, Windows, Mac, Webbrowser und Smart-TVs.
  • 4 Bays und maximal 136TB: Die vier SATA-Bays unterstützen jeweils bis zu 30TB. Zusätzlich können zwei kompakte M.2 NVMe SSDs mit jeweils bis zu 8TB installiert werden (für SSD-Caching oder zusätzlichen schnellen Speicher). Bei vollständiger Ausnutzung aller Steckplätze beträgt die maximale Kapazität beeindruckende 136TB.
  • Blitzschnelle 10GbE- und 2.5GbE-Netzwerkanschlüsse: Der NASync DXP4800 Plus bietet Datenraten von bis zu beeindruckenden 1250 MB/s über zwei separate Anschlüsse. Ideal für alle, die eine schnelle und reibungslose Übertragung von 4K-Videos und großen Dateien benötigen.
  • Professionelle Datensicherheit: Mit sicherer Verschlüsselung sind Benutzerkonten und Daten vollständig geschützt.

Der Plan ist simpel: Daten werden zwischen dem Primary und dem Secondary synchronisiert. Aber – und das ist der Knackpunkt beim Thema Proxmox Energie sparen – der Secondary muss nicht 24/7 laufen. Er wird nur für das Backup benötigt. Auch auf dem Primary müssen nicht alle 8 Festplatten rund um die Uhr rotieren, wenn ich nur ein- oder zweimal am Tag darauf zugreife.

Als Festplatten setze ich übrigens sehr gerne die Enterprise Platten von Toshiba ein. Alles was wichtig ist, kommt auf diese Platten*. Die haben sich über Jahre als äußerst Robust erwiesen.

Für Backups greife ich gerne auf die WD-Red Plus Reihe zurück*

Angebot


WD Red Plus 8TB NAS Interne Festplatte 3,5 Zoll – 5640 U/Min, SATA 6 Gb/s, CMR, 256MB Cache

  • Für NAS mit NASware optimiert Die exklusive Western Digital NASware-Technologie optimiert die Festplattenparameter für Workloads von NAS-Systemen, um die Leistung und Zuverlässigkeit zu verbessern.
  • Für dauerhaften Betrieb entwickelt Ihr NAS-System läuft rund um die Uhr. Ein äußerst zuverlässiger Speicher ist daher unverzichtbar. WD Red Plus-Festplatten sind für Systeme im Dauerbetrieb ausgelegt und geben Anwendern die Gewissheit, dass sie zuverlässig auf ihre Daten zugreifen können.
  • Auf zuverlässige Kompatibilität getestet Western Digital arbeitet mit vielen verschiedenen Herstellern von NAS-Systemen zusammen, um umfassende Tests durchzuführen und die Kompatibilität mit den meisten NAS-Gehäusen sicherzustellen.
  • Für niedrigere Gesamtbetriebskosten optimiert WD Red Plus-Festplatten verbrauchen weniger Energie (als frühere Modelle) und laufen kühler, wodurch die Betriebskosten sinken und die Wärme in schwer zu kühlenden NAS-Gehäusen reduziert wird.
  • Weniger Strombedarf, starke Leistung Obwohl sie weniger Energie verbrauchen, verfügen die Festplatten über eine gewaltige Bandbreite, um die gemischten Leistungsanforderungen von NAS-Systemen mit mehreren Festplatten zu erfüllen.


Schritt 1: Die „Low Hanging Fruits“ – HDDs in den Spindown schicken

Der größte Stromfresser in einem NAS sind oft die mechanischen Festplatten. Wenn diese 24 Stunden am Tag, 7 Tage die Woche drehen, verbrauchen sie unnötig Energie und erzeugen Wärme.

Mein erster Ansatz war also: Wenn ich die Platten nicht brauche, sollen sie schlafen gehen (Spindown).

Szenario A: Festplatten in einer Unraid VM

Einen Teil meiner Festplatten (4 Stück) habe ich direkt an eine virtuelle Maschine (VM) mit Unraid durchgereicht. Hier ist das Stromsparen denkbar einfach.

Hier ist das Stromsparen denkbar einfach.

In Unraid gehst du einfach in die Datenträger Einstellungen und setzt die Ruhezustandsverzögerung (Spindown Delay). Ich habe hier 15 Minuten eingestellt. Sobald 15 Minuten lang kein Zugriff erfolgt, schalten sich die Platten ab.

Achte hierbei nur darauf, dass du den Wert höher stellst, wenn du z.B. häufiger auf das NAS System zugreifst. Jedes An / Ausschalten der Platten erzeugt einen Verschleiß. Wenn deine Platten quasi den gesamten Tag fast durchgängig benötigt werden, dann macht es keinen Sinn an dieser Stelle zu sparen. Nur, wenn die meiste Zeit des Tages tatsächlich keine Daten benötigt werden, solltest du das verwenden.

Wie du Unraid genau installierst und den Controller durchreichst, habe ich bereits in einem anderen Artikel behandelt.

Unraid unter Proxmox installieren – Mein komplettes HomeLab-Setup Schritt für Schritt

Szenario B: Festplatten direkt unter Proxmox (ZFS & Co.)

Jetzt wird es spannender. Die restlichen Platten hängen direkt an Proxmox und werden teilweise für den Proxmox Backup Server (PBS) genutzt. Hier funktioniert der einfache Spindown oft nicht von Haus aus, besonders wenn ZFS im Spiel ist, das die Platten gerne wach hält.

Die Lösung ist ein kleines Tool namens hd-idle.

Installation von hd-idle: Zuerst installieren wir das Tool direkt in der Proxmox-Shell (Konsole):

apt-get install hd-idle

Die richtige Konfiguration: Damit wir nicht versehentlich die falschen Platten schlafen legen (zum Beispiel die Systemplatte, was fatal wäre), müssen wir die Festplatten eindeutig identifizieren. Verlasse dich niemals auf Bezeichnungen wie sda oder sdb, da diese sich nach einem Neustart ändern können. Wir nutzen die eindeutige ID (Serial Number).

Führe folgenden Befehl aus, um deine Disks aufzulisten:

ls -l /dev/disk/by-id/

Kopiere dir die IDs der Festplatten, die du in den Ruhezustand schicken möchtest (z.B. ata-WDC_WD...).

Nun bearbeiten wir die Konfigurationsdatei von hd-idle. Du findest sie meistens unter /etc/default/hd-idle.

Wichtig sind zwei Dinge:

  1. Setze START_HD_IDLE=true.
  2. Trage deine Platten mit der gewünschten Zeit ein.

Ich empfehle hier einen Wert von 1800 Sekunden (30 Minuten), um die Hardware nicht durch ständiges An- und Ausschalten zu belasten.

# defaults file for hd-idle

# start hd-idle automatically?
START_HD_IDLE=true
HD_IDLE_OPTS="-i 0 \
-a /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX12DC482U93 -i 60 \
-a /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX22DC4LF10E -i 60 \
-a /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX12DC4820ZZ -i 60 \
-a /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX22DC4PV4D8 -i 60"

Danach den Dienst einfach neu starten:

systemctl restart hd-idle

Mit diesen Maßnahmen hast du den ersten großen Schritt getan, um mit Proxmox Energie sparen zur Realität zu machen.


Schritt 2: Den Backup-Server bändigen (Primary& Secondary Prinzip)

Jetzt kommen wir zum fortgeschrittenen Teil. Ich nutze den Proxmox Backup Server (PBS), um meine VMs und Container zu sichern. Das Problem: Wenn der PBS als VM auf dem Primary läuft und Zugriff auf den ZFS-Pool hat, hält er die Platten wach. Außerdem: Wozu soll der Secondary -Server (das Backup-Ziel) laufen, wenn gar kein Backup gemacht wird?

Meine Strategie: Ich verlagere die Backups in die Tageszeit, wenn meine PV-Anlage Strom liefert. Den Rest der Zeit sollen der Backup-Server (die VM) und der externe Secondary -Server ausgeschaltet sein.

Das bringt jedoch ein technisches Problem mit sich: Wenn ich die Backup-VM ausschalte oder den Secondary herunterfahre, meckert Proxmox. Der Storage ist nicht mehr erreichbar, und das System schreibt die Logs voll mit Fehlermeldungen („error fetching datatsores“). Das nennt man „Logspam“, und das wollen wir vermeiden.

Die Lösung sind zwei selbstgeschriebene Skripte:

  1. Ein Start-Skript, das alles sauber hochfährt und einbindet.
  2. Ein Stop-Skript, das alles sauber trennt und herunterfährt.

Das Start-Skript

Das Skript erledigt folgende Aufgaben vollautomatisch:

  1. Es sendet ein Wake-on-LAN (WOL) Paket an den Secondary-Server, um ihn zu starten.
  2. Es prüft, ob der Secondary per SSH erreichbar ist.
  3. Es aktiviert den Storage in Proxmox wieder (damit kein Fehler auftaucht).
  4. Es startet die lokale Proxmox Backup Server VM.

Damit das funktioniert, musst du sicherstellen, dass wakeonlan auf deinem Primary installiert ist und im BIOS des Secondary aktiviert wurde.

apt-get install wakeonlan

Das vollständige Skript kannst du dir hier kopieren und an deine IPs und MAC-Adressen, Storage Name und VM ID anpassen:

#!/bin/bash
set -euo pipefail

# --- Konfiguration ---
SLAVE_HOST="192.168.100.3"
SLAVE_MAC="6C:1F:F7:76:53:18"
STORAGE_NAME="PBS_DXP8800Plus"
VM_ID="102"

# KORRIGIERT: Port 8006 für Proxmox VE (PVE).
# Alternativ: Port 22 für SSH (startet oft schneller).
CHECK_PORT=22

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

log "==== START: Slave-Proxmox Start-Workflow ===="

# 1) Slave per WOL wecken
log "Sende Wake-on-LAN an ${SLAVE_MAC}"
if command -v wakeonlan &> /dev/null; then
    wakeonlan "${SLAVE_MAC}" > /dev/null
else
    log "FEHLER: 'wakeonlan' Befehl nicht gefunden! Bitte installieren (apt install wakeonlan)."
    exit 1
fi

# 2) Auf Erreichbarkeit warten (Ping + Service Check)
log "Warte auf ${SLAVE_HOST} (Max. 5 Minuten)..."
HOST_UP=false

for i in {1..60}; do # 60 Versuche a 5 Sekunden = 5 Minuten
    if ping -c1 -W1 "${SLAVE_HOST}" >/dev/null 2>&1; then

        # ZUSATZ: Port-Check (Dienste wirklich da?)
        if [ -n "$CHECK_PORT" ]; then
             # Versuche, den Port zu erreichen (timeout 2s reicht hier)
             if timeout 2 bash -c "</dev/tcp/${SLAVE_HOST}/${CHECK_PORT}" 2>/dev/null; then
                 log "Host ${SLAVE_HOST} ist pingbar UND Port $CHECK_PORT ist offen."
                 HOST_UP=true
                 break
             else
                 log "Ping OK, aber Port $CHECK_PORT noch nicht erreichbar. Warte..."
             fi
        else
            # Fallback ohne Port-Check
            log "Host pingbar. Warte pauschal 15s auf Dienste..."
            sleep 15
            HOST_UP=true
            break
        fi
    fi
    sleep 5
done

# ABBRUCH, wenn Host nicht kam
if [ "$HOST_UP" = false ]; then
    log "FEHLER: Slave-Host ${SLAVE_HOST} (Port $CHECK_PORT) ist nicht hochgefahren. Abbruch!"
    exit 1
fi

# 3) PBS-Storage aktivieren
# Prüfen, ob Storage schon aktiv ist
if ! /usr/sbin/pvesm status | grep -q "^${STORAGE_NAME}.*active"; then
    log "Aktiviere Storage ${STORAGE_NAME}..."
    /usr/sbin/pvesm set "${STORAGE_NAME}" --disable 0
else
    log "Storage ${STORAGE_NAME} ist bereits aktiv."
fi

# Kurze Pause für den Storage-Mount
sleep 2

# 4) VM starten (nur wenn sie nicht schon läuft)
VM_STATUS=$(/usr/sbin/qm status "${VM_ID}")
if [[ "$VM_STATUS" == *"status: stopped"* ]]; then
    log "Starte VM ${VM_ID}..."
    /usr/sbin/qm start "${VM_ID}"
    log "VM ${VM_ID} Startbefehl gesendet."
else
    log "INFO: VM ${VM_ID} läuft bereits oder Status ist unklar ($VM_STATUS)."
fi

log "==== ENDE: Slave-Proxmox Start-Workflow ===="

Erstelle dir ein Verzeichnis

mkdir /root/automation
nano proxmox-slave-start.sh

Kopiere den Inhalt aus dem Code Block und passe deine Daten an ( IP, Storage, VMID etc.. ) .

Speichere danach die Datei Strg+X und mach sie ausführbar.

chmod +x /root/automation proxmox-slave-start.sh

Dieser Vorgang muss mit dem Stop -Script genauso wiederholt werden. Achtet darauf, dass der Dateiname dann „proxmox-slave-stop.sh“ ist.

Das Stop-Skript

Am Nachmittag, wenn die Sonne weggeht, wollen wir wieder Strom sparen. Das Stop-Skript macht genau das Gegenteil:

  1. Es fährt die lokale Backup-VM herunter.
  2. Es deaktiviert den Storage in Proxmox (verhindert Logspam!).
  3. Es sendet per SSH den Befehl poweroff an den Secondary-Server.

Auch hier müsst ihr wieder eure Daten eintragen ( IP, Storage Name, VM_ID )

  GNU nano 8.4                                                                                                                                                                      proxmox-slave-stop.sh
#!/bin/bash
set -euo pipefail

# Konfiguration
SLAVE_HOST="192.168.100.3"
STORAGE_NAME="PBS_DXP8800Plus"
VM_ID="102"
MAX_WAIT_CYCLES=18  # 18 * 10s = 3 Minuten

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

log "==== START: Slave-Proxmox Stop-Workflow ===="

# 1) Status prüfen & VM herunterfahren
VM_STATUS=$(/usr/sbin/qm status "${VM_ID}" | awk '{print $2}')

if [[ "${VM_STATUS}" == "running" ]]; then
    log "VM ${VM_ID} läuft. Sende Shutdown-Signal (ACPI)..."
    /usr/sbin/qm shutdown "${VM_ID}" || log "WARNUNG: qm shutdown ${VM_ID} meldete Fehler (evtl. ignoriert)."

    # Wartensschleife
    log "Warte auf Stop der VM ${VM_ID} (Max. 3 Min)..."
    VM_STOPPED=false

    for ((i=1; i<=MAX_WAIT_CYCLES; i++)); do
        CURRENT_STATUS=$(/usr/sbin/qm status "${VM_ID}" | awk '{print $2}')

        if [[ "${CURRENT_STATUS}" == "stopped" ]]; then
            log "Erfolg: VM ${VM_ID} ist gestoppt."
            VM_STOPPED=true
            break
        fi

        # Letzter Versuch: Harter Kill
        if [[ $i -eq $MAX_WAIT_CYCLES ]]; then
            log "TIMEOUT: VM reagiert nicht auf Shutdown. Versuche harten 'qm stop'..."
            /usr/sbin/qm stop "${VM_ID}" || true
            sleep 5 # Kurz warten, damit Proxmox aufräumen kann
        else
            sleep 10
        fi
    done

    # Finaler Check nach Loop
    if [[ "$VM_STOPPED" == "false" ]]; then
         # Checken ob der Hard-Kill oben geklappt hat
         FINAL_STATUS=$(/usr/sbin/qm status "${VM_ID}" | awk '{print $2}')
         if [[ "${FINAL_STATUS}" == "stopped" ]]; then
            log "VM wurde durch harten Stop beendet."
         else
            log "FEHLER: VM ${VM_ID} konnte nicht gestoppt werden! Status: ${FINAL_STATUS}"
            # Wir machen trotzdem weiter, damit der Storage disabled wird!
         fi
    fi

elif [[ "${VM_STATUS}" == "stopped" ]]; then
    log "Info: VM ${VM_ID} ist bereits gestoppt. Keine Aktion nötig."
else
    log "WARNUNG: Unbekannter Status der VM ${VM_ID}: ${VM_STATUS}"
fi

# 3) PBS-Storage deaktivieren (Kritischer Schritt für Host-Performance)
# Wir prüfen vorher kurz, ob er überhaupt aktiv ist, um unnötige Log-Einträge zu meiden,
log "Deaktiviere Storage ${STORAGE_NAME}..."
if /usr/sbin/pvesm set "${STORAGE_NAME}" --disable 1; then
    log "Storage ${STORAGE_NAME} erfolgreich deaktiviert."
else
    log "WARNUNG: Fehler beim Deaktivieren von ${STORAGE_NAME}!"
fi

# 4) Slave-Host herunterfahren
log "Sende Shutdown an Slave-Host ${SLAVE_HOST}..."
# ConnectTimeout verhindert langes Hängen, falls Slave schon weg ist
if ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"${SLAVE_HOST}" "shutdown -h now" 2>/dev/null; then
    log "Shutdown-Befehl erfolgreich gesendet."
else
    log "HINWEIS: Konnte Shutdown nicht senden (Slave evtl. schon offline oder Netzwerkfehler)."
fi

# 5) Ping-Check (Optional, nur zur Bestätigung)
log "Warte auf Offline-Status des Slaves..."
HOST_IS_DOWN=false
for i in {1..12}; do # 2 Minuten warten
    if ! ping -c1 -W1 "${SLAVE_HOST}" >/dev/null 2>&1; then
        log "Slave-Host ${SLAVE_HOST} ist nun offline."
        HOST_IS_DOWN=true
        break
    fi
    sleep 10
done

if [[ "$HOST_IS_DOWN" == "false" ]]; then
    log "HINWEIS: Slave-Host antwortet noch immer auf Ping (evtl. Updates oder hängt)."
fi

log "==== ENDE: Workflow abgeschlossen ===="


Schritt 3: Der Schlüssel zum Erfolg – SSH ohne Passwort

Damit mein Primary-Server dem Secondary-Server sagen kann „Fahr jetzt runter“, muss er sich per SSH einloggen können – und zwar vollautomatisch ohne Passwort-Eingabe.

Das Lösen wir über SSH-Keys. Das klingt kompliziert, ist aber in einer Minute erledigt.

Key generieren: Logge dich auf der Shell deines Primary ein und gib ein:

    ssh-keygen -t ed25519 -C "masterkey" 

    Bestätige einfach alles mit Enter (kein Passwort/Passphrase setzen!).

    Key kopieren: Jetzt müssen wir diesen Schlüssel auf den Secondary übertragen. Dafür gibt es einen genialen Befehl:

    ssh-copy-id root@DEINE-SECONDARY-IP

    Hier musst du ein letztes Mal das Passwort des Secondary eingeben.

      Ab jetzt kann sich dein Primary jederzeit per ssh root@DEINE-SECONDARY-IP auf dem Secondary einloggen, ohne nach einem Passwort zu fragen. Das ist die Grundvoraussetzung, damit unsere Skripte funktionieren.


      Schritt 4: Alles automatisieren mit Cronjobs

      Wir haben die Hardware optimiert, hd-idle eingerichtet und Skripte geschrieben. Aber wir wollen das ja nicht jeden Tag manuell ausführen. Wir wollen Proxmox Energie sparen, ohne daran denken zu müssen.

      Dafür nutzen wir Cronjobs. Tippe in deine Proxmox-Shell:

      [Code-Block]

      Bash

      crontab -e
      

      Hier können wir genau festlegen, wann was passiert. Mein Zeitplan richtet sich nach der Sonne:

      • Vormittags (z.B. 09:50 Uhr): Das Start-Skript läuft an. Die Sonne kommt raus, wir haben Energie für Backups.
      • Nachmittags (z.B. 16:02 Uhr): Das Stop-Skript wird ausgeführt. Die Backups sollten durch sein, wir fahren alles runter.

      # Zeitzone optional festsetzen (empfohlen)
      CRON_TZ=Europe/Berlin
      
      # PATH setzen, damit man nicht immer /usr/bin/ schreiben muss
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      
      # Secondary-Proxmox + PBS + VM102 morgens starten
      50 9 * * * /root/automation/proxmox-slave-start.sh > /var/log/slave-workflow-last.log 2>&1
      # VM102 stoppen, PBS deaktivieren und Secondary-Proxmox herunterfahren (z. B. 16:02)
      2 16 * * * /root/automation/proxmox-slave-stop.sh >> /var/log/slave-workflow-last.log 2>&1
      
      # Nach Reboot erstmal wieder PBS Storage aktivieren , da PBS VM im Autostart
      @reboot /usr/sbin/pvesm set PBS_DXP8800Plus --disable 0 >> /var/log/pbs-storage.log 2>&1
      

      Durch diese Automatisierung läuft mein großes Backup-System nur wenige Stunden am Tag. Die restlichen 18-20 Stunden verbraucht dieser Teil meines Home Labs: 0 Watt.


      Schritt 5: Der Feinschliff – CPU Governor anpassen

      Zum Schluss noch ein kleiner Tipp für das i-Tüpfelchen. Moderne CPUs bieten verschiedene Energiemodi („Governor“).

      Auch das lässt sich per Cronjob steuern:

      • Nachts (Power-Save): Wenn ich schlafe und das System kaum Last hat, schalte ich die CPU in den powersave-Modus. Sie taktet runter und spart das letzte bisschen Watt.
      • Morgens (Performance): Wenn mein Home Assistant und andere Dienste aktiv werden, schalte ich zurück auf performance (oder ondemand), damit das System reaktionsschnell bleibt.

      Der Befehl dafür sieht in etwa so aus (abhängig von deiner CPU):

      cpupower frequency-set -g powersave
      

      Das mag nur ein paar Watt ausmachen, aber beim Thema Proxmox Energie sparen zählt am Ende die Summe aller Maßnahmen.

      # NACHT-MODUS (23:00 Uhr): Powersave
      0 23 * * * cpupower frequency-set -g powersave
      
      # TAG-MODUS (07:00 Uhr): Performance / maximale CPU Leistung
      0 7 * * * cpupower frequency-set -g performance && cpupower frequency-set -u $(cpupower frequency-info -l | tail -1 | awk '{print $2}')


      Fazit: Weniger Watt, mehr Freude

      Es ist ein komplexes Thema, und ja, man muss sich einmal hinsetzen und die Skripte einrichten. Aber der Aufwand lohnt sich. Ich konnte meinen Verbrauch von konstanten über 100 Watt auf durchschnittlich 39 Watt senken. Auf das Jahr gerechnet ist das eine massive Ersparnis auf der Stromrechnung, die das Hobby „Home Lab“ deutlich familienfreundlicher macht.

      Ich hoffe, diese Anleitung hilft dir dabei, dein Setup zu optimieren. Alle Skripte findest du natürlich auch hier zum Kopieren, damit du das Rad nicht neu erfinden musst.

      Was ist dein größter Stromfresser im Rack? Schreib es mir gerne in die Kommentare – vielleicht finden wir gemeinsam eine Lösung!

      Ugreen NAS mit Proxmox – So baust du dir dein eigenes HomeLab

      Proxmox Backup Server einrichten – so sichere ich mein komplettes HomeLab ( inkl. ZFS-Mirror, UGREEN NAs & Sync Setup)

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      Proxmox Backup Server Titelbild

      In meinem HomeLab spielt der Proxmox Backup Server eine zentrale Rolle. Viele unterschätzen das Thema Backups – aber wenn eine VM plötzlich weg ist oder Hardware ausfällt, sind die Schmerzen groß. Genau deshalb zeige ich dir in diesem Beitrag, wie ich meinen Proxmox Backup Server (PBS) eingerichtet habe: mit ZFS-Mirror, by-id-Passthrough, Backup-Jobs, Remote-Sync und Wiederherstellungsstrategie.

      Ich verwende in meinem Setup mehrere UGREEN NAS-Systeme, die hervorragend mit Proxmox harmonieren und gleichzeitig effizient und leise laufen. Meine Geräte:

      Dazu habe ich den Speicher erweitert:
      48 GB RAM für UGREEN NAS*
      👉 https://amzn.to/4nZzEfw


      Warum Backups mehr sind als nur eine Kopie

      Bevor wir starten, kurz der wichtigste Unterschied:

      • ZFS Mirror → schützt mich vor Plattenausfall
      • Proxmox Backup Server → schützt mich vor Datenverlust
      • Remote Sync → schützt mich vor Brand, Diebstahl, Defekt

      Ich erlebe in der Community häufig, dass ein RAID oder ZFS-Mirror als Backup verstanden wird. Das ist aber nur eine Verfügbarkeitsschicht, kein echtes Backup.
      Backups entstehen erst, wenn:

      • Daten inkrementell gespeichert werden
      • Versionen existieren
      • sie auf getrennter Hardware liegen

      Genau das erfüllt der Proxmox Backup Server im gezeigten Setup.


      Mein Setup – Überblick

      Ich nutze:

      • Proxmox 9 auf meinem HomeLab
      • UGREEN DXP8800 Plus als Haupt-NAS
      • UGREEN DXP4800 Plus als Backup-NAS
      • Ein weiterer PBS in der Cloud (optional)

      Damit kann ich selbst bei einem kompletten Hardware-Schaden alle Backups wiederherstellen.


      ZFS Mirror anlegen – die Basis

      Zuerst habe ich im UGREEN NAS ein ZFS Mirror aus 2 HDDs angelegt. Das schafft Redundanz und optimale Performance für den PBS-Datastore.

      In meinem Fall:

      Damit ZFS in der PBS-VM funktioniert, brauche ich die echten Laufwerke – und genau dafür ist Passthrough per /dev/disk/by-id unverzichtbar.


      Warum ich /dev/disk/by-id nutze

      Wenn du einfach /dev/sda oder /dev/sdb durchreichst, kann die Reihenfolge nach einem Reboot oder Update wechseln.
      Das wäre fatal.

      Darum nutze ich:

      ls -l /dev/disk/by-id
      

      Dort suche ich meine beiden HDDs heraus – in meinem Fall z. B.:

      • ata-ST4000DM004_XXXXXX
      • ata-ST4000DM004_YYYYYY

      Diese IDs trage ich später bei der VM als Passthrough ein.

      Erste HDD an scsi1:
      
      qm set 126 --scsi1 /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX12DC482U93
      
      Zweite HDD an scsi2:
      
      qm set 126 --scsi2 /dev/disk/by-id/ata-WDC_WD40EFPX-68C6CN0_WD-WX22DC4LF10E


      Proxmox Backup Server ISO vorbereiten

      Ich lade das ISO bei Proxmox herunter und packe es ins in mein Proxmox.

      Dann lege ich eine neue VM an:

      • BIOS: UEFI
      • Machine: q35
      • Disk: 64 GB (SSD-Simulation)
      • RAM: 2 GB
      • Cores: 2
      • Netzwerkkarte: VirtIO

      Alles sehr genügsam – PBS ist extrem leichtgewichtig.


      ZFS Mirror im PBS anlegen

      Sobald die VM läuft:

      1. Storage → Disks
      2. Die beiden Passthrough-HDDs auswählen
      3. ZFS → Mirror
      4. Namen vergeben (z. B. zfs-mirror-pbs)
      5. Erstellen


      PBS im Proxmox einbinden

      Jetzt binde ich den Backup Server in Proxmox ein:

      • Datacenter → Storage → Add → Proxmox Backup Server

      Hier brauche ich:

      • IP des PBS
      • Benutzer: root@pam
      • Datastore-Name (z. B. zfsmirrorpbs)
      • Fingerprint aus PBS → Dashboard → „Show Fingerprint“

      Nach dem Speichern erscheint der PBS sofort im Storage-Baum.

      Backup-Job in Proxmox erstellen

      Jetzt richte ich den eigentlichen Backup-Job ein:

      • Datacenter → Backup → Add
      • Schedule: täglich 21:00 Uhr
      • Mode: selected VMs (damit PBS sich nicht selbst sichert)

      Optional:

      • Notifications per Mail
      • Compression Zstandard
      • Bandwidth-Limit


      Retention – wie viele Backups ich behalte

      Hier verwende ich eine Mischung aus kurz und langfristig:

      • Keep Last: 5
      • Keep Daily: 1
      • Keep Weekly: 1
      • Keep Monthly: 2
      • Keep Yearly: 2

      Damit habe ich:

      • schnelle Wiederherstellung
      • Schutz vor Ransomware
      • sauberen Versionsverlauf


      Backup testen

      Ich starte den Job manuell:

      Backup → Run now

      Wenn die VM danach im Datastore auftaucht, weiß ich:
      Das Grundsetup passt.


      Mein zweiter PBS – Remote Sync für echte Sicherheit

      Jetzt kommt der wichtigste Teil:
      Backups müssen extern gespeichert werden.

      Ich habe darum ein zweites NAS:

      Dort läuft ebenfalls ein Proxmox Backup Server.

      Ich richte dann ein:

      • Remote
      • Pull-Job (mein Favorit, weil sicherer)
      • Automatische Synchronisation

      Beispiel:

      • Quelle: PBS #1 (Hauptsystem)
      • Ziel: PBS #2 (Backup-NAS)

      So habe ich die Daten:

      • vor Ort → schnell wiederherstellbar
      • auf zweiter Hardware → geschützt vor Totalausfall

      Option:
      Ich betreibe zusätzlich einen PBS in der Hetzner Cloud für maximale Redundanz.


      Energieoptimierung – mein Ansatz

      Viele fragen mich:

      „Kann ich das zweite NAS nicht einfach herunterfahren?“

      Ja, kann man:

      • Second-NAS per Sync-Zeitpunkt wecken
      • Nach Sync automatisch herunterfahren
      • ZFS-Spindown aktivieren
      • Nur einmal pro Tag synchronisieren

      Dadurch spare ich signifikant Energie.

      Ich plane dazu ein eigenes Video & Blogbeitrag. Falls Interesse besteht, bitte in den Kommentaren zum Video einen kleinen Hinweis geben.


      Restore – warum PBS hier so stark ist

      Was ich am Proxmox Backup Server besonders schätze:

      • Deduplizierung
      • Schnelle inkrementelle Sicherungen
      • Extrem schnelle Wiederherstellung
      • Versioning
      • Bandbreitenlimit
      • Datensparsamkeit

      Ich kann:

      • komplette VMs wiederherstellen
      • nur einzelne Dateien mounten
      • Snapshots vergleichen
      • Remote-Backups ziehen

      Im Fall eines Hardware-Defekts:

      • ZFS-Mirror in neue Hardware einstecken
      • PBS ISO booten
      • Pool importieren
      • Backups direkt wiederherstellen


      Fazit – ein zuverlässiges, effizientes Backup-System

      Mit dem Proxmox Backup Server, ZFS-Mirror und einem zweiten NAS habe ich endlich ein Setup, das:

      • sicher,
      • schnell,
      • energieeffizient
      • und absolut robust ist.

      Ich kann Hardware austauschen, VMs sofort wiederherstellen und selbst im Worst-Case bleibt mein komplettes HomeLab funktionsfähig.

      Wenn du ein UGREEN-NAS einsetzt oder ein kompaktes HomeLab betreiben möchtest, kann ich dir diese Lösungen ehrlich empfehlen:

      Wenn du Fragen hast oder dein eigenes Backup-Setup optimieren willst, schreib’s gern in die Kommentare unter dem Video.

      Folgende Beiträge zum Themen könnten dich auch interessieren:

      Unraid unter Proxmox installieren – Mein komplettes HomeLab-Setup Schritt für Schritt

      Ugreen NAS mit TrueNAS – mein Setup unter Proxmox, ZFS & SMB-Freigaben im Praxistest

      Ugreen NAS im Test – Mein Setup mit dem DXP8800 Plus & DXP4800 Plus für Smart Home und Proxmox

      Unraid unter Proxmox installieren – Mein komplettes HomeLab-Setup

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      Unraid unter Proxmox installieren – Mein komplettes HomeLab-Setup

      In diesem Beitrag möchte ich dir zeigen, wie ich Unraid unter Proxmox in meinem HomeLab betreibe – und warum dieses Setup für mich aktuell die beste Kombination aus Energieeffizienz, Flexibilität und Performance bietet. Ich nutze Proxmox schon lange als zentrale Virtualisierungsebene. Die Möglichkeit, darauf wiederum Unraid zu virtualisieren, ist für mich ein idealer Weg, moderne NAS-Funktionen mit der Flexibilität eines Linux-Hypervisors zu verbinden.

      Gerade im privaten Umfeld spielt Stromverbrauch eine immer wichtigere Rolle. Während ZFS mit TrueNAS im professionellen Einsatz für mich der absolute Favorit ist, lege ich zuhause Wert darauf, dass Platten zuverlässig schlafen können und nicht permanent durchlaufen müssen. Und genau dort punktet Unraid enorm.


      Warum ich Unraid unter Proxmox nutze

      Zu Beginn war ich selbst skeptisch, ob eine Virtualisierung von Unraid überhaupt sinnvoll ist. In der Praxis hat sich das aber schnell als echte Lösung herausgestellt. Ich habe einerseits die komplette Kontrolle von Proxmox inklusive Snapshots, VMs, Netzwerkmanagement und ZFS-Speicher für meine virtuellen Maschinen. Gleichzeitig nutze ich die Stärken von Unraid, nämlich ein extrem flexibles Array, Caching, schlafende HDDs, Docker-Management und eine sehr unkomplizierte Erweiterbarkeit.

      Was viele nicht wissen: Auf dem USB-Stick wird fast nie geschrieben. Der Stick dient in erster Linie als Boot-Medium, und lediglich Änderungen an der Konfiguration werden gespeichert. Dadurch ist er erstaunlich langlebig. Ich verwende Sticks mit garantiert eindeutiger GUID, da Unraid die Lizenz an diese ID bindet.


      Mein Hardware-Setup*

      In meinem Video habe ich ein UGREEN 4-Bay NAS als Beispiel genutzt. Mein produktives System ist das 8-Bay Modell mit deutlich mehr Kapazität. Die Vorgehensweise ist identisch, weshalb sich das Tutorial flexibel auf verschiedenste Hardware übertragen lässt.

      In meinem Testsystem stecken vier 4-TB-HDDs, zwei NVMe-SSDs im ZFS-Mirror (für Proxmox selbst) und eine virtuelle 250-GB-Disk, die ich später als Cache-Laufwerk für Unraid verwende. Zusätzlich habe ich den Arbeitsspeicher auf 48 GB erweitert, was im Alltag angenehm ist, aber für Unraid selbst gar nicht nötig wäre.


      Vorbereitung des USB-Sticks*

      Um Unraid nutzen zu können, lade ich das offizielle Flash-Tool herunter und spiele die aktuelle Version auf einen frisch formatierten Stick. Das geht wirklich unkompliziert. Wichtig ist nur, dass die GUID korrekt erkannt wird und der Stick zuverlässig von der Hardware gebootet werden kann. Danach stecke ich ihn in das UGREEN-NAS und kann in Proxmox direkt loslegen.

      Unraid unter Proxmox


      Die virtuelle Maschine in Proxmox

      Die VM für Unraid ist schnell erstellt. Ich vergebe ihr einen Namen, lasse das Installationsmedium leer und wähle als Maschinentyp q35, damit alle modernen PCIe-Funktionen verfügbar sind. Anschließend stelle ich 4 GB Arbeitsspeicher und zwei bis vier CPU-Kerne bereit. Eine virtuelle Festplatte lege ich an dieser Stelle noch nicht an, da Unraid später die tatsächlichen HDDs direkt erhält.

      Damit die VM korrekt startet, passe ich anschließend die Bootreihenfolge an. Zuerst soll der USB-Stick booten. Die restlichen Order sind eigentlich überflüssig.


      Passthrough von USB-Stick und SATA-Controller

      Das ist der wichtigste Schritt des gesamten Setups. Der USB-Stick wird anhand seiner Vendor- und Device-ID durchgereicht. Das sorgt dafür, dass Unraid beim Start genau diesen Stick erkennt – unabhängig davon, an welchem Port er steckt.

      Noch wichtiger ist das Durchreichen des SATA-Controllers. Ich wähle also unter den PCI-Geräten den kompletten Controller aus, aktiviere „Alle Funktionen“ und reiche ihn mit PCIe-Unterstützung an die VM durch. Das bedeutet: Unraid sieht die HDDs so, als wären sie direkt über SATA angeschlossen. Keine virtuelle Zwischenschicht, keine Geschwindigkeitseinbußen – echtes Bare-Metal-Feeling.

      Die zusätzliche virtuelle SCSI-Disk lege ich als SSD-emuliertes Laufwerk an. Sie dient später als Cache-Drive und trägt massiv dazu bei, dass die physikalischen HDDs lange schlafen können.


      Der erste Start von Unraid

      Nach dem Start bootet Unraid direkt vom USB-Stick. Sobald eine IP vergeben wurde, öffne ich die Weboberfläche und vergebe zuerst ein Administrator-Passwort. Danach starte ich die kostenlose Trial oder nutze meinen vorhandenen Lizenzschlüssel.

      Es ist wichtig zu wissen, dass die Lizenz fest an die eindeutige Stick-ID gebunden ist. Wechselst du den Stick, musst du die Lizenz übertragen – daher lohnt sich ein qualitativ hochwertiges Modell.


      Einrichtung des Arrays

      Jetzt geht es ans Herzstück von Unraid: Das Array. Ich entscheide mich bewusst für ein klassisches Setup mit Paritätsfestplatte. Für mich ist das der beste Kompromiss zwischen Sicherheit, Flexibilität und Energieverbrauch. Bei einem ZFS-System müssen alle Platten permanent laufen, da die Datenstruktur über mehrere Platten gleichzeitig verteilt ist. Unraid hingegen erlaubt es, Platten einzeln schlafen zu legen, solange sie nicht aktiv benötigt werden.

      Ich ordne die Platten der Reihe nach zu, vergebe die Parity-Disk und ordne zwei oder drei weitere HDDs als Datenlaufwerke zu. Das Cache-Drive definiere ich ebenfalls direkt, sodass größere Schreibvorgänge zunächst auf den schnellen virtuellen NVMe-Speicher gehen.

      Der erste Parity-Build dauert mehrere Stunden, was normal ist. Während dieser Zeit sollten möglichst keine Daten auf das Array geschrieben werden.


      Energie sparen mit Spindown und Cache

      Einer der Hauptgründe, warum ich Unraid privat so gerne nutze, ist der deutlich geringere Stromverbrauch. Sobald die Parität erstellt wurde, stelle ich das automatische Einschlafen der HDDs ein. Bei mir sind 15 Minuten ideal, aber 30 Minuten sind ebenfalls ein guter Wert, wenn regelmäßig kleinere Zugriffe stattfinden.

      Damit die Platten wirklich zuverlässig schlafen können, ist das Cache-Drive entscheidend. Es nimmt alle kurzfristigen Schreibvorgänge auf, und erst später bewegt der sogenannte „Mover“ die Daten auf die HDDs. Ich lasse den Mover bewusst zu Zeiten laufen, in denen meine PV-Anlage Strom liefert – idealerweise mittags.

      In Tests liegt mein System im Idle bei rund 30 W. Während der Parität waren es etwa 57 W. Mit größeren HDDs (7 200 U/min) steigt der Unterschied noch stärker an, weshalb ein stromsparendes Setup auf Dauer bares Geld spart.


      Netzwerk-Setup und 10-Gigabit-Anbindung

      Unraid bekommt bei mir zunächst eine DHCP-Adresse, die ich im Router fest verankere. Für besonders schnelle Kopiervorgänge nutze ich zusätzlich die 10-Gigabit-Schnittstelle des UGREEN-NAS. Diese reiche ich ebenfalls an die VM durch und vergebe ihr eine eigene statische IP.

      In meinen Tests erreiche ich über die 10-GbE-Verbindung bei Kopien auf den Cache problemlos Übertragungsraten von über 200 MB/s. Gerade wenn ich Daten auf das NAS oder zwischen VMs verschiebe, bringt das spürbare Vorteile. Ich weiß, die 10GbE Schnittstelle sollte ja viel mehr können. Aber meine VM , von der ich aus kopiere liegt auf langsamen SSD Speicher, da geht nicht mehr. Mit einem physischen Rechner und einer schnellen NVME lassen sich aber die Bandbereiten fast vollständig ausnutzen. Mir geht es hier aber primär um Energie und nicht um Performance.


      Docker, Apps und Benutzer

      Nachdem das System steht, aktiviere ich Docker und installiere das Community-Apps-Plugin. Damit stehen mir hunderte Anwendungen direkt mit einem Klick zur Verfügung – von Medienservern über Backuplösungen bis hin zu KI-Tools.

      Anschließend lege ich Benutzer und Freigaben an. Der typische Workflow sieht bei mir so aus, dass ich ein Share erst auf den Cache schreiben lasse und der Mover die Dateien später automatisch ins Array verschiebt. Das sorgt dafür, dass die HDDs über weite Strecken komplett schlafen können.


      Warum Unraid für mein HomeLab bleibt

      Auch wenn ich im professionellen Umfeld TrueNAS weiterhin sehr gerne einsetze, ist Unraid für mein HomeLab inzwischen die erste Wahl. Es erlaubt mir, flexibel Platten zu kombinieren, ja, es sind sogar Festplatten mit unterschiedlichen Größen möglich, sie einzeln schlafen zu lassen, Docker bequem zu verwalten und die Hardware sehr frei zu konfigurieren. Energietechnisch habe ich damit ein System, das im Leerlauf nicht mehr verbraucht als ein kleiner Büro-PC – und gleichzeitig jederzeit erweiterbar bleibt.

      Wenn du selbst ein HomeLab aufbaust und zwischen ZFS/TrueNAS und Unraid schwankst, kann ich dir nur empfehlen, einmal Unraid auszuprobieren. Gerade die Mischung aus Einfachheit, Flexibilität und Energieeffizienz macht das System im privaten Einsatz extrem attraktiv. Auch Unraid beherrscht mittlerweile ZFS. Aber der Fokus lag bei mir auf die Einsparung von Energie.

      Weitere Blogbeiträge zum Thema HomeLab:

      Ugreen NAS im Test – Mein Setup mit dem DXP8800 Plus & DXP4800 Plus für Smart Home und Proxmox

      Ugreen NAS mit Proxmox – So baust du dir dein eigenes HomeLab

      Ugreen NAS mit TrueNAS – mein Setup unter Proxmox, ZFS & SMB-Freigaben im Praxistest

      Ugreen NAS mit TrueNAS – mein ehrlicher Erfahrungsbericht im HomeLab

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      Ugreen NAS mit TrueNAS

      In meiner HomeLab-Reihe wollte ich unbedingt ausprobieren, wie sich ein Ugreen NAS mit TrueNAS in der Praxis schlägt.
      Ich habe ja bereits gezeigt, wie man Proxmox auf dem Ugreen NAS installiert und welche Möglichkeiten sich damit ergeben. Doch die meisten, die ein solches System aufbauen, wünschen sich auch klassische NAS-Funktionen: Datenspeicher, SMB-Freigaben, Backups und ein stabiles Dateisystem.

      In diesem Beitrag zeige ich dir Schritt für Schritt,
      wie ich TrueNAS als virtuelle Maschine unter Proxmox eingerichtet habe,
      welche Fallstricke es gab – und warum ich mich am Ende gegen TrueNAS in meinem HomeLab entschieden habe.


      Warum überhaupt TrueNAS?

      Ich bin ein großer Fan modularer Systeme. Proxmox läuft auf meinem Ugreen DXP4800 Plus bereits als Hypervisor, und damit lassen sich wunderbar virtuelle Maschinen oder Container verwalten.
      Aber ein Hypervisor allein ersetzt kein NAS. Deshalb lag es nahe, ein TrueNAS-System zu virtualisieren, um so die Vorteile beider Welten zu kombinieren:
      Virtualisierung, Datensicherheit, ZFS-Pool, Freigaben – alles in einem Gerät.

      Das Ganze ist kein Sponsored-Post. Ugreen hat mir zwar die Geräte (DXP4800 Plus und DXP8800 Plus) kostenlos zur Verfügung gestellt, aber die Entscheidung, wie ich sie einsetze und bewerte, liegt komplett bei mir.

      Transparenz

      Die in diesem Blogbeitrag vorgestellten Links sind Affiliate Links. D.h. , wenn ihr über diesen Link ein Produkt erwerbt, dann erhalte ich eine kleine Provision, ihr zahlt aber nicht mehr. Ihr unterstützt damit meine Arbeit. Herzlichen Dank dafür.


      Vorbereitung & TrueNAS-Image

      Zuerst benötigst du das Installations-Image. Das bekommst du auf der offiziellen TrueNAS-Website unter
      👉 Support → Resources → TrueNAS Community Edition

      Ein Login ist nicht nötig – einfach „No thank you, I have already signed up“ wählen und die neueste Stable-Version herunterladen.
      Ich habe das Image anschließend in meinen Download-Ordner gelegt, um es danach in Proxmox hochzuladen.


      Proxmox-Grundlage auf dem Ugreen NAS

      In meinem vorherigen Beitrag habe ich bereits erklärt, wie du Proxmox auf dem Ugreen NAS installierst.
      Falls du das noch nicht gesehen hast, findest du den Artikel hier:
      👉 Proxmox auf Ugreen NAS installieren

      Für dieses Setup verwende ich diesmal mein DXP4800 Plus.

      Das größere 8800-Modell läuft bei mir bereits produktiv – und genau dort habe ich eine andere Lösung im Einsatz, über die ich später noch sprechen werde.

      Mein DXP4800 Plus habe ich um 48 GB RAM erweitert (zusätzlich zu den 8 GB, die ab Werk verbaut sind) und zwei 2 TB NVMe-SSDs verbaut.

      Darauf läuft ein ZFS-RAIDZ1-Pool, um Redundanz zu haben.
      Das ist zwar kein Muss, aber für mich aus Sicherheitsgründen einfach sinnvoll.


      TrueNAS-Image in Proxmox hochladen

      Ich lade also das zuvor heruntergeladene TrueNAS-Image in Proxmox hoch.
      Das geht erstaunlich schnell – und schon liegt das ISO im lokalen Storage bereit.

      Kleiner Tipp:
      Wenn du später ähnliche Projekte machst, lohnt sich eine eigene ISO-Library in Proxmox, damit du deine Images zentral verwalten kannst.


      Virtuelle Maschine anlegen

      Jetzt wird’s spannend: In Proxmox lege ich eine neue virtuelle Maschine an.

      1. Name: TrueNAS
      2. OS: das hochgeladene ISO-Image auswählen
      3. System: Typ Q35
      4. Bios: Default (SeaBIOS)
      5. Disk: 64 GB (Writeback aktiviert, wenn NVMe-Storage)
      6. CPU: 2 Cores
      7. RAM: 8 GB
      8. Netzwerk: Standard (virtio)

      Damit ist die Grundkonfiguration fertig.
      Bevor ich starte, habe ich noch einen wichtigen Schritt gemacht:
      Ich habe den SATA-Controller des Ugreen NAS per PCI-Passthrough an die VM durchgereicht.
      Nur so kann TrueNAS später die physischen Festplatten erkennen – inklusive SMART-Werte.


      Controller-Passthrough & Festplatten

      Beim DXP4800 Plus funktioniert das problemlos.
      Beim DXP8800 Plus gibt es zwei Controller, aber nur der erste lässt sich durchreichen.
      Für mein Setup war das kein Problem, da ich ohnehin nur vier Platten brauchte und die anderen Platten für andere Anwendungen im Konzept gedacht sind.

      Damit TrueNAS auch später nested Virtualisierung oder Apps sauber ausführen kann, wähle ich bei der CPU den Typ „host“ – das ermöglicht maximale Kompatibilität.

      Danach starte ich die VM – und der Installer begrüßt mich mit dem bekannten Menü.


      TrueNAS Installation

      Ich wähle „Install/Upgrade“, nehme die zuvor angelegte virtuelle Disk (64 GB) als Ziel und vergebe ein Passwort.
      Wichtig:
      Der Login-User heißt seit einiger Zeit truenas_admin (nicht mehr root).

      Nach kurzer Installationszeit startet das System neu und zeigt mir eine IP-Adresse – in meinem Fall 192.168.100.152.
      Diese rufe ich im Browser auf, logge mich ein und bin direkt auf der Weboberfläche.


      Fehler & Korrektur – Controller nachreichen

      Beim ersten Start sehe ich allerdings keine Festplatten.
      Grund: Ich hatte vergessen, den Controller tatsächlich zuzuweisen.
      Also VM ausschalten, in die Hardware-Sektion gehen und folgendes hinzufügen:

      Add → PCI Device → Raw Device → ASMedia Serial ATA AHCI Controller → All Functions aktivieren → Add

      Nach dem Neustart sind alle Platten sichtbar – inklusive Seriennummern und SMART-Funktionen.


      ZFS-Pool anlegen

      Jetzt geht es an das Herzstück: den ZFS-Pool.
      Ich erstelle einen neuen Pool mit dem Namen zfspool und wähle RAIDZ1 als Layout.
      Das bietet mir Datensicherheit, weil eine Platte ausfallen darf, ohne dass Daten verloren gehen.

      Zur Erklärung:
      Bei vier 8-TB-Platten ergibt sich netto etwa 24 TB nutzbarer Speicher – eine Platte dient der Ausfallsicherheit.

      Ich verzichte in meinem Fall auf zusätzliche Cache- oder Log-Drives, da mein Fokus auf Datensicherheit, nicht auf Performance liegt. Außerdem brauche ich die NVMEs in meinem Proxmox Setup noch für weitere virtuelle Maschinen 🙂


      SMB-Freigaben & Benutzer

      Anschließend lege ich einen neuen Benutzer an (home) und vergebe ein Passwort.
      Unter Datasets wähle ich meinen Pool aus und erstelle ein Dataset namens Backup.
      Als Preset wähle ich SMB, damit automatisch der passende Dienst aktiviert wird.

      Nach dem Speichern fragt mich TrueNAS, ob der SMB-Service gestartet werden soll – natürlich bestätige ich das.
      Im nächsten Schritt weise ich meinem Benutzer die entsprechenden Berechtigungen zu:

      Edit → Add Item → User auswählen → Apply permissions recursively → Save Access Control List

      Danach kann ich auf meinem Windows-Rechner einfach \\192.168.100.152 eingeben, mich mit home anmelden – und sehe sofort meine Freigabe.

      Beim Testkopieren erreiche ich die volle Gigabit-Geschwindigkeit, also rund 110 MB/s.


      Performance & Stabilität

      Die Performance ist beeindruckend.
      Selbst bei gleichzeitigen Zugriffen reagiert das System stabil und flüssig.
      ZFS ist bekannt für seine Datensicherheit und Integrität, und das merkt man hier deutlich.

      Aber: Jede Medaille hat zwei Seiten.
      Denn ZFS hat einen hohen RAM-Bedarf und sorgt dafür, dass alle Platten aktiv bleiben, sobald auf den Pool zugegriffen wird.


      Energieverbrauch – mein ehrliches Fazit

      Ich habe das System mit meinem Home Assistant gemessen:
      Das Setup verbraucht rund 48 Watt im Idle-Betrieb.

      Das liegt daran, dass bei einem ZFS-Pool alle Festplatten ständig aktiv sind.
      Selbst wenn nur auf eine Datei zugegriffen wird, laufen alle vier HDDs mit.
      Rechnet man das hoch, sind das schnell 20–30 W Mehrverbrauch gegenüber einem Setup mit Spindown aller Platten. Und gerade bei einem Datengrab braucht man nicht 24/7 Zugriff und die Platten könnten eigentlich in den Spindown gehen.

      In meinem HomeLab möchte ich aber effizient arbeiten.
      Darum habe ich mich entschieden, künftig auf eine andere Lösung zu setzen: Unraid.
      Auch hier würde sich eine ZFS Infrastruktur umsetzen lassen, aber mit den gleichen Thema der Energieeffizienz. Unraid bietet aber auch die Möglichkeit ein Array anzulegen. Das hat zwar keine native ZFS-Struktur, erlaubt aber ebenfalls Datensicherheit über eine Paritätsplatte – und lässt ungenutzte Laufwerke schlafen.

      Über meinen Wechsel zu Unraid erzähle ich ausführlich im nächsten Teil der Serie. Wenn dich das interessiert, abonniere meinen Kanal auf youtube und verfolge meine Blog Beiträge.


      Fazit: TrueNAS auf dem Ugreen NAS – stark, aber nicht für jeden

      Mein Test hat gezeigt:
      Ein Ugreen NAS mit TrueNAS unter Proxmox ist absolut machbar – und technisch spannend.
      Die Einrichtung ist klar, das System stabil und durch ZFS sehr sicher.

      Aber für meinen Einsatzzweck im HomeLab war es nicht die perfekte Lösung.
      Der Energieverbrauch ist mir einfach zu hoch, und die permanente Aktivität aller Platten passt nicht zu meinem Konzept eines stromsparenden Setups.

      Für alle, die ein reines Daten-NAS mit Fokus auf Stabilität und Redundanz suchen, ist TrueNAS eine hervorragende Wahl.
      Wer dagegen Energieeffizienz und Flexibilität im Vordergrund hat, wird mit Unraid oder sogar Proxmox-LXC-Storage-Containern glücklicher.

      Ich persönlich bleibe bei meinem Proxmox-Host, kombiniere aber künftig virtuelle Maschinen, Container und ein stromsparendes Storage-System.


      Weiterführende Links


      Schlusswort

      Wenn du gerade ein Ugreen NAS besitzt oder planst, dir eins zuzulegen, dann ist TrueNAS auf jeden Fall einen Blick wert.
      Die Einrichtung macht Spaß, du lernst viel über Storage-Konzepte, und du kannst alles flexibel virtualisieren.

      Aber wie so oft gilt: Die perfekte Lösung hängt vom eigenen Ziel ab.
      Ich wollte mein HomeLab möglichst effizient gestalten – und TrueNAS hat mir gezeigt, wo die Grenzen liegen.

      Falls du Fragen hast, schreib’s gerne in die Kommentare bei Youtube oder schau auf meinem YouTube-Kanal vorbei – dort findest du das komplette Video mit allen Details.


      Ugreen NAS mit Proxmox – So baust du dir dein eigenes HomeLab

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      Einführung

      Ugreen hat mit den NAS-Systemen DXP4800 Plus, DXP6800 Plus, DXP8800 Plus und weiteren Varianten richtig starke Geräte auf den Markt gebracht. Was die Hardware angeht, bekommt man für den Preis wirklich viel Leistung. Beim Ugreen OS selbst war ich allerdings für mein Anforderungsprofil nicht ganz glücklich – zu eingeschränkt, zu wenig flexibel. Das trifft aber bei mir auf alle NAS Systeme zu… Also habe ich mir gedacht: Das muss besser gehen.

      In diesem Beitrag zeige ich dir daher, wie ich das Ugreen OS sichere, Proxmox auf dem NAS installiere und daraus ein durchdachtes HomeLab-Konzept aufbaue. Wir sprechen also nicht nur über eine Installation – wir erschaffen gemeinsam ein System, das flexibel, performant und zukunftssicher ist.

      Transparenz: UGreen hat mir die NAS – Systeme kostenlos zur Verfügung gestellt. Die Produkt Links in diesem Beitrag sind Affiliate Links. Ihr zahlt nicht mehr, ich erhalte allerdings eine kleine Provision.

      Ich habe in meinem Setup das UGreen DXP 8800 Plus als Hauptsystem verwendet.

      Angebot


      UGREEN NASync DXP8800 Plus 8-Bay NAS Server, Intel i5-1235U 10-Kern, 8GB DDR5, 128GB SSD, 2×10GbE, 2×M.2 NVMe, 8K HDMI, 2×Thunderbolt 4, Kompatibel mit Drittanbieter HDD/SSD (Diskless)

      • Zwei 10GbE-Netzwerkanschlüsse: Zwei 10GbE-Hochgeschwindigkeitsnetzwerkanschlüsse, die zu einer Bandbreite von 20 G zusammengefasst werden können, um Downloadgeschwindigkeiten von bis zu 2500 MB/s zu erreichen. Große Dateien lassen sich problemlos übertragen. Die Last zwischen den beiden Portverbindungen kann dynamisch angepasst und ausgeglichen werden, um die Übertragungseffizienz zu verbessern.
      • Beispiellose Verarbeitungsleistung: Mit einem Intel Core i5-Prozessor der 12. Generation mit 10 Kernen und 12 Threads wird die Verarbeitungsleistung im Vergleich zu früheren Prozessoren sprunghaft verbessert.
      • 8-Bay, 256 TB riesiger Datenspeicher: Ausgestattet mit acht SATA- und zwei M.2 NVMe-Laufwerkschächten verfügt das NASync DXP8800 Plus über eine maximale Speicherkapazität von bis zu 256 TB. Speichern Sie Tausende von HD-Filmen, Bildern und Dokumenten und machen Sie NASync zu einer Filmbibliothek, einem Fotoalbum und einem Dateispeicherplatz in einem.
      • Eine umfassende App: Anstatt einzelne Anwendungen für bestimmte Funktionen herunterzuladen, integriert die NAS-App diese Funktionen an einem Ort. Greifen Sie von einem praktischen Ort aus auf Speichermanager, Dateien, Fotos und mehr zu.
      • Professionelle Datensicherheit: Im Vergleich zu Cloud-Laufwerken ermöglicht NASync Benutzern, große Mengen persönlicher Daten auf vertrauenswürdigen lokalen Geräten zu speichern, wodurch Datenverlust und Überwachung weitestgehend verhindert werden. Datenübertragung und Konten können mit professioneller Verschlüsselung und Multi-Faktor-Authentifizierung vollständig geschützt werden.

      Wenn ihr in Summe nicht so viel Leistung benötigt, dann lässt sich auch ein sehr gutes Home Lab Setup mit dem DXP 4800 Plus umsetzen. Die ausgeführten Schritte bleiben die Gleichen. Ich will hier gar nicht im Detail auf die Hardware eingehen, dazu gibt es jede Menge guter Reviews auf Youtube. Mir geht es hier um die technische Umsetzung eines Home Lab Konzepts.

      Angebot


      UGREEN NASync DXP4800 Plus 4-Bay Desktop NAS, Intel Pentium Gold 8505 5-Core CPU, 8GB DDR5 RAM, 128G SSD, 1 * 10GbE, 1 * 2,5GbE, 2*M.2 NVMe-Steckplätze, 4K HDMI, Network Attached Storage (Diskless)

      • 12. Gen 5-Kern Intel Prozessor: Diese leistungsstarke CPU von Intel bietet ein außergewöhnlich flüssiges Erlebnis und sorgt für einen erheblichen Leistungszuwachs im Vergleich zu früheren Generationen.
      • Benutzerfreundliche App: Verwalte deinen Speicher und greife von all deinen Geräten auf deine Dateien zu, ganz einfach mit unserer maßgeschneiderten Software – und das alles ohne mehrere Tools oder komplizierte Drittanbieter-Software. Verfügbar für Android, iOS, Windows, Mac, Webbrowser und Smart-TVs.
      • 4 Bays und maximal 136TB: Die vier SATA-Bays unterstützen jeweils bis zu 30TB. Zusätzlich können zwei kompakte M.2 NVMe SSDs mit jeweils bis zu 8TB installiert werden (für SSD-Caching oder zusätzlichen schnellen Speicher). Bei vollständiger Ausnutzung aller Steckplätze beträgt die maximale Kapazität beeindruckende 136TB.
      • Blitzschnelle 10GbE- und 2.5GbE-Netzwerkanschlüsse: Der NASync DXP4800 Plus bietet Datenraten von bis zu beeindruckenden 1250 MB/s über zwei separate Anschlüsse. Ideal für alle, die eine schnelle und reibungslose Übertragung von 4K-Videos und großen Dateien benötigen.
      • Professionelle Datensicherheit: Mit sicherer Verschlüsselung sind Benutzerkonten und Daten vollständig geschützt.


      Mein Plan: Vom NAS zum HomeLab

      Ich wollte nicht einfach nur ein NAS betreiben, sondern eine Plattform schaffen, auf der virtuelle Maschinen, Backups und verschiedene Dienste parallel laufen können. Ugreen liefert mit dem DXP8800 Plus eine hervorragende Basis – drei NVMe-Slots, starke Hardware und genügend Platz für mehrere Festplatten.

      Geliefert wird das NAS mit 8GB RAM und einer NVME , wo sich das UGREEN OS drauf befindet. Bei mir war eine 128 GB Festplatte verbaut, was für ein Proxmox zunächst ausreichend ist. Die beiden anderen Slots habe ich mit NVME Festplatten von Samsung belegt.

      Mein Ziel war:

      • Proxmox als Hypervisor installieren
      • Unraid oder TrueNAS als virtuelles NAS betreiben
      • Backup-Server direkt integrieren
      • alle VMs zentral sichern

      Da mir die 8GB RAM für meinen Anwendungsfall nicht genügten, habe ich den RAM um 48GB RAM erweitert. Achtet dabei darauf, dass ihr DDR5 RAM mit 4800 MHz verwendet. Ich habe sehr positive Erfahrungen mit Corsair Vengeance gemacht. Es gehen aber genauso auch andere Hersteller. Als Hinweis sei noch erwähnt, dass in den Spezifikationen von UGREEN angegeben ist, dass lediglich 2×32 GB RAM funktionieren. Das ist aber nicht der Fall, es funktionieren auch 2×48 GB RAM. Ich habe mit einem 48GB RAM Riegel angefangen und zusätzlich den 8GB Riegel belassen. Wenn mein Bedarf an RAM mal steigen sollte, kommt ein weiterer Riegel hinzu.


      CORSAIR Vengeance SODIMM DDR5 RAM 48GB (1x48GB) 4800MHz CL40-40-40-77 1.10V Intel XMP 3.0 Laptop-Speicher – Schwarz (CMSX48GX5M1A4800C40)

      • Kompatibel mit nahezu allen Intel-Systemen: Der branchenübliche SODIMM-Formfaktor ist mit einer Vielzahl der gängigen Gaming- und -Performance-Laptops sowie Kompakt-PCs und mit Intel NUC-Kits kompatibel
      • Einfache Installation: Für die Installation in den meisten Laptops wird lediglich ein Schraubendreher benötigt
      • Maximaler Geschwindigkeitsschub: Für kürzere Ladezeiten, Multitasking und weitere Funktionen stellt VENGEANCE SODIMM in kompatiblen Systemen automatisch auf die maximal unterstützte Geschwindigkeit um
      • Umfassend getestete Zuverlässigkeit: Die Module sind gründlich geprüft und getestet, um eine erstklassige Leistung und Zuverlässigkeit zu gewährleisten
      • Kompatibilität: Intel 13th or 14th Gen Mobile-CPUs

      Damit das funktioniert, beginne ich mit einem vollständigen Backup des Ugreen-Betriebssystems, bevor es gelöscht wird.


      Schritt 1: Backup des Original-Systems mit Clonezilla

      Bevor man irgendetwas verändert, sollte man das Ugreen OS vollständig sichern. Ich habe dafür Clonezilla verwendet – ein zuverlässiges Open-Source-Tool, das ein komplettes Image der Festplatte erstellt. Man kann auch die vorhandene NVME mit dem UGreen OS ausbauen und eine andere NVME dafür einbauen, aber warum sollte ich Ressourcen verschwenden, wenn ich doch mit einem Backup ebenfalls das Betriebssystem sauber gesichert bekomme und diesen Zustand jederzeit wiederherstellen kann ?

      Vorgehen:

      1. Über KVM-over-IP greife ich auf das NAS zu.
        • Das Gerät simuliert Tastatur, Maus und Monitor über den Browser.
        • Ich kann so ins BIOS oder direkt auf den Installationsprozess zugreifen.

      GL.iNet KVM-Fernsteuerung über das Internet, 4K-Auflösung, Tailscale,Fernsteuerung von Tastatur, Video und Maus – ideal für Home-Office, Rechenzentren, IT-Verwaltung und industrielle Anwendungen

      • 【Zuverlässige Fernsteuerung】 Starten Sie defekte Computer neu, installieren Sie das Betriebssystem per BIOS-Steuerung und schalten Sie sie mit einer Zubehörerweiterung sogar aus der Ferne ein. Nie wieder müssen Sie Rechenzentren aufsuchen, um abgestürzte Systeme zu reparieren – ideal für IT-Teams und Smart-Home-Enthusiasten.
      • 【Universelle Kompatibilität & einfache Einrichtung】 Mühelose Verbindung zu Laptops, Desktops, Servern, Industrie-PCs und Streaming-Geräten. Einfache Ein-Klick-Verbindung per App – der zu steuernde Computer benötigt keine zusätzliche Software.
      • 【4K Auflösung & Audio-Unterstützung】 Unterstützung für Gigabit-Netzwerkzugriff. Erleben Sie Desktop-Qualität mit einer Auflösung von 3840 x 2160 bei 30 Hz und einer Verzögerung von < 60 ms. Mit synchronisiertem Audio fühlt sich die Arbeit aus der Ferne so natürlich an, als wäre man vor Ort.
      • 【Sofortige Dateiübertragung】 Bewältigen Sie den Nachteil herkömmlicher KVM-Geräte, Dateien nicht übertragen zu können: Unsere Lösung ermöglicht die nahtlose Dateifreigabe zwischen Geräten – keine lästigen Synchronisierungsprobleme mehr bei der Fernarbeit.
      • 【Zugriff überall und jederzeit】 Sichern Sie sich ständigen Fernzugriff auf Ihre Computer und steigern Sie Ihre Produktivität – egal, ob Sie zu Hause oder unterwegs sind. Geeignet für die Fernarbeit und zum Verwalten mehrerer Computer.

      Ich nutze gerne ein KVM over IP Device, weil ich oftmals keine Lust habe einen extra Monitor , Tastatur und Maus anzuschließen. So kann ich alles bequem über meinen PC im Browser konfigurieren.

      Der nächste Schritt ist nun das Clonezilla Image zu booten und wie in im Video gezeigt die Einstellungen vorzunehmen und ein Backup des UGreen OS durchzuführen. Das Clone Zilla Boot Image findet ihr hier . Ich habe die „stable“ Variante gewählt. Als Speicherziel für das Backup habe ich auf einem anderen NAS eine SMB/CIFS Freigabe erstellt. Hier könnt ihr jede beliebige Freigabe verwenden.

      Achte unbedingt darauf, im BIOS den Watchdog zu deaktivieren, sonst startet das NAS mitten in der Sicherung neu.

      Nach Abschluss hatte ich ein Image von etwa 3,4 GB Größe – klein, aber mit allem Wichtigen. Damit kann ich jederzeit das Originalsystem wiederherstellen.


      Schritt 2: Installation von Proxmox VE 9.0.1

      Jetzt geht’s ans Eingemachte: Proxmox installieren.
      Ich habe die aktuelle ISO (Version 9.x) heruntergeladen und sie über mein KVM-System gemountet.

      Proxmox Download Link

      Wichtige Punkte bei der Installation:

      • Installationsziel: die interne 128-GB-SSD
      • Sprache und Tastatur: Deutsch
      • Netzwerk manuell konfigurieren, z. B.:
        • IP: 192.168.100.2
        • Gateway: 192.168.100.1/23
        • DNS: 1.1.1.1
      • Root-Passwort und E-Mail hinterlegen
      • automatischen Reboot aktivieren

      In der Regel werden euch die Netzwerkeinstellungen korrekt vorgegeben. Bei mir war es allerdings so, dass er das /23 Netzwerk scheinbar nicht richtig erkannt hat. Insofern habe ich die Settings manuell anpassen müssen. Wenn ihr ein /24 er Netzwerk habt, sollte das ohne manuelle Anpassungen funktionieren.

      Nach dem Neustart kann man sich über den Browser anmelden:

      https://192.168.100.2:8006
      

      Standard-Login ist root, gefolgt vom Passwort aus der Installation.


      Schritt 3: Repositories und Updates einrichten

      Nach der Erstinstallation meldet sich Proxmox mit dem Hinweis auf eine fehlende Subscription.
      Das kann man entweder offiziell lizenzieren oder – wie ich es gemacht habe – mit einem kleinen Helfer-Script umgehen.

      Proxmox Helper Scripts PVE Post Install

      Ich nutze das Proxmox VE Helper Script, um die richtigen Repositories zu aktivieren:

      1. Enterprise-Repos deaktivieren
      2. No-Subscription-Repos aktivieren
      3. Test-Repos deaktivieren
      4. Subscription-Hinweis ausschalten
      5. System aktualisieren

      bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"
      

      Danach läuft ein automatischer Update-Prozess. Wichtig: Das Terminal offen lassen – der Vorgang dauert einige Minuten. Nach dem anschließenden Reboot ist das System vollständig auf Proxmox VE 9.x.x aktualisiert.


      Schritt 4: Überblick über die Hardware

      Wenn du dich in der Weboberfläche anmeldest, siehst du:

      • Drei NVMe-Laufwerke, ideal für virtuelle Maschinen
      • Mehrere HDD-Bays (je nach Modell bis zu 8 Stück)
      • CPU-Auslastung und Speicherübersicht

      Damit eignet sich das Ugreen NAS perfekt für:

      • Proxmox-Cluster
      • Virtuelle NAS-Instanzen (z. B. Unraid oder TrueNAS)
      • Backup-Server
      • Home Assistant-VMs oder Container



      Schritt 6: Nächste Schritte – Unraid oder TrueNAS als VM

      Jetzt, wo Proxmox läuft, kannst du entscheiden, welche NAS-Software du darauf als virtuelle Maschine nutzen willst.
      Ich werde im nächsten Teil zeigen, wie man Unraid oder TrueNAS installiert, Festplatten durchreicht und ein performantes NAS-System in Proxmox betreibt.

      Mich interessiert deine Meinung:
      ➡️ Soll ich zuerst Unraid oder TrueNAS zeigen? Schreib’s mir gerne in die Youtube Kommentare!


      Fazit

      Mit wenigen Schritten lässt sich das Ugreen DXP8800 Plus oder auch das kleinere DXP4800 in ein vollwertiges HomeLab-System verwandeln.
      Statt das eingeschränkte Ugreen OS zu nutzen, erhältst du mit Proxmox:

      • volle Kontrolle über Hardware und Virtualisierung
      • flexible Backup- und Restore-Möglichkeiten
      • unbegrenzte Erweiterbarkeit

      Ich bin beeindruckt, wie gut sich das System schlägt – trotz kompakter Bauweise. Und das Beste:
      Du behältst dein ursprüngliches Ugreen OS als Image, falls du es jemals zurückspielen möchtest.

      Im nächsten Teil zeige ich dir die Integration eines virtuellen NAS und den Aufbau eines echten HomeLab-Konzepts, das Backup-Server, Smart-Home-Automatisierung und zentrale Datenspeicherung vereint. Auch das Thema Redundanz wird in den weiteren Teilen noch behandelt werden.


      Proxmox API Home Assistant Backup automatisieren – VMs überwachen & sichern

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      Einleitung

      Proxmox API Home Assistant Backup – in diesem Praxis‑Guide lernst du, wie du mithilfe der Proxmox API den Zustand deiner virtuellen Maschinen abfragst, Dashboards in Home Assistant erstellst und Backups automatisierst. Statt auf HACS setzt du dabei auf REST‑Sensoren und API‑Calls, um deine VMs sicher zu überwachen und zu sichern.

      Vorbereitung in Proxmox – Benutzer, Token und Rechte einrichten

      Bevor du in Home Assistant loslegen kannst, musst du Proxmox entsprechend vorbereiten.

      API‑Benutzer und Token anlegen

      Erstelle im Proxmox DataCenter einen neuen User (z. B. homeassistant) ohne Passwort, denn wir arbeiten mit API‑Tokens. Wähle als Realm pve und lege anschließend unter API Token einen neuen Token für diesen User an. Achte darauf, Privilege Separation zu deaktivieren. Kopiere dir den Token sofort, da er später nicht mehr angezeigt wird.

      Proxmox API Home Assistant Backup - User

      Proxmox API Home Assistant Backup - API Token

      Rollen konfigurieren

      Für den Zugriff auf VM‑Informationen und Backups benötigen wir passende Rollen:

      • Lege eine neue Rolle (z. B. homeassistant-role) mit den Privilegien VM.Audit, Datastore.Audit und Datastore.AllocateSpace, VM.Backup an.
      • Weise diese Rolle dem User auf den benötigten Pfaden zu: dem Node (/nodes/pve-lerch) und den VMs (/vms/*).

      Diese granularen Berechtigungen sorgen dafür, dass Home Assistant lediglich die benötigten Daten abrufen und einen Proxmox API Home Assistant Backup auslösen darf.

      Proxmox API Home Assistant Backup - Rollen definieren

      Home Assistant konfigurieren – REST‑Sensoren anlegen

      Im nächsten Schritt richten wir Home Assistant ein. Falls du noch keinen File Editor installiert hast, installiere diesen im Add-on Store von Home Assistant.

      Proxmox API Home Assistant Backup - Add-on File Editor

      REST‑Sensor für VM‑Informationen

      Über den YAML‑Eintrag rest: definieren wir einen Sensor, der regelmäßig einen GET‑Request an die Proxmox API sendet. Die URL lautet beispielsweise:

      https://<proxmox-host>/api2/json/nodes/pve-larch/qemu

      Als Header gibst du Authorization: PVEAPIToken=<user>@pve!<token-id>=<token> an. Im value_template kannst du die JSON‑Antwort weiterverarbeiten und die Daten in Attributen speichern.

        - resource: https://192.168.101.69:8006/api2/json/nodes/pvelerch/qemu
          method: GET
          headers:
            Authorization: "PVEAPIToken=homeassistant@pve!proxmox=be729a21-e76b-430b-84bf-40d096d035a6"
          verify_ssl: false
          scan_interval: 10
          sensor:
            - name: "PVELerch VM Raw"
              unique_id: pvelerch_vm_raw
              value_template: "OK"
              json_attributes:
                - data

      Vergiss nicht, Home Assistant neu zu starten, damit der Sensor angelegt wird. Anschließend siehst du eine Liste aller VMs als JSON‑Attribut, inklusive ihrer Namen, IDs und Status.

      REST‑Sensor für LXC‑Container

      Für LXC‑Container wiederholst du den Sensor mit dem Endpunkt .../lxc. Denke daran, dass nicht alle API‑Attribute identisch sind – die Belegung des Festplattenspeichers (disk-usage) steht nur bei Containern zur Verfügung.

        - resource: https://192.168.101.69:8006/api2/json/nodes/pvelerch/lxc
          method: GET
          headers:
            Authorization: "PVEAPIToken=homeassistant@pve!proxmox=be729a21-e76b-430b-84bf-40d096d035a6"
          verify_ssl: false
          scan_interval: 10
          sensor:
            - name: "PVELerch LXC Raw"
              unique_id: pvelerch_lxc_raw
              value_template: "OK"
              json_attributes:
                - data

      Hier nochmal beide Rest Sensoren für die Configuration.Yaml. Beachte, dass am Anfang einmal „rest:“ stehen muss.

      rest:
        - resource: https://192.168.101.69:8006/api2/json/nodes/pvelerch/qemu
          method: GET
          headers:
            Authorization: "PVEAPIToken=homeassistant@pve!proxmox=be729a21-e76b-430b-84bf-40d096d035a6"
          verify_ssl: false
          scan_interval: 10
          sensor:
            - name: "PVELerch VM Raw"
              unique_id: pvelerch_vm_raw
              value_template: "OK"
              json_attributes:
                - data
                
        - resource: https://192.168.101.69:8006/api2/json/nodes/pvelerch/lxc
          method: GET
          headers:
            Authorization: "PVEAPIToken=homeassistant@pve!proxmox=be729a21-e76b-430b-84bf-40d096d035a6"
          verify_ssl: false
          scan_interval: 10
          sensor:
            - name: "PVELerch LXC Raw"
              unique_id: pvelerch_lxc_raw
              value_template: "OK"
              json_attributes:
                - data

      Dashboard gestalten – Markdown‑Karte für VM‑Übersicht

      Um die Daten ansprechend zu visualisieren, kannst du eine Markdown‑Karte in deinem Home‑Assistant‑Dashboard einfügen. Im Template liest du die Attribute der Sensoren aus und listest jede VM mit Name, Uptime, Status und, bei LXC‑Containern, prozentual belegtem Speicherplatz auf.

      Proxmox API Home Assistant Backup - Mark Down Karte

      {% set vms = state_attr('sensor.pvelerch_vm_raw', 'data') or [] %}
      {% set lxcs = state_attr('sensor.pvelerch_lxc_raw', 'data') or [] %}
      
      ## 🖥️ Virtuelle Maschinen (QEMU)
      
      {% for vm in vms | sort(attribute='vmid') %}
        {% set days = vm.uptime // 86400 %}
        {% set hours = (vm.uptime % 86400) // 3600 %}
        {% set minutes = (vm.uptime % 3600) // 60 %}
        {% if days > 0 %}
          {% set uptime_str = days ~ 'd ' ~ hours ~ 'h' %}
        {% else %}
          {% set uptime_str = hours ~ 'h ' ~ minutes ~ 'm' %}
        {% endif %}
      - **{{ vm.vmid }}** | {{ vm.name }} | Uptime: {{ uptime_str }} | {{ "🟢" if vm.status == "running" else "🔴" }}
      {% endfor %}
      
      ## 📦 LXC-Container
      
      {% for lxc in lxcs | sort(attribute='vmid') %}
        {% set days = lxc.uptime // 86400 %}
        {% set hours = (lxc.uptime % 86400) // 3600 %}
        {% set minutes = (lxc.uptime % 3600) // 60 %}
        {% if days > 0 %}
          {% set uptime_str = days ~ 'd ' ~ hours ~ 'h' %}
        {% else %}
          {% set uptime_str = hours ~ 'h ' ~ minutes ~ 'm' %}
        {% endif %}
      - **{{ lxc.vmid }}** | {{ lxc.name }} | Disk: {{ ((lxc.disk / lxc.maxdisk) * 100) | round(1) if lxc.maxdisk and lxc.maxdisk > 0 else 'n/a' }} % | Uptime: {{ uptime_str }} | {{ "🟢" if lxc.status == "running" else "🔴" }}
      {% endfor %}

      So siehst du live, wenn eine VM gestoppt wird oder startet. Über Automationen kannst du sogar Benachrichtigungen verschicken, wenn sich der Status ändert. Achte darauf, dass du die Entitäten auf deine Entitätsnamen anpasst.

      sensor.pvelerch_vm_raw

      sensor.pvelerch_lxc_raw

      Monitoring & Test – Live‑Überwachung von VMs

      Teste deine Konfiguration, indem du eine VM in Proxmox stoppst und wieder startest. Die Änderungen sollten in der Markdown‑Karte nach dem nächsten Scan‑Intervall sichtbar sein. Dieses Szenario zeigt, wie zuverlässig die REST‑API im Zusammenspiel mit Home Assistant funktioniert.

      Backups per API auslösen

      Eines der mächtigsten Features der Proxmox API ist die Möglichkeit, Backups zu starten.

      Rollen erweitern

      Erweitere deine Rolle um die Berechtigungen VM.Backup und Datastore.AllocateSpace, damit der User Backups auslösen darf ( haben wir schon im ersten Schritt getan ). Vergiss nicht, auch den Storage‑Pfad (/storage) mit dieser Rolle zu verknüpfen.

      Proxmox API Home Assistant Backup - User Zugriffsrechte

      REST‑Command für VZDump

      In Home Assistant legst du unter rest_command: einen neuen Befehl an. Die URL endet diesmal auf /vzdump, die Methode ist POST, und als Payload übergibst du Parameter wie vmid, mode (z. B. snapshot), storage und compress.

      rest_command:
        pvelerch_backup:
          url: "https://192.168.101.69:8006/api2/json/nodes/pvelerch/vzdump"
          method: POST
          headers:
            Authorization: "PVEAPIToken=homeassistant@pve!proxmox=be729a21-e76b-430b-84bf-40d096d035a6"
            Content-Type: "application/x-www-form-urlencoded"
          payload: "vmid=100,101,104,106,108,112,113,114,116,119,102,103,105&mode=snapshot&storage=PBS&compress=zstd"
          verify_ssl: false

      Ein Aufruf dieses REST‑Commands startet sofort den Backup‑Job in Proxmox. Über die Home‑Assistant‑Entwicklerwerkzeuge kannst du den Befehl testen. In einer Automation oder auf einem Button platziert, kannst du einen Proxmox API Home Assistant Backup sogar zeit‑ oder ereignisgesteuert auslösen.

      Fazit & Ausblick

      Mit ein wenig Konfigurationsaufwand lässt sich die Proxmox API hervorragend in Home Assistant integrieren. Du kannst den Zustand deiner VMs und LXC‑Container überwachen, in Dashboards visualisieren und sogar Backups per Knopfdruck starten. Nutze diese Lösung als Grundlage für weitere Automatisierungen, zum Beispiel um Benachrichtigungen zu verschicken oder externe Dienste einzubinden.

      Wenn du mehr über Energie‑Management erfahren willst, schau dir auch unseren Beitrag zur EVCC‑Einbindung in Home Assistant an. Für Einsteiger in Proxmox empfehlen wir den Artikel Proxmox Grundinstallation Schritt für Schritt.

      Link‑Liste

      Paperless NGX komplett einrichten – mit REST API Home Assistant Sensor

      👉 Direkt auf YouTube schauen und abonnieren:
      Smart Home & More auf YouTube

      In diesem Video zeige ich euch, wie ihr unter Proxmox ( LXC oder VM), oder einem separaten PC Paperless NGX einrichtet. Da es recht viele Dinge dabei zu berücksichtigen gibt, habe ich euch dafür 3 Skripte erstellt.

      1. Installation
      2. Backup
      3. Restore

      Mit diesen Skripten wird euch fast die gesamte Arbeit abgenommen.

      Möchtest du Paperless ngx als Home Assistant Addon installieren, findest du hier eine Anleitung dazu:
      https://youtu.be/wCiSkHQtYEE

      Wichtiger Hinweis ! Bitte unbedingt beachten!

      Ich habe die Freigabenamen umbenannt. Im Video bin ich darauf nochmal kurz eingegangen. Die Freigaben heißen nun:

      consume

      backup

      restore

      D.h. , wenn unter Windows die Freigaben gemountet werden, müssen diese Freigabenamen verwendet werden !

      Skript install_paperless.sh

      Hinweis: Die Skripte wurden auf Postgres 17, Redis 8 und Gotenberg „latest“ aktualisiert ( 12.11.2025)

      #!/bin/bash
      set -euo pipefail
      
      # ---------------------------------------
      # Helpers
      # ---------------------------------------
      log()  { echo -e "\033[1;32m[INFO]\033[0m $*"; }
      warn() { echo -e "\033[1;33m[WARN]\033[0m $*"; }
      err()  { echo -e "\033[1;31m[ERR ]\033[0m $*"; }
      
      # ---------------------------------------
      # Passwörter & Admin
      # ---------------------------------------
      prompt_for_password() {
        local password password_confirm
        if [[ "$1" == "PAPERLESS_PASSWORD" ]]; then
          echo -e "\n💡 Hinweis: Dieses Passwort wird für den Linux-Benutzer 'paperless' und den Samba-Server verwendet."
          echo -e "Es wird für den Zugriff auf freigegebene Samba-Ordner benötigt.\n"
        fi
        while true; do
          echo -e "\n🔒 Bitte geben Sie das Passwort für **$1** ein:"
          read -s password
          echo -e "\n🔒 Bitte bestätigen Sie das Passwort:"
          read -s password_confirm
          if [[ "$password" == "$password_confirm" ]]; then
            echo -e "\n✅ Passwort erfolgreich gesetzt für **$1**.\n"
            eval "$2='$password'"
            break
          else
            echo -e "\n❌ Die Passwörter stimmen nicht überein. Bitte erneut eingeben.\n"
          fi
        done
      }
      
      prompt_for_admin_user() {
        echo -e "\n👤 Bitte geben Sie den **Admin-Benutzernamen** ein (Standard: paperless):"
        read -r admin_user_input
        ADMIN_USER="${admin_user_input:-paperless}"
        echo -e "\n✅ Admin-Benutzer wurde auf **'$ADMIN_USER'** gesetzt.\n"
      }
      
      # Eingaben
      prompt_for_password "PAPERLESS_PASSWORD" PAPERLESS_PASSWORD
      prompt_for_admin_user
      prompt_for_password "ADMIN_PASSWORD" ADMIN_PASSWORD
      
      SAMBA_PASSWORD="$PAPERLESS_PASSWORD"
      DB_PASSWORD="paperless"
      
      # ---------------------------------------
      # Pakete & Docker-Repo
      # ---------------------------------------
      update_and_install_dependencies() {
        log "Aktualisiere Paketliste und installiere benötigte Pakete…"
        sudo apt update
        sudo apt install -y apt-transport-https curl jq gnupg openssh-server \
                            samba samba-common-bin ca-certificates lsb-release
      }
      
      add_docker_repo() {
        log "Füge Docker GPG-Schlüssel und Repository hinzu…"
        sudo mkdir -p /etc/apt/keyrings
        if [[ ! -f /etc/apt/keyrings/docker.gpg ]]; then
          curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
          sudo chmod a+r /etc/apt/keyrings/docker.gpg
        fi
        . /etc/os-release
        DOCKER_REPO="deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable"
        echo "$DOCKER_REPO" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
        sudo apt update
      }
      
      # ---------------------------------------
      # User/Gruppe
      # ---------------------------------------
      ensure_paperless_user_and_group() {
        if ! getent group paperless &>/dev/null; then
          log "Erstelle Gruppe 'paperless' mit GID 1002…"
          sudo groupadd -g 1002 paperless
        fi
        if ! id -u paperless &>/dev/null; then
          log "Erstelle Benutzer 'paperless' (UID 1002, GID 1002)…"
          sudo useradd -m -s /bin/bash -u 1002 -g paperless paperless
          echo "paperless:$PAPERLESS_PASSWORD" | sudo chpasswd
        fi
      }
      
      # ---------------------------------------
      # Docker installieren
      # ---------------------------------------
      install_docker() {
        if ! command -v docker &>/dev/null; then
          log "Installiere Docker…"
          sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
          sudo systemctl enable --now docker
        fi
        if ! groups paperless | grep -q "\bdocker\b"; then
          log "Füge Benutzer 'paperless' zur Gruppe 'docker' hinzu…"
          sudo usermod -aG docker paperless
        fi
      }
      
      # ---------------------------------------
      # AppArmor/runc-Bug NUR bei Bedarf mitigieren
      # ---------------------------------------
      mitigate_if_apparmor_bug() {
        . /etc/os-release
        if [[ "${ID:-}" != "ubuntu" ]]; then
          log "Nicht Ubuntu – überspringe AppArmor/runc-Erkennung."
          return 0
        fi
        if ! command -v docker >/dev/null 2>&1; then
          warn "Docker noch nicht installiert – Erkennung wird später erneut versucht."
          return 0
        fi
      
        sudo systemctl enable --now docker >/dev/null 2>&1 || true
        docker pull hello-world >/dev/null 2>&1 || true
        docker pull busybox:latest >/dev/null 2>&1 || true
      
        local TEST_OUT=0 OUTPUT
        if ! OUTPUT="$(docker run --rm --pull=never hello-world 2>&1)"; then
          TEST_OUT=1
        fi
        if [[ $TEST_OUT -ne 0 ]]; then
          if ! OUTPUT="$(docker run --rm --pull=never busybox:latest true 2>&1)"; then
            TEST_OUT=2
          else
            TEST_OUT=0
          fi
        fi
      
        if [[ $TEST_OUT -ne 0 ]] && echo "$OUTPUT" | grep -q 'net\.ipv4\.ip_unprivileged_port_start.*permission denied'; then
          warn "Erkannt: AppArmor/runc-Problem beim Container-Start."
          if ! dpkg -s containerd.io >/dev/null 2>&1; then
            warn "containerd.io nicht installiert (vermutlich Ubuntu-Containerd). Downgrade wird übersprungen."
            return 0
          fi
          local TARGET_VERSIONS=()
          case "$VERSION_CODENAME" in
            plucky) TARGET_VERSIONS=("1.7.28-1~ubuntu.25.04~plucky" "1.7.27-1") ;;
            noble)  TARGET_VERSIONS=("1.7.28-1~ubuntu.24.04~noble"  "1.7.27-1") ;;
            jammy)  TARGET_VERSIONS=("1.7.28-1~ubuntu.22.04~jammy"  "1.7.27-1") ;;
            *)      TARGET_VERSIONS=("1.7.27-1") ;;
          esac
          local CURR; CURR="$(dpkg-query -W -f='${Version}\n' containerd.io || true)"
          for v in "${TARGET_VERSIONS[@]}"; do
            if [[ "$CURR" == "$v" ]]; then
              log "containerd.io bereits auf gewünschter Version ($v). Setze Hold."
              sudo apt-mark hold containerd.io || true
              return 0
            fi
          done
          local AVAILABLE SELECTED
          AVAILABLE="$(apt-cache madison containerd.io | awk '{print $3}')"
          SELECTED=""
          for v in "${TARGET_VERSIONS[@]}"; do
            if echo "$AVAILABLE" | grep -qx "$v"; then SELECTED="$v"; break; fi
          done
          if [[ -z "$SELECTED" ]]; then
            warn "Keine passende containerd.io-Version im Repo gefunden – Mitigation übersprungen."
            return 0
          fi
          log "Mitigation: Downgrade/Pin containerd.io → $SELECTED"
          sudo apt-mark unhold containerd.io || true
          sudo apt-get install -y --allow-downgrades "containerd.io=${SELECTED}"
          sudo apt-mark hold containerd.io
          sudo systemctl restart containerd docker
        else
          log "Kein AppArmor/runc-Problem erkannt – keine Mitigation nötig."
        fi
      }
      
      # ---------------------------------------
      # Samba
      # ---------------------------------------
      configure_samba() {
        sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak || true
        sudo mkdir -p /data/paperless/{backup,restore,consume,data,media,export,postgresql/_data,redis/_data}
        sudo chown -R paperless:paperless /data/paperless/
        sudo chmod -R 770 /data/paperless/
      
        if ! grep -q "^\[consume\]" /etc/samba/smb.conf; then
          sudo tee -a /etc/samba/smb.conf >/dev/null <<'EOF'
      
      [consume]
         comment = Paperless Daten
         path = /data/paperless/consume
         browsable = yes
         writable = yes
         guest ok = no
         create mask = 0770
         directory mask = 0770
         valid users = paperless
      EOF
        fi
      
        if ! grep -q "^\[backup\]" /etc/samba/smb.conf; then
          sudo tee -a /etc/samba/smb.conf >/dev/null <<'EOF'
      
      [backup]
         comment = Paperless Backup Daten
         path = /data/paperless/backup
         browsable = yes
         writable = yes
         guest ok = no
         create mask = 0770
         directory mask = 0770
         valid users = paperless
      EOF
        fi
      
        if ! grep -q "^\[restore\]" /etc/samba/smb.conf; then
          sudo tee -a /etc/samba/smb.conf >/dev/null <<'EOF'
      
      [restore]
         comment = Paperless Restore Daten
         path = /data/paperless/restore
         browsable = yes
         writable = yes
         guest ok = no
         create mask = 0770
         directory mask = 0770
         valid users = paperless
      EOF
        fi
      
        (echo "$SAMBA_PASSWORD"; echo "$SAMBA_PASSWORD") | sudo smbpasswd -a paperless -s
        sudo systemctl restart smbd
        log "Samba Shares [consume], [backup], [restore] wurden konfiguriert."
      }
      
      # ---------------------------------------
      # Compose schreiben
      # ---------------------------------------
      write_compose() {
        log "Erstelle docker-compose.yml…"
        sudo mkdir -p /home/paperless
        sudo chown paperless:paperless /home/paperless
      
        cat <<EOL | sudo tee /home/paperless/docker-compose.yml >/dev/null
      services:
        broker:
          image: redis:7
          container_name: broker
          restart: unless-stopped
          volumes:
            - /data/paperless/redis/_data:/data
      
        db:
          image: postgres:17
          container_name: db
          restart: unless-stopped
          volumes:
            - /data/paperless/postgresql/_data:/var/lib/postgresql/data
          environment:
            POSTGRES_DB: paperless
            POSTGRES_USER: paperless
            POSTGRES_PASSWORD: $DB_PASSWORD
      
        gotenberg:
          image: gotenberg/gotenberg:latest
          container_name: paperless-gotenberg-1
          restart: unless-stopped
          command:
            - "gotenberg"
            - "--chromium-disable-javascript=false"
            - "--chromium-allow-list=.*"
      
        tika:
          image: apache/tika:latest
          container_name: tika
          restart: unless-stopped
      
        webserver:
          image: ghcr.io/paperless-ngx/paperless-ngx:latest
          container_name: webserver
          restart: unless-stopped
          depends_on:
            - db
            - broker
            - gotenberg
            - tika
          ports:
            - "8001:8000"
          volumes:
            - /data/paperless/consume:/usr/src/paperless/consume
            - /data/paperless/data:/usr/src/paperless/data
            - /data/paperless/media:/usr/src/paperless/media
            - /data/paperless/export:/usr/src/paperless/export
          environment:
            PAPERLESS_ADMIN_USER: $ADMIN_USER
            PAPERLESS_ADMIN_PASSWORD: $ADMIN_PASSWORD
            PAPERLESS_REDIS: redis://broker:6379
            PAPERLESS_DBHOST: db
            PAPERLESS_TIKA_ENABLED: 1
            PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
            PAPERLESS_TIKA_ENDPOINT: http://tika:9998
            PAPERLESS_OCR_LANGUAGE: deu
            PAPERLESS_TIME_ZONE: Europe/Berlin
            PAPERLESS_CONSUMER_ENABLE_BARCODES: "true"
            PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE: "true"
            PAPERLESS_CONSUMER_BARCODE_SCANNER: ZXING
            PAPERLESS_EMAIL_TASK_CRON: '*/10 * * * *'
            USERMAP_UID: "1002"
            USERMAP_GID: "1002"
            PAPERLESS_DBSSLMODE: disable
      EOL
      }
      
      # ---------------------------------------
      # DB starten, pg_hba absichern, dann Rest starten
      # ---------------------------------------
      bringup_with_pg_hba_fix() {
        pushd /home/paperless >/dev/null
      
        log "Starte zunächst NUR Redis & Postgres…"
        sudo -u paperless docker compose up -d broker db
      
        # Auf DB warten
        log "Warte, bis Postgres erreichbar ist…"
        for i in {1..60}; do
          if sudo docker exec db pg_isready -q >/dev/null 2>&1; then
            break
          fi
          sleep 2
        done
      
        # Subnetz der Compose-Network ermitteln
        local NET="paperless_default"
        local SUBNET
        SUBNET="$(docker network inspect "$NET" 2>/dev/null | jq -r '.[0].IPAM.Config[0].Subnet' || true)"
        if [[ -z "${SUBNET:-}" || "${SUBNET}" == "null" ]]; then
          # Fallback: häufig 172.18.0.0/16
          SUBNET="172.18.0.0/16"
          warn "Konnte Subnetz nicht auslesen – nutze Fallback ${SUBNET}"
        else
          log "Ermitteltes Docker-Subnetz: ${SUBNET}"
        fi
      
        # pg_hba.conf patchen, falls Eintrag fehlt
        log "Sichere pg_hba.conf gegen 'no pg_hba.conf entry … no encryption' ab…"
        sudo docker exec db bash -lc "grep -q '${SUBNET} ' /var/lib/postgresql/data/pg_hba.conf || echo 'host all all ${SUBNET} scram-sha-256' >> /var/lib/postgresql/data/pg_hba.conf"
      
        # Postgres reload (ohne DB-Login)
        sudo docker exec db bash -lc 'kill -HUP 1'
      
        # Kurzer Probe-Connect (ohne SSL)
        export PGPASSWORD="$DB_PASSWORD"
        if ! sudo docker exec -e PGPASSWORD="$DB_PASSWORD" db psql -U paperless -d paperless -c 'SELECT 1;' >/dev/null 2>&1; then
          warn "Probe-Query fehlgeschlagen – fahre trotzdem fort (Paperless migriert beim Start)."
        else
          log "Probe-Query erfolgreich."
        fi
        unset PGPASSWORD
      
        log "Starte nun gotenberg, tika und webserver…"
        sudo -u paperless docker compose up -d gotenberg tika webserver
        popd >/dev/null
      }
      
      # ---------------------------------------
      # MAIN
      # ---------------------------------------
      update_and_install_dependencies
      add_docker_repo
      ensure_paperless_user_and_group
      install_docker
      mitigate_if_apparmor_bug
      configure_samba
      write_compose
      bringup_with_pg_hba_fix
      
      sleep 2
      sudo chown -R paperless:paperless /data/paperless
      
      LOCAL_IP=$(hostname -I | awk '{print $1}')
      echo -e "\n🚀 **Paperless ist jetzt bereit!**"
      echo -e "🔗 **Zugriff im Browser:** http://$LOCAL_IP:8001\n"
      echo -e "🔁 **Bitte einmal neu booten, falls Docker neu installiert wurde.**"
      

      Um die Scripte unter Linux vom Webserver zu laden, kannst du auch folgenden Befehl verwenden.

      wget https://smarthomeundmore.de/wp-content/uploads/install_paperless.sh
      wget https://smarthomeundmore.de/wp-content/uploads/backup.sh
      wget https://smarthomeundmore.de/wp-content/uploads/restore.sh
      

      Danach müssen sie mit:

      chmod +x install_paperless.sh
      chmod +x backup.sh
      chmod +x restore.sh

      ausführbar gemacht werden.

      Script backup.sh

      #!/bin/bash
      # Skript: backup.sh
      # Dieses Skript führt ein Backup über docker-compose aus und verschiebt anschließend die Backup-Datei(en).
      
      echo "Starte Backup: Ein Backup wird jetzt durchgeführt..."
      
      # Wechsel in das Verzeichnis, in dem sich die docker-compose Datei befindet
      cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
      
      # Führe den docker-compose Befehl aus
      sudo docker compose exec webserver document_exporter ../export -z
      
      # Prüfe, ob der Befehl erfolgreich war
      if [ $? -eq 0 ]; then
        echo "Backup erfolgreich abgeschlossen."
        
        # Prüfen, ob das Quellverzeichnis existiert
        if [ -d "/data/paperless/export" ]; then
          # Sicherstellen, dass das Zielverzeichnis existiert (falls nicht, wird es angelegt)
          mkdir -p /data/paperless/backup
      
          # Prüfen, ob im Quellverzeichnis Dateien vorhanden sind
          if compgen -G "/data/paperless/export/*" > /dev/null; then
            echo "Verschiebe Backup-Datei(en) nach /data/paperless/backup..."
            mv /data/paperless/export/* /data/paperless/backup/
            
            if [ $? -eq 0 ]; then
              echo "Datei(en) erfolgreich verschoben."
            else
              echo "Fehler beim Verschieben der Datei(en)."
            fi
          else
            echo "Keine Datei(en) im Verzeichnis /data/paperless/export gefunden."
          fi
        else
          echo "Quellverzeichnis /data/paperless/export existiert nicht."
        fi
      else
        echo "Fehler beim Backup."
      fi

      Script restore.sh

      #!/bin/bash
      # Skript: restore.sh
      # Dieses Skript stellt ein Backup wieder her.
      
      set -e
      
      echo "Starte Wiederherstellung: Das Backup wird nun wiederhergestellt..."
      
      DOCKER_COMPOSE_FILE="/home/paperless/docker-compose.yml"
      
      # Funktion zum Auskommentieren der Umgebungsvariablen in docker-compose.yml
      comment_out_env_vars() {
        echo "Kommentiere PAPERLESS_ADMIN_USER und PAPERLESS_ADMIN_PASSWORD in der docker-compose.yml aus..."
      
        # Erstelle ein Backup der Datei, falls noch nicht gesichert
        if [ ! -f "${DOCKER_COMPOSE_FILE}.bak" ]; then
          sudo cp "$DOCKER_COMPOSE_FILE" "${DOCKER_COMPOSE_FILE}.bak"
        fi
      
        # Setze sicherheitshalber Schreibrechte
        sudo chmod u+w "$DOCKER_COMPOSE_FILE"
      
        # Füge das `#` nur hinzu, falls es noch nicht vorhanden ist
        sudo sed -i 's/^\( *PAPERLESS_ADMIN_USER: \)/#\1/' "$DOCKER_COMPOSE_FILE"
        sudo sed -i 's/^\( *PAPERLESS_ADMIN_PASSWORD: \)/#\1/' "$DOCKER_COMPOSE_FILE"
      
        echo "Variablen erfolgreich auskommentiert."
      }
      
      # Variablen auskommentieren, bevor das Skript weiterläuft
      comment_out_env_vars
      
      # Verzeichnisse definieren
      BACKUP_DIR="/data/paperless/restore"
      EXPORT_DIR="/data/paperless/export"
      DIRECTORIES_TO_DELETE=(
        "/data/paperless/consume"
        "/data/paperless/export"
        "/data/paperless/media"
        "/data/paperless/postgresql"
        "/data/paperless/redis"
      )
      
      # Prüfe, ob das Backup-Verzeichnis existiert
      if [ ! -d "$BACKUP_DIR" ]; then
        echo "Fehler: Backup-Verzeichnis $BACKUP_DIR existiert nicht."
        exit 1
      fi
      
      # Schritt 1: Docker Compose herunterfahren
      echo "Wechsle in /home/paperless und fahre Docker Compose herunter..."
      cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
      sudo docker compose down
      
      # Schritt 2: Lösche die angegebenen Verzeichnisse
      echo "Lösche die folgenden Verzeichnisse:"
      for dir in "${DIRECTORIES_TO_DELETE[@]}"; do
        echo "  $dir"
        if [ -d "$dir" ]; then
          sudo rm -rf "$dir"
          echo "    -> $dir gelöscht."
        else
          echo "    -> $dir existiert nicht, überspringe..."
        fi
      done
      
      # Schritt 3: Erstelle das Export-Verzeichnis neu
      echo "Erstelle das Verzeichnis $EXPORT_DIR..."
      sudo mkdir -p "$EXPORT_DIR"
      if [ $? -ne 0 ]; then
        echo "Fehler: Konnte $EXPORT_DIR nicht erstellen."
        exit 1
      fi
      
      # Schritt 4: Suche nach einer Archivdatei im Backup-Verzeichnis (z. B. *.zip)
      ARCHIVE_FILE=$(find "$BACKUP_DIR" -maxdepth 1 -type f -name "*.zip" | head -n 1)
      if [ -z "$ARCHIVE_FILE" ]; then
        echo "Fehler: Keine Archivdatei (*.zip) im Backup-Verzeichnis gefunden."
        exit 1
      fi
      echo "Gefundene Archivdatei: $ARCHIVE_FILE"
      
      # Schritt 5: Kopiere die Archivdatei in das Export-Verzeichnis
      echo "Kopiere die Archivdatei nach $EXPORT_DIR..."
      sudo cp "$ARCHIVE_FILE" "$EXPORT_DIR"
      if [ $? -ne 0 ]; then
        echo "Fehler beim Kopieren der Archivdatei."
        exit 1
      fi
      
      # Schritt 6: Wechsel in das Export-Verzeichnis und entpacke die Archivdatei
      cd "$EXPORT_DIR" || { echo "Fehler: Konnte nicht in $EXPORT_DIR wechseln."; exit 1; }
      
      # Überprüfe, ob 'unzip' installiert ist und installiere es gegebenenfalls
      if ! command -v unzip >/dev/null 2>&1; then
        echo "Das Paket 'unzip' ist nicht installiert. Versuche, es zu installieren..."
        if command -v apt-get >/dev/null 2>&1; then
          sudo apt-get update && sudo apt-get install -y unzip
        elif command -v yum >/dev/null 2>&1; then
          sudo yum install -y unzip
        else
          echo "Kein unterstützter Paketmanager gefunden. Bitte installiere 'unzip' manuell."
          exit 1
        fi
      fi
      
      # Entpacken der Archivdatei
      ARCHIVE_BASENAME=$(basename "$ARCHIVE_FILE")
      echo "Entpacke $ARCHIVE_BASENAME..."
      unzip "$ARCHIVE_BASENAME"
      if [ $? -ne 0 ]; then
        echo "Fehler beim Entpacken von $ARCHIVE_BASENAME."
        exit 1
      fi
      echo "Archiv erfolgreich entpackt."
      
      # Optional: Entferne die kopierte Archivdatei, falls sie nicht mehr benötigt wird
      # sudo rm "$ARCHIVE_BASENAME"
      
      # Schritt 7: Starte Docker Compose Container neu
      echo "Wechsle zurück nach /home/paperless und starte die Container..."
      cd /home/paperless || { echo "Fehler: Verzeichnis /home/paperless nicht gefunden."; exit 1; }
      sudo -u paperless docker compose up -d
      if [ $? -ne 0 ]; then
        echo "Fehler: Docker Compose konnte nicht gestartet werden."
        exit 1
      fi
      
      sudo chown -R paperless:paperless /data/paperless/consume /data/paperless/media
      sudo chmod -R 775 /data/paperless/consume /data/paperless/media
      sudo chown paperless:paperless /home/paperless/docker-compose.yml
      
      
      sleep 60
      
      cd /home/paperless
      # Schritt 8: Führe den Importbefehl aus
      echo "Führe Importbefehl aus..."
      sudo docker compose exec webserver document_importer ../export
      sudo chown -R paperless:paperless /data/paperless 
      if [ $? -eq 0 ]; then
        echo "Import erfolgreich abgeschlossen."
      else
        echo "Fehler beim Import."
        exit 1
      fi
      echo " Bitte einmal das System neu booten ! "
      echo "---------------------------ENDE--------------------------------"
      

      Upgrade Postgres 16 zu Postgres 17 ( bei vorhandener Installation )

      ACHTUNG: Bitte zuvor unbedingt ein Backup der virtuellen Maschine oder des LXC Containers machen !

      Zunächst begebt euch im Container oder der VM in das Verzeichnis /home/paperless. Dort findet ihr eine Datei docker-compose.yml.

      Als ersten Schritt müssen wir nun die Docker Container beenden.

      docker compose down

      mit nano docker-compose.yml kontrollieren wir die Eintragungen der Compose Datei. Dabei ist folgender Abschnitt relevant:

      Hier sieht man , dass aktuell das Image postgres:16 verwendet wird. Das brauchen wir für den Migrationsprozess in genau dieser Form. Merkt euch zudem auch den POSTGRES_USER , den brauchen wir für den nächsten Schritt.

      Mit Strg+X beenden wir den Dateieditor und begeben uns in die Konsole.
      Dort geben wir nun folgenden Befehl zum starten der Datenbank ein:

      docker compose up -d db

      Im nächsten Schritt sichern wir uns nun die aktuelle Datenbank:

      docker exec -t db pg_dumpall -U DATENBANKUSER > all.sql

      Bei DATENBANKUSER müsst ihr den User aus eurer docker-compose.yml eintragen. Im Beispiel ist es der User paperless.

      Nachdem die Sicherung erfolgt ist, beenden wir erneut die Container:

      docker compose down

      Jetzt können wir erneut mit:

      nano docker-compose.yml

      unser Compose File editieren.

      Jetzt müssen folgende Eintragungen angepasst werden:

      Wir ändern also image: postgres:16 in image: postgres:17 und die Zeile volumes: …../_data in …./datav17

      Danach starten wir erneut den Datenbank Container mit

      docker compose up -d db

      Jetzt müssen wir unsere Sicherung der Datenbank und die neu initialisierte Datenbank zurückkopieren.

      Das können wir mit

      cat all.sql | docker exec -i db psql -U DATENBANKUSER

      machen. Dabei ist DATENBANKUSER wieder unser POSTGRES Datenbank Benutzer. In unserem Beispiel paperless.

      Wenn der Import Vorgang nun ohne Fehler durchgelaufen ist, können wir mit

      docker compose down
      docker compose up -d

      alle Container wieder starten.

      Redis und Gotenberg Update

      Um Redis und Gotenberg auf eine neue Version zu updaten sind auch wieder Anpassungen in der docker-compose.yml nötig.

      Dazu müssen zunächst die Container gestoppt werden.

      docker compose down

      Danach editieren wir erneut die docker-compose.yml mit

      nano docker-compose.yml

      und ändern folgende Zeilen:

      Hier tragt die gewünschte Redis Version ein. In meinem Beispiel habe ich von Version 7 auf 8 gewechselt.

      Für Gotenberg gehen wir ähnlich vor. Hier habe ich mich entschieden, die „latest“ Variante zu verwenden.

      Nach den Änderungen , beendet den Editor mit Strg+X und speichert mit „Yes“ die Datei.

      Jetzt müssen wir noch die Container aktualisieren.

      docker compose pull

      und erneut starten.

      docker compose up -d

      Jetzt sollten alle Container in der aktuellen eingetragenen Version zur Verfügung stehen.

      Update 23.09.2025 – Paperless-ngx: 1:1-Backup & Restore (Docker/Proxmox/LXC)

      Überblick

      Diese Ergänzung zeigt eine einfache, robuste 1:1-Sicherung und Wiederherstellung einer Paperless-ngx-Instanz – ohne export/import und ohne Manifest-Probleme. Geeignet für Umzüge auf eine neue LXC/VM und für regelmäßige Vollbackups.

      Vorteile:

      • Vollständiges Abbild von /data/paperless (Dokumente, Postgres, Redis, Konfiguration)
      • Versionsunabhängig (kein Versions-Matching beim Import nötig)
      • Schnelle Wiederherstellung des exakten Zustands

      Wichtig: Nach dem Restore sind die alten Benutzer & Passwörter der Quellinstanz wieder aktiv – auch wenn beim Neuaufsetzen andere Zugangsdaten vergeben wurden.


      Voraussetzungen

      • Paperless-ngx läuft via Docker Compose.
      • Datenpfad: /data/paperless, Compose-Projekt: /home/paperless.
      • Auf der Zielinstanz wurde Paperless vorab mit dem bekannten Install-Skript bereitgestellt (Container/Volumes/ENV).

      A) Backup auf der Quellinstanz erstellen

      1) In das Arbeitsverzeichnis wechseln

      cd /root
      

      2) Backup-Skript laden und ausführbar machen

      wget https://smarthomeundmore.de/wp-content/uploads/backup_new.sh
      chmod +x backup_new.sh
      

      3) Backup starten

      ./backup_new.sh
      

      Ablauf:

      • Paperless-Container werden gestoppt.
      • Ein komprimiertes Archiv wird erstellt und in /data/paperless/backup abgelegt.
      • Container werden automatisch neu gestartet.

      4) Backup übertragen

      Das erzeugte Archiv (z. B. paperless-backup-YYYY-MM-DD_HH-MM.tar.gz) auf die Zielinstanz kopieren (z. B. mit scp oder rsync).

      B) Restore auf der Zielinstanz durchführen

      1) Zielumgebung bereitstellen

      Paperless auf der Zielinstanz wie gewohnt mit dem Install-Skript einrichten (Compose/ENV).
      Hinweis: Nach dem Restore gelten wieder die alten Credentials aus der gesicherten Instanz.

      2) Backup-Datei platzieren

      Backup nach /home/paperless kopieren.
      Nicht nach /data/paperless/restore legen – das Restore-Skript löscht /data/paperless vollständig.

      3) Restore-Skript laden und ausführbar machen

      cd /root
      wget https://smarthomeundmore.de/wp-content/uploads/restore_new.sh
      chmod +x restore_new.sh
      

      4) Restore ausführen (mit absolutem Pfad)

      ./restore_new.sh /home/paperless/paperless-backup-YYYY-MM-DD_HH-MM.tar.gz
      

      Ablauf:

      • Container werden gestoppt.
      • /data/paperless wird gelöscht.
      • Das Backup wird 1:1 mit korrekten Besitzrechten zurückgespielt (tar --same-owner --numeric-owner).
      • Container starten automatisch wieder.

      ASN QR Codes generieren

      Avery Zweckform QR-Code Generator von Tobias L. Meier: https://tobiasmaier.info/asn-qr-code-label-generator/

      Ergänzung & Dank an Murat

      An dieser Stelle auch ein herzliches Dankeschön an Murat, der mich nach einem meiner YouTube-Videos auf eine interessante Ergänzung aufmerksam gemacht hat.

      Er hatte bei der Nutzung des ASN-QR-Code-Label-Generators von Tobias Maier Schwierigkeiten, die QR-Codes korrekt und passgenau zu drucken. Deshalb hat er kurzerhand ein eigenes Projekt gestartet, mit dem sich mehr Kontrolle über den Druck realisieren lässt:

      👉 ASN-QR-Code-Label-Generator von Murat auf GitHub

      Vielleicht ist das auch für dich hilfreich, wenn du ähnliche Probleme beim Druck hast. Murat freut sich sicherlich über Feedback und Tests aus der Community.

      Home Assistant Rest API Sensoren

      Im Video habe ich auch gezeigt, wie man einen Sensor in Home Assistant erstellt, um sich die Anzahl der Dokumente im Posteingang anzeigen zu lassen. Die Informationen dazu habe ich von Flemming´s Blog, wo einige Beispielsensoren zu finden sind. Tolle Arbeit und sehr gut erklärt.

      Monitoring Paperless-ngx in Home-Assistant – Flemming’s Blog

      Empfohlene Hardware für die Digitalisierung und die QR Codes

      Ein weiterer Scanner, der häufiger im Kontext mit paperless-ngx genannt wird, ist der Brother ADS-1700W. Da ich diesen allerdings nicht selber getestet habe, kann ich keine direkte Empfehlung dazu aussprechen.

      Solltest du in den Scripten noch Fehler finden, kannst du mir gerne deine Korrekturen als Mail zukommen lassen. Meine Kontakdaten findest du im Impressum.

      Reicht mein Smart Home & Home Assistant? 🏠 NAS-Systeme im Vergleich – #2 TrueNAS

      In der Welt der NAS-Systeme ist TrueNAS eine meiner bevorzugten Optionen, die sowohl für Einsteiger als auch für erfahrene Nutzer viele Möglichkeiten bietet. In diesem Artikel führe ich dich durch die Schritte zur Installation und Konfiguration von TrueNAS, damit du dein eigenes NAS-System optimal nutzen kannst.

      Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

      Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

      Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

      Vielen Dank für eure Unterstützung!

      Einleitung

      Ich möchte dir zeigen, wie ich TrueNAS installiere und welche Funktionen es bietet, um mein Smart Home zu unterstützen. Dabei konzentriere ich mich auf die Installation und Grundkonfiguration von TrueNAS.

      Installation von TrueNAS

      Ich starte mit der Installation von TrueNAS, einem wichtigen Schritt, um die leistungsstarken Funktionen des Systems nutzen zu können. Es gibt verschiedene Versionen von TrueNAS, darunter TrueNAS Core und TrueNAS Scale, die ich kurz erläutere, um dir bei der Auswahl der richtigen Version zu helfen.

      Der Installationsprozess

      Ich zeige dir, wie ich TrueNAS Scale von einem USB-Stick installiere, und erkläre, wie ich den USB-Stick mit dem TrueNAS-Image bespiele. Dieser Prozess ist einfach und effizient, um das System schnell in Betrieb zu nehmen. Anschließend führe ich die Installation auf der Boot-Festplatte durch.

      Wichtige Informationen

      Ich spreche über die Hardware-Anforderungen und -Optionen, die du für dein TrueNAS-System in Betracht ziehen solltest. Zudem zeige ich dir, wie ich einen ZFS-Pool erstelle, um die Datenspeicherung zu optimieren, sowie die erste Anmeldung bei TrueNAS und die Benutzeroberfläche.

      Erweiterungsmöglichkeiten

      Ich stelle einige nützliche Apps vor, die ich in TrueNAS verwende, um die Funktionalität meines Systems zu erweitern. Ein weiteres Highlight ist die Installation von Home Assistant als virtuelle Maschine (VM), um mein Smart Home zu steuern und zu automatisieren. Ich erkläre dabei auch, wie ich Home Assistant Supervised auf TrueNAS installiere, um alle Vorteile der Automatisierung zu nutzen.

      Zusätzlich gehe ich auf die Nachteile von TrueNAS ein, damit du eine fundierte Entscheidung treffen kannst, ob es die richtige Lösung für deine Bedürfnisse ist. Außerdem erkläre ich, wie ich USB-Passthrough einrichte, um meine Smart Home-Geräte direkt über TrueNAS zu integrieren, und zeige dir, wie ich SMB-Freigaben einrichte, damit du problemlos auf deine Daten zugreifen kannst.

      Fazit

      In diesem Artikel habe ich die wichtigsten Punkte zur Installation und Konfiguration von TrueNAS zusammengefasst. Alle wichtigen Details werden im Video ausführlich gezeigt, sodass du den gesamten Prozess nachvollziehen kannst. Ich betone die Vorteile, die TrueNAS für mein Smart Home bieten kann, sowie die Nachteile, die du berücksichtigen solltest.

      Wenn du mehr über den gesamten Prozess erfahren möchtest, schaue dir das Video an: TrueNAS Installation und Konfiguration.


      Mit dieser Anleitung bist du bestens gerüstet, um dein eigenes TrueNAS-System aufzubauen und die Vorteile zu nutzen, die es dir für dein Smart Home bietet. Viel Erfolg bei deiner Installation!

      Shell Kommandos zur Installation von Home Assistant

      sudo wget https://github.com/home-assistant/operating-system/releases/download/13.1/haos_ova-13.1.qcow2.xz  # Download des aktuellen HA Images ( bei euch ggf. eine andere Version ! )
      sudo unxz haos_ova-13.1.qcow2.xz
      sudo qemu-img convert -O raw haos_ova-13.1.qcow2 /dev/zvol/ZFS+Pool/homeassistant

      Wichtiger Hinweise!

      Im Video habe ich die Einblendung an dieser Stelle falsch gemacht. Das was in der Konsole angezeigt wird ist korrekt . Die Einblendung zeigt in meinem Setup aus dem Video den falschen Pfad an.

      Offsite Backups der letzte Ausweg für dein Home Assistant oder Proxmox ( nur mit GUI ) ?

      In diesem Video zeige ich euch, wie ihr die Hetzner Storage Box für Offsite Backups von Home Assistant einrichten könnt. Zusätzlich erkläre ich, wie ihr die Storage Box in Proxmox VE integrieren könnt, ohne dabei die Konsole nutzen zu müssen. So könnt ihr eure Backups und Speicherkapazitäten ganz einfach verwalten, auch wenn ihr keine tiefergehenden Linux-Kenntnisse habt.

      Viel Spaß beim Anschauen! 😊

      Ich möchte euch heute einen allgemeinen Amazon-Link teilen, über den ihr eine Vielzahl von Produkten entdecken könnt. Egal, ob ihr nach Smart Home-Geräten, Gadgets oder anderen nützlichen Artikeln sucht, Amazon hat für jeden etwas zu bieten.

      Wenn ihr über diesen Link einkauft, unterstützt ihr meinen Kanal, ohne dass es für euch zusätzliche Kosten verursacht. Das hilft mir, weiterhin spannende Inhalte für euch zu erstellen!

      Hier ist der Link zu Amazon: https://amzn.to/3KsGngK

      Vielen Dank für eure Unterstützung!

      Für die Home Assistant Auto Backup Erweiterung benötigt ihr HACS. Hier findest du eine Anleitung, wie du HACS installierst:

      Weitere Links aus dem Video:

      HACS Auto Backup Integration

      Hetzner Storage Box