Proxmox VE 6.x und OpenMediaVault 5.x
Damit ich meinen Server möglichst flexibel einsetzen kann, habe ich Proxmox VE 6.x auf dem System installiert. Hauptsächlich soll der Server aber als zentraler Dateiserver bzw. als NAS genutzt werden. Daher sollte in einem der von Proxmox bereitgestellten Container oder VMs ein openmediavaul (OMV) installiert werden. Außerdem soll als Dateisystem ZFS zum Einsatz kommen.
Leider ist eine Installation von OMV in einem LXC-Container nicht so ohne weiteres möglich bzw. der Einsatz von OMV im Container ist nicht vorgesehen. Daher wird in der Regel empfohlen, OMV in einer KVM-Maschine zu installieren - natürlich mit einem entsprechend höheren Ressourcenbedarf. Außerdem unterstützt OMV in Version 5.x Out-of-the-Box das ZFS-Dateisystem nicht direkt. Für ZFS-Unterstützung muss daher auf ein Community-Plugin zurückgegriffen werden, was bei der Aktualisierung bei mir in der Vergangenheit schon zu Problemen beim Update geführt hat, wenn ZFS-Modul und Kernel nicht zusammenpassen und daher das ZFS-Modul nicht aktualisiert werden kann. Das hatte dann auch gerne zur Folge, dass ich auf die ZFS-Freigaben nicht mehr zugreifen konnte.
Die ZFS-Verwaltung soll daher von Proxmox übernommen werden. Hier ist die Unterstützung direkt im Proxmox-Kernel und ist damit hoffentlich etwas weniger fehleranfällig und leichter zu aktualisieren. Über das Dateisystem 9pfs und VirtIO können dann die ZFS-Dateisysteme in OMV bereitgestellt werden.
OMV Installation
Zunächst muss in Proxmox eine virtuelle Maschine angelegt werden. Ich habe dabei folgende Parameter benutzt:
Nachdem das Installations-ISO von OMV heruntergeladen wurde, kann es in Proxmox in einen ISO-Storage-Bereich hochgeladen werden. Dazu muss auf den Proxmox-Knoten der entsprechende Speicher (z.B. local
) der Menüpunkt ISO Images > Upload
ausgewählt werden:
In den Eigenschaften der virtuellen Maschine wird unter dem Menüpunkt Hardware > CD/DVD Drive > Edit > Use CD/DVD disc image file (iso)
das gerade hochgeladene Image für die neue VM bereitgestellt:
Wird jetzt die virtuelle Maschine eingeschaltet so sollte der Setup-Prozess für OMV automatisch starten. Die Installation kann dann wie auf openmediavault.org beschrieben durchgeführt werden.
OMV Plugin sharerootfs installieren
In der Standard-Installation von OMV können keine Dateifreigaben auf dem Root-Dateisystem erzeugt werden. Daher kann der VM entweder eine zweite Festplatte in Proxmox hinzugefügt werden, die dann später zum Mounten der ZFS-Dateisysteme verwendet wird. Einfacher ist es aber, wenn das Plugin sharerootfs
installiert wird:
ZFS-Dateisysteme auf dem Host bereitstellen
Auf dem Host muss jetzt ein ZFS-Dateisystem erstellt werden, wenn es nicht schon existier. Dabei sollte folgende Optionen für das Dateisystem gesetzt werden:
Option | Wert | Beschreibung |
mountpoint | /export/omv/9pshare | Über diese Option wird der absolute Pfad angegeben an dem das Dateisystem gemounted werden soll |
acltype | posixacl | Mit dem Wert wird die Speicherung erweiterter POSIX ACLs aktiviert, die von OMV verwendet werden. |
xattr | sa | Hiermit werden die ACLs direkt an den inode gehangen, so dass die Performance beim Dateizugriff verbessert wird. |
aclinherit | passthrough | Der Wert passthrough legt fest, dass alle ACLs ohne Änderungen an neue Objekte im Verzeichnis vererbt. |
Mit dem folgenden Kommando wird ein entsprechendes ZFS-Dateisystem auf einem bereits existierenden ZFS-Pool dpool
erstellt:
mkdir /export/omv
zfs create -o mountpoint=/export/omv/9pshare -o acltype=posixacl -o xattr=sa -o aclinherit=passthrough dpool/9pshare
Damit wird das ZFS-Dateisystem erzeugt und direkt gemounted.
Im Verzeichnis /etc/pve/qemu-server/ speichert Proxmox VE die Konfigurationsdateien der virtuellen Maschinen. In der Konfigurationsdatei für die das OMV-System wird mit der folgende Zeile gerade erzeugte ZFS-Dateisystem für eine VM bereitgestellt:
args: -virtfs local,path=/export/omv/9pshare,mount_tag=9pshare,security_model=passthrough,id=fs0
Dabei müssen folgende Parameter ggf. angepasst werden:
Parameter | Beschreibung |
path | Mountpoint des ZFS-Dateisystems |
mount_tag | Eine eindeutige Referenz, die in der VM genutzt wird um den Share einzubinden. |
id | Eine eindeutige ID, die intern für die Bereitstellung des Devices verwendet wird. |
Hinweis: Eine vollständige Beschreibung der 9pfs-Parameter ist im QEMU Wiki zu dokumentiert.
Wichtig: Sollen mehrere unterschiedliche ZFS-Dateisysteme in der VM bereitgestellt werden, so muss für jedes Dateisystem ein eigenen virtfs
-Eintrag im Konfigurationsabschnitt args
eingetragen werden. Dabei ist darauf zu achten, dass eindeutige Werte für die Parameter mount_tag
und id
verwendet werden.
Dateisystem in OMV-Guest einbinden
In der openmediavault-VM wird das am Host bereitgestellte ZFS-Dateisystem mit folgendem Eintrag in der Datei /etc/fstab
eingebunden
9pshare /storage/9pshare 9p trans=virtio,version=9p2000.L,nobootwait,rw,msize=524288,user_xattr,posixacl,_netdev 0 0
Der Eintrag 9pshare
ist dabei der in der VM-Konfiguration verwendete mount_tag
. Außerdem sollte der Parameter msize
nicht zu klein gewählt werden, da es ansonsten zu einer langsamen Dateiübertragung kommen kann. Inder Regel wird ein Wert von 262144 empfohlen.
Bevor das Dateisystem eingebunden werden kann, muss sichergestellt werden dass der Mountpoint (hier im Beispiel /storage/9pshare
) existiert. Am einfachsten wird dazu über die OMV-Weboberfläche unter Access Rights Management > Shared Folders > Add
ein neuer Share angelegt:
Danach kann mit dem Kommando mount -a
das ZFS-Dateisystem in OMV eingebunden werden. Der angelegte Shared Folder sollte nun wie gewohnt in OMV verwendet werden können - also z.B. um einen entsprechenden SMB-Share anzulegen.
Performance überprüfen
Wird beim Mounten des #dateisystems in der VM ein zu kleiner msize
-Parameter verwendet, so kann dies zu einem vergleichsweise langsamen Schreib-/Lesezugriff führen. Am besten sollte daher nach erfolgreicher Einbindung die Performance überprüft werden. Dazu muss auf der VM lediglich in das Mount-Verzeichnis (im Beispiel /storage/9pshare
) gewechselt und folgende Kommandos ausgeführt werden:
# Überprüfung der Schreibgeschwindigkeit
dd if=/dev/zero of=test.dat bs=1G count=12
# Überprüfung der Lesegeschwindigkeit
dd if=test.dat of=/dev/null bs=1G count=12
# Löschen der Testdatei
rm test.dat
Um einschätzen zu können wie viel Bandbreite durch die Einbindung via 9pshare
verloren geht, können die Kommandos anschließend auch im ZFS-Dateisystem 9pshare
auf dem Host nochmal ausgeführt werden.
Auf meinem ZFS-RAIDZ1 mit drei 4TB-Festplatten habe ich folgende Werte für Schreib-/Lesegeschwindigkeiten ermittelt:
Schreibgeschwindigkeit | Lesegeschwindigkeit | |
Proxmox Host | 1,8 GB/s | 4,8 GB/s |
OMV Guest | 1,3 GB/s | 2,0 GB/s |
Sollten die Werte nicht den Erwartungen entsprechend, so kann der msize Parameter angepasst werden. Wenn das nicht hilft, so sollte ggf. auch die Ressourcen der VM beim Speed-Test überprüft werden. Bei mir hat es geholfen den Arbeitsspeicher zu erhöhen und einen weiteren Prozessorkern zuzuordnen.
Quellen
[1] https://www.proxmox.com/de/proxmox-ve
[2] https://www.openmediavault.org/
[3] https://wiki.qemu.org/Documentation/9psetup
Kommentare