Planung der Einrichtung eines neuen Systems mit ZFS

Renegade33

Member
Aug 29, 2023
110
2
18
Bavaria - Germany
Mahlzeit,

mein alter Server muss langsam in den Ruhestand und ein neuer steht bereit. Jetzt soll es Proxmox werden und ich brauche mal eure Hilfe bei den letzten Fragen.

Geplant ist ein Home-Server rein für Privatgebrauch.
2 NVMe SSD für OS und VM im RAID1 zfs. (1TB)
6 HDD als Datengrab.
2 SATA SSD als special device sollen später dazu kommen.

Soweit mein Kenntnisstand ist, sollte man bei VMs nur RAID 1 nutzen, da z1/2 einen recht großen Overhead haben kann. (Quelle ZFS.rocks)

Da die Hardware schon vorhanden ist, muss ich jetzt leider erstmal damit leben, dass meine NVMe wahrscheinlich Consumer sind. Sind zwar 24/7 NAS ausgelegt, aber ich finde nichts zu den relevanten Daten (PLP,...).

Ist es jetzt sinnvoll die 2 NVMe zu partitionieren für OS, VMs und evtl. Reserve für Chaching?
Oder einfach bei der Installation RAID1, die beiden Platten rein, OS drauf und dann die VMs im zfs-local erstellen?

Es werden nur 3-4 VMs. 1x ucs, 1x File-Server im LXC (LXC-Toolbox), 1, Datenbank und Webserver für lokale Anwendungen und falls noch Luft ist evtl. ein Plex Media-Server.

Die HDD würde ich dann als RAIDz1/2 einrichten.

Wie genau würdet ihr vorgehen?

mfG
Rene
 
Hallo Rene,

hattest Du diese Frage auch im Discord von RPI Cloud?

Ich denke Du solltest mal starten und dann einige Test machen.
Links hatte ich Dir dort schon bereitgestellt.
 
Also ich lege mir unter ZFS nun eine neue Datenstuktur an:
Wenn der Pool rpool heißt:

rpool/<server-pve-name>/data -- das ist meine ZFS Datenverzeichnis für die LXC und VM
rpool/<server-pve-name>/backup
rpool/<server-pve-name>/images
rpool/<server-pve-name>/pve-config -- cron.d; hier wird /etc/pve gespiegelt und auch zfs-auto-snapshot alle 15 min erzeugt
rpool/<server-pve-name>/root -- cron.d; hier wird /root gespiegelt und auch zfs-auto-snapshot alle 15 min erzeugt
usw.

Dann bitte auch zfs-auto-snapshot installieren und auch für:

rpool/<server-pve-name>/data
rpool/<server-pve-name>/pve-config
rpool/<server-pve-name>/root

eintragen:
$ zfs set com.sun:auto-snapshot=true rpool/<server-pve-name>/data

usw.
 
Worauf willst Du Proxmox PVE und debian 12 installieren?
Wenn auf die 2 NVMe, dann der Installationsprozess vor, und Du kannst Einfach ZFS als Mirror auf die 2 NVMe incl, den beiden Boot-Partitionen installieren.
---> Starte so mal, denn mit ZFS kannst Du Dir einfach weitere Filesysteme oder Volumes dort anlegen.

Andrenfalls musst Du per Hand, die installation auf debian 12machen und anschließend die Proxmox apt Quellen hinzufügen und Proxmox PVE händisch einrichten.
 
Last edited:
Nutze bitte gleich am Anfang deinen HDD Pool mit SSDs als Spechial Device, denn alle Meta-Daten und reale kleine Dateien liegen sonst fest auf den HDDs.
Erst Durch eine erneutes Kopieren werden die Meta-Daten und kleine Dateien getrennt gespeichert.
Es macht keinen Spass einen ZFS Pool, ZFS RaidZ2 auf reinen HDDs zu betreiben, dann rechne mit einer Datenraten von vielleicht 50 - 80 MByte/s.

Ich würde den Pool mit deiner Hardware, wie schon mal geschrieben, als erzeugen:
ZFS RaidZ1-0 3x HDD, RaidZ1-1 3x HDD und Special Device Mirror 2x SDD (ca. 500 GByte mit DDR Cache!)

Das erhöt den Datendurchsatz beim Schreibn auf ca. 80 - 100 MByte/s.
 
Hi @news nein, das war ich nicht. Discord nutze ich nur für Spiele, wenn es nötig ist.

Worauf willst Du Proxmox PVE und debian 12 installieren?
Wenn auf die 2 NVMe, dann gibt Dir das der installprozess vor.
Anderfalls musst Du per Hand, die installation auf debian 12machen und anschließend die Proxmox apt Quellen hinzufügen und Proxmox PVE händisch einrichten.
Darum geht es ja unter anderem. Erstmal Proxmox klassisch installieren und RAID1 mit den beiden NVMe machen oder eben falls ich diese partitionieren sollte, Debian installieren, partitionieren und dann proxmox händisch drauf.
Oder geht das nachträglich auch, eine Dateistruktur anzulegen?

Das mit den snapshots hab ich mir ehrlich gesagt noch gar nicht angeschaut. Am Ende soll quasi alles auf einem extra Rechner in einem anderen Gebäude wöchentlich ein oder mehrmals ein Backup auf ein RDX-Band gezogen werden. Dieser Rechner fährt aber nur sheduled hoch, zieht das Backup und legt sich wieder schlafen.
 
Nutze bitte gleich am Anfang deinen HDD Pool mit SSDs als Spechial Device, denn alle Meta-Daten und reale kleine Dateien liegen sonst fest auf den HDDs.
Erst Durch eine erneutes Kopieren werden die Meta-Daten und kleine Dateien getrennt gespeichert.
Es macht keinen Spass einen ZFS Pool, ZFS RaidZ2 auf reinen HDDs zu betreiben, dann rechne mit einer Datenraten von vielleicht 50 - 80 MByte/s.

Ich würde den Pool mit deiner Hardware, wie schon mal geschrieben, als erzeugen:
ZFS RaidZ1-0 3x HDD, RaidZ1-1 3x HDD und Special Device Mirror 2x SDD (ca. 500 GByte mit DDR Cache!)

Das erhöt den Datendurchsatz beim Schreibn auf ca. 80 - 100 MByte/s.

OK, das ist ein Argument. Hatte gehofft, das nachträglich einsetzen zu können, da 2 enterprise SSD doch auch Geld kosten.
Also wenn ich einen Mirror mach, hab ich ja nur 50% vom Speicher und dann noch der Overhead. Und das ganze für 20Mb/s mehr?
 
Nachträglich geht, das hatte ich nicht ausgeschlossen, nur Daten, die schon da sind, bleiben dann dort auch!
Bitte bedenke über das Special Device und als Mirror, da Du sonst keinen Platz mehr hast, verdoppelt sich die IOPS von SATA3 SSDs !
Und man kann auch erst mal mit Crucial MX500 500 GB - 1 TB starten um die später einfach per zfs attach und zfs detach aus zu tauschen!
P.S.: es gibt auch ZFS Mirror mit 2, 3 oder mehr Datenträger!

Was ich hier beschreibe, habe ich und mache selbst alles fast täglich.
 
Kennst Du den Proxmox Backup Server mit SSDs?
Der Betrieb sollte dein Ziel sein um von dort aus die Backup weiter zu verteilen.

Aber natürlich kann man die Lokalen Backups auch per zfs send und zfs recv auf eine externe Machine mit ZFS speichern und dort weiter sichern.
Also ich habe noch einen kleinen mini-ITX Server mit 16GB DDR4 und einer 1TB NVMe(im selben Schrank) und eben einen Desktop-PC mit RDX (in meiner Werkstatt)

Der mini-ITX sollte im cluster die Backup-ucs der Domainn halten und im Wartungsfall als Migrierer dienen. Der PC sollte die Backups auf RDX ziehen. Beide sollten aber im Normalfall aus sein und nur sheduled anlaufen.

Wo wird denn der Proxmox Backup-Server am besten installiert?
 
Auf mindestens 2x SATA SSD oder NVMe mit ZFS Dateisystem.

Ich habe nach eine Phase realer Hardware ihn als mehrfach als Proxmox PVE mit LXC unter debian 12 am laufen.
 
Last edited:
Wenn Du diesen Kanal nicht kennst, dann bitte merken und ansehen:
# https://www.youtube.com/@45Drives

Diese Beitrag zeigt dir in Zahlen, wie wichtig eine ZFS Special Device ist:
"Tuesday Tech Tip - Accelerating ZFS Workloads with NVMe Storage"
# https://youtu.be/0aM1iZJkOaA?feature=shared

Da Du deine Hardwaremöglichkeiten dargestellt hattest, bleibt für Dich nur eine 2x SATA SSD ZFS Special Device.
Falls dann mal eine Erweiterung auf bessere SATA SSD erfolgen sollte, dann kann man die Migration im Betrieb ! über einen USB3 SATA3 Adapter durchführen.
 
Nachträglich geht, das hatte ich nicht ausgeschlossen, nur Daten, die schon da sind, bleiben dann dort auch!
Bitte bedenke über das Special Device und als Mirror, da Du sonst keinen Platz mehr hast, verdoppelt sich die IOPS von SATA3 SSDs !
Und man kann auch erst mal mit Crucial MX500 500 GB - 1 TB starten um die später einfach per zfs attach und zfs detach aus zu tauschen!
P.S.: es gibt auch ZFS Mirror mit 2, 3 oder mehr Datenträger!

Was ich hier beschreibe, habe ich und mache selbst alles fast täglich.
Ja klar. Mirror ist ja im Endeffekt RAID1 bzw. 10 ob da jetzt auf jeder Seite 1 oder 15 Platten hängen ist ja egal. Nur hast du ja einen Nutzfaktor von 50% und mehr geht nicht.
Das special device wäre sowieso als Mirror ausgeführt. Nur bei den Platten als "Datengrab" würde ich schon gerne 70-80% Nutzung erreichen.

Auf mindestens 2x SATA SSD oder NVMe mti ZFS Dateisystem.

Ich habe nach eine Phase realer Hardware ihn als mehrfach als Proxmox PVE mit LXC unter debian 12 am laufen.

Aber auf welcher Maschine wäre er bei mir am sinnvollsten?
Sollten auch wieder 2 Enterprise SSD sein oder?
Muss der dauerhaft laufen oder reicht das, wenn der alle 48h hochfährt, seine Tasks erledigt und wieder runterfährt?

Wenn Du diesen Kanal nicht kennst, dann bitte merken und ansehen:
# https://www.youtube.com/@45Drives

Diese Beitrag zeigt dir in Zahlen, wie wichtig eine ZFS Special Device ist:
"Tuesday Tech Tip - Accelerating ZFS Workloads with NVMe Storage"
# https://youtu.be/0aM1iZJkOaA?feature=shared
Kenne ich noch nicht, werde ich mir später gleich ansehen. Danke dir hierfür schonmal.
 
Also ich lege mir unter ZFS nun eine neue Datenstuktur an:
Wenn der Pool rpool heißt:

rpool/<server-pve-name>/data -- das ist meine ZFS Datenverzeichnis für die LXC und VM
rpool/<server-pve-name>/backup
rpool/<server-pve-name>/images
rpool/<server-pve-name>/pve-config -- cron.d; hier wird /etc/pve gespiegelt und auch zfs-auto-snapshot alle 15 min erzeugt
rpool/<server-pve-name>/root -- cron.d; hier wird /root gespiegelt und auch zfs-auto-snapshot alle 15 min erzeugt
usw.

Dann bitte auch zfs-auto-snapshot installieren und auch für:

rpool/<server-pve-name>/data
rpool/<server-pve-name>/pve-config
rpool/<server-pve-name>/root
Also zum Verständnis.
Du hast erst Proxmox mit einem zfs mirror installiert. Auf diesem dann nachträglich deine Datenstruktur angelegt.
Du spiegelst die pve-config und das root und machst einmal vom original und einmal vom gespiegelten snapshots?
 
Hallo, deine HW kenne ich leider nicht. Link und so..

Nein ich habe meinen "NAS/ PBS" Pool, auch wegen der Kosten, als:
* ZFS RaidZ1 3x HDD
gestartet.

Dann recht schnell
* ZFS RaidZ1 3x HDD, um das Special Device ZFS, Mirror mit 2x SSD mit Cache, erweitert.

Als ich dann meine Videos usw. drauf hatte, ist der Pool noch von
* ZFS RaidZ1-0 3x HDD, um RaidZ1-1 3x HDD, sowie Special Device ZFS, MIRROR mit 2x SSD mit Cache,
erweitert worden.

Man beachte, man richtet bei ZFS immer noch ein globales Quota bei 80 % - 85 % des maximales Speichers ein.
Das ist ein muss und keine Option!

Also die Snapshot werden automatisch erzeugt und gelöscht.
$ apt install zfs-auto-snapshot

Dann werden unterschiedliche CronJobs angelegt:
* /etc/cron.d/zfs-auto-snapshot -- alle 15 Minuten, je nach Konfiguration, N davon, werden aufgehoben.
* cron.hourly/zfs-auto-snapshot -- jede Stunde
* cron.daily/zfs-auto-snapshot -- jeden Tag
* cron.weekly/zfs-auto-snapshot -- jeden Woche
* cron.monthly/zfs-auto-snapshot -- jeden Monat

Wie viele davon aufgehoben werden, lässt sich über jeden Cronjob individuell einstellen.

Das kleinste Raster für "Fehler" sind 15 Minuten.

Z.B. lege ich auf dieser Arbeitsmaschine auch Auto-Snapshots an:
Beispiel:
12x alle 15 Minuten
24x pro Stunde
7x pro Tag
2x pro Woche
0x pro Monat

Es werden nur die Änderungen an den Dateien aufgehoben, gibt es keine, so werden nur meta Daten erzeugt.
Das ganze läuft im Hintergrund und ohne Beeinträchtigung der laufenden Arbeit.

Warum, weil ZFS alles in Vektorketten speichert.
Deshalb ist auch das Special Device zu wichtig.

Auf diesem Arbeitsrechner lege ich, z.B. kleine Dateien nun auch auf dem Special Device, das aus ZFS Mirror mit 2x SSD besteht, an.
Das kann ich induviduell einstellen.

ZFS ist alles in einem und sorgt für eine Dateistuktur:
* https://docs.oracle.com/cd/E19253-01/819-5461/gayog/index.html
$ man zfs create

Man kann z.B. Filesysteme und Blockdevice erzeugen.
Filesysteme:
ZFS rpool/<my-file-system> ::= mount point /rpool/<my-file-system>/

Blockdevice:
ZFS rpool/<my-block-device> ::= Device /dev/zvol/rpool/<my-block-device> -> ../../zd0

Du siehst da gibt es vielen zu lernen, fang mal an und lese und teste es aus!
Es wird nicht das Beste geben, es gibt je nach Zielsetzung eine praktikable und gute Lösung.

Für mich ist die Datenintegrität von ZFS ein sehr wichtige Funktion, das unter alles umständen nur korrekte Daten geschrieben werden und jeder Speicherblock auch über Checksummen verfügt.
Es wird so sicher u.a. ein Bitrot auf den HDDs oder SSDs erkannt.
Frage dich bitte man, welches Datei und Filessystem das noch kann und auch über SnapShots verfügt.
Wenn man will, kann man, neben der dynamischen Dateikompremierung, auch noch Verschüsselung mit "einschalten".
Es ist halt eine Enterprise Datei und Filessystem, dass nun uns Usern zur Verfügung steht.
 
Last edited:
  • Like
Reactions: teissler
Hallo, deine HW kenne ich leider nicht. Link und so..
Also pve:
GIGABYTE C246M-WU4
Intel Core i3-9100, 4C/4T, 3.60-4.20GHz, tray (CM8068403377319)
Kingston Server Premier DIMM 32GB, DDR4-2666, CL19-19-19, ECC (KSM26ED8/32HC)
Western Digital Red SN700 NVMe NAS SSD - 1DWPD 1TB, M.2 (WDS100T1R0C) x2
HDD sind ältere 3TB WD x6 (sollen über Zeit gegen größere ausgetauscht werden, aber SMART Werte sind noch gut)

Mini-ITX:
ASUS Prime N100I-D D4-CSM (90MB1F70-M0EAYC)
Corsair Vengeance SO-DIMM 16GB, DDR4-3200, CL22-22-22-53 (CMSX16GX4M1A3200C22)
Samsung SSD 980 1TB, M.2 (MZ-V8V1T0BW)


Nein ich habe meinen "NAS/ PBS" Pool, auch wegen der Kosten, als:
* ZFS RaidZ1 3x HDD
gestartet.

Dann recht schnell
* ZFS RaidZ1 3x HDD, um das Special Device ZFS, Mirror mit 2x SSD mit Cache, erweitert.

Als ich dann meine Videos usw. drauf hatte, ist der Pool noch von
* ZFS RaidZ1-0 3x HDD, um RaidZ1-1 3x HDD, sowie Special Device ZFS, MIRROR mit 2x SSD mit Cache,
erweitert worden.

Aber die beiden laufen als Mirror oder? Somit hast du 50% Nutzkapazität wegen Mirror und davon nur 80-85% der Nutzkapazität wegen RAIDz1 oder?
Das special device ist ja so gesehen nicht als Nutzkapazität zu sehen.

Hab ich das so richtig verstanden?

Also die Snapshot werden automatisch erzeugt und gelöscht.
$ apt install zfs-auto-snapshot

Dann werden unterschiedliche CronJobs angelegt:
* /etc/cron.d/zfs-auto-snapshot -- alle 15 Minuten, je nach Konfiguration, N davon, werden aufgehoben.
* cron.hourly/zfs-auto-snapshot -- jede Stunde
* cron.daily/zfs-auto-snapshot -- jeden Tag
* cron.weekly/zfs-auto-snapshot -- jeden Woche
* cron.monthly/zfs-auto-snapshot -- jeden Monat

Wie viele davon aufgehoben werden, lässt sich über jeden Cronjob individuell einstellen.

Das kleinste Raster für "Fehler" sind 15 Minuten.

Z.B. lege ich auf dieser Arbeitsmaschine auch Auto-Snapshots an:
Beispiel:
12x alle 15 Minuten
24x pro Stunde
7x pro Tag
2x pro Woche
0x pro Monat

OK, das mit dem auto snapshot hab ich jetzt auch ein Video dazu gefunden. Coole Sache.
Die werden bei dir wo genau abgelegt?

Man kann z.B. Filesysteme und Blockdevice erzeugen.
Filesysteme:
ZFS rpool/<my-file-system> ::= mount point /rpool/<my-file-system>/

Blockdevice:
ZFS rpool/<my-block-device> ::= Device /dev/zvol/rpool/<my-block-device> -> ../../zd0

Also das Filesystem hast du mit der Proxmox Installation erstellt (rpool)
Und Block devices sind deine Dateistruktur. Mehr oder weniger Partitionen oder?
Diese werden nach der Installation im rpool generiert oder?

Für mich ist die Datenintegrität von ZFS ein sehr wichtige Funktion, das unter alles umständen nur korrekte Daten geschrieben werden und jeder Speicherblock auch über Checksummen verfügt.
Es wird so sicher u.a. ein Bitrot auf den HDDs oder SSDs erkannt.
Frage dich bitte man, welches Datei und Filessystem das noch kann und auch über SnapShots verfügt.
Wenn man will, kann man, neben der dynamischen Dateikompremierung, auch noch Verschüsselung mit "einschalten".
Es ist halt eine Enterprise Datei und Filessystem, dass nun uns Usern zur Verfügung steht.

Ja ist unglaublich, was das System alles kann. Gerade der Bitrod Check ist einfach genial und dazu noch ein Backup über Snapshot. Das ist einfach nahezu perfekt. Darum will ich ja auch darauf umsteigen. Einfach sicher für die Zukunft und sehr viele Eventualitäten. Was ich schon gelernt habe ist halt vorab vernünftig zu planen, wie die Grundstruktur aussehen soll.
 
Proxmox legt als Standard einen Pool als "rpool" an, dort wird in deinem Fall der 2x NVMe ZFS-Mirror, der Betriebssystem unter root und Daten liegen.
Die benötigten die Bootpartitionen werden dann in deinem Fall als Mirror angelegt und von Proxmox, debian 12 verwaltet.
Somit kann man von jeder NVMe auch booten.

Filesystem und Blockdevice sind dann die Datenspeichertypen.

Dort können dann auch direkt Daten abgelegt werden.
Kein mkfs -t <fs> <device> mehr.

Sorry, wenn Du die Zahl 3x übersehen haben solltest:

ZFS RaidZ1-0 3x HDD + ZFS RaidZ1-1 3x HDD und ZFS Special Device als ZFS mirror mit 2x SSD.

Das ZFS Special Device speichert, default nur Meta-Daten.
Das sind u.a. die Orte der Blöck (i.a. 128k) als verkette Liste deiner Daten.

Snapshot liegen als verstecktes Verzeichnis (default, ro) unter Bsp.: rpool/<filesystem-daten>/.zfs/snapshot/

Fang an und spiele damit ein wenig rum.
 
My 2 cents:

1. Beim Partitionieren dran denken, unpartitionierten Platz für Swap zu lassen und das nachträglich als Swap-Partition anlegen. Mit ZFS swappt es sich nicht so gut per swapfile. Bei LVM-Installationen wird automatisch eine Swap-Partition konfiguriert, bei ZFS nicht.

2. Ich würde, nachdem ich das mit ZFS selbst gemacht habe, nochmals gründlich darüber nachdenken:

Klar ist, dass ZFS für Dateiablage eigentlich ein super Dateisystem ist. Für Proxmox ist die Unterstützung allerdings etwas halbgar. Es wird immer darauf verwiesen, dass eine Live-Migration nur mit ZFS klappt, aber wer dieses Feature nicht braucht, hat eigentlich ziemlich viele Nachteile:

a. Mit ZFS als local-zfs lassen sich ausschließlich lineare Snapshots machen. Punkt. Das bedeutet, dass man, wenn man sinnvolle Tools wie cv4pve-autosnap verwendet, leider eben gerade nicht auf ältere Snapshots, sondern nur den jeweils neuesten zurückgreifen kann, was den ganzen Ansatz ziemlich ad absurdum führt. Alle Versuche dazu, das mit Tricks zu umgehen, führen leider nicht weiter.

b. Man kann natürlich einen separates ZFS-Dataset im rpool machen, in dem man "vollständige" Snapshots machen kann, das geht dann aber nur mit QCOW2-Images. Diese haben wieder spezifische Probleme, beispielsweise kann man sie nicht für TPM states verwenden - ohne Not, das ginge technisch ohne Weiteres. Außerdem lassen sich EFI-Disks nicht so einfach verschieben und müssen per Backup/Restore verwaltet werden. Effekt: Einige Maschinentypen lassen sich überhaupt nicht mehr snapshotten.

c. Es gab in jüngster Zeit ein paar weitere Probleme, z.B. https://github.com/openzfs/zfs/issues/15223 (gefixt) oder https://github.com/openzfs/zfs/issues/15270 (ungefixt, aber per Kernel-Parameter zu umgehen).

d. Proxmox benötigt für temporäre Dateien während eines Backups mit VZDUMP u.U. auch ACLs. Man muss also auf man das ZFS-Feature "acltype=posixacl" auf rpool/ROOT/pve-1 setzen.

Wenn ich erneut vor der Entscheidung stünde, ein neues System aufzusetzen, würde ich nach den gemachten Erfahrungen jederzeit normale File-Shares mit ZFS verwalten, aber Proxmox-VMs und LXCs selbst ganz normal auf LVM-Thin betreiben, was ja auch immer noch der Default ist.

Konkret würde das heißen: Eine NVME für Proxmox, stinknormal mit LVM-Thin und zwei Harddisks als Dateistore mit ZFS-RAID (oder wenn mehr als zwei: z1/2). Da drauf kann man dann Backups, Templates usw. legen.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!