Virtiofs ist eine moderne und performante Methode, um Verzeichnisse direkt vom Proxmox-Host in virtuelle Maschinen einzubinden. Im Gegensatz zu klassischen Netzwerkdateisystemen wie NFS oder SSHFS erfolgt der Zugriff lokal über den Hypervisor, ohne Netzwerk-Stack und ohne zusätzliche Dienste. Dadurch eignet sich virtiofs besonders für High-Performance-Dateifreigaben zwischen Host und VM, in denen hoher Datendurchsatz, geringe Latenz und eine klare Rechteverwaltung erforderlich sind, etwa bei Videoaufzeichnungen, Datenbanken oder Medienarchiven.
1. Grundprinzip von virtiofs
Virtiofs arbeitet strikt POSIX-konform:
- Benutzer- und Gruppen-IDs (UID/GID) werden numerisch 1:1 vom Host in die VM durchgereicht
- Es findet kein User- oder ID-Mapping statt
- Dateirechte und Benutzer werden ausschließlich auf dem Host definiert und von der VM übernommen
- Mount-Optionen wie
uid=,gid=oderallow_otherwerden ignoriert
Das bedeutet: Stimmen UID/GID zwischen Host und VM nicht exakt überein, ist Schreiben im Gast nicht möglich.
2. Host vorbereiten
2.1 Host-Verzeichnis
Für die Nutzung von Virtio-FS ist eine eindeutige Trennung zwischen dem Verzeichnis auf dem Proxmox-Host und dem Mountpunkt innerhalb der virtuellen Maschine erforderlich. Das Verzeichnis befindet sich physisch auf dem Host, entweder auf einem lokalen Datenträger oder auf einem eingebundenen Storage, und dient als Quelle der Virtio-FS-Freigabe. Sämtliche Zugriffsrechte, Eigentümer und Gruppen werden ausschließlich an diesem Ort definiert und unverändert an die virtuelle Maschine weitergereicht.
|
1 |
/mnt/proxmox-host-dir |
2.2 Benutzer und Gruppen
Der Benutzer, der innerhalb der virtuellen Maschine Schreibzugriff auf das über virtiofs eingebundene Verzeichnis erhalten soll, muss auf dem Proxmox-Host mit identischer Benutzerkennung (UID) und Gruppenzugehörigkeit (GID) vorhanden sein. virtiofs führt keine Übersetzung oder Abbildung von Benutzer- und Gruppenkennungen durch, sondern reicht diese unverändert vom Gast an den Host weiter. Abweichende UIDs oder GIDs führen dazu, dass Zugriffe aus der VM auf Host-Ebene als fremder oder nicht existenter Benutzer interpretiert werden, was in der Praxis zu fehlenden Schreibrechten oder unerwarteten Zugriffsverweigerungen führt.
Aus diesem Grund ist sicherzustellen, dass die relevanten Benutzer und Gruppen auf Host und virtueller Maschine identische numerische IDs besitzen und dass das freigegebene Host-Verzeichnis die entsprechenden Zugriffsrechte entsprechend dieser IDs aufweist.
- Vorhandene Benutzer und Gruppen können überprüft werden:
|
1 2 |
getent passwd vmuser getent group vmuser |
- Falls der Benutzer noch nicht existiert, kann er mit den entsprechenden IDs angelegt werden (ohne Login Shell und Home Verzeichnis):
|
1 2 |
groupadd -g 200 vmuser useradd -u 200 -g 200 -s /usr/sbin/nologin -M vmuser |
- Falls der Benutzer bereits existiert, können UID und GID bei Bedarf angepasst werden:
|
1 2 3 |
usermod -u 200 vmuser # UID ändern groupmod -g 200 vmuser # GID ändern chown -R vmuser:vmuser /home/vmuser # Besitzrechte aktualisieren |
- Die UID/GID müssen mit dem Host übereinstimmen, damit Virtio-FS die Zugriffsrechte korrekt durchreicht.
- Das Home-Verzeichnis und die Shell können nach Bedarf angepasst werden; für reine Virtio-FS-Nutzung ist ein Login nicht zwingend erforderlich.
2.3 Benutzer und Rechte setzen
|
1 2 3 |
chown -R vmuser:vmuser /mnt/proxmox-host-dir chmod -R 775 /mnt/proxmox-host-dir chmod g+s /mnt/proxmox-host-dir |
- 775 erlaubt Schreiben für User und Gruppe
- g+s stellt sicher, dass neu angelegte Dateien automatisch die Gruppe behalten
Alle übergeordneten Verzeichnisse müssen mindestens das Execute-Bit (x) für die jeweilige Gruppe besitzen.
3 Einrichtung eines Virtio-FS-Geräts in Proxmox (Verzeichnis-Mapping)
Bevor in der VM ein virtiofs-Verzeichnis gemountet werden kann, muss in Proxmox zunächst das entsprechende Host-Verzeichnis als virtiofs-Gerät erstellt werden. Dazu in der Weboberfläche zu Rechenzentrum → Verzeichnis-Mapping navigieren, dort auf Erstellen / Hinzufügen klicken und folgende Felder ausfüllen und anschließend mit Erstellen bestätigen.
- Name / Tag: Eindeutiger Bezeichner, z. B.
proxmox-host-dir-name(wird später in der VM als Mount-Name verwendet) - Pfad: Host-Verzeichnis, z. B.
/mnt/proxmox-host-dir - Knoten: Zielknoten auswählen
- Kommentar: optional, z. B. „Freigabe für Ubuntu-VM“
- ACL / Sicherheitsmodell:
none
3.1 Zuweisung des Verzeichnis-Mappings an die VM
- Die gewünschte VM auswählen → Hardware → Hinzufügen → VirtIO-FS-Gerät.
- Im Feld Tag den zuvor definierten Namen des Verzeichnis-Mappings eintragen (
proxmox-host-dir-name). - Optional: Nur Lesen aktivieren, falls Schreibzugriff nicht erforderlich ist.
- Änderungen speichern.
Dadurch wird das Verzeichnis des Proxmox-Hosts (/mnt/proxmox-host-dir) der virtuellen Maschine unter dem Bezeichner proxmox-host-dir-name als Mountquelle bereitgestellt.
4. VM vorbereiten
4.1 Benutzer anlegen / anpassen
In der virtuellen Maschine muss derselbe Benutzer mit identischer UID und GID wie auf dem Proxmox-Host existieren.
- Vorhandene Benutzer und Gruppen können überprüft werden:
|
1 2 |
getent passwd vmuser getent group vmuser |
- Falls der Benutzer noch nicht existiert, kann er mit den entsprechenden IDs angelegt werden:
|
1 2 |
groupadd -g 200 vmuser useradd -u 200 -g 200 -d /home/vmuser -s /bin/bash vmuser |
- Falls der Benutzer bereits existiert, können UID und GID bei Bedarf angepasst werden:
|
1 2 3 |
usermod -u 200 vmuser # UID ändern groupmod -g 200 vmuser # GID ändern chown -R vmuser:vmuser /home/vmuser # Besitzrechte aktualisieren |
Hinweise:
- Die UID/GID müssen mit dem Host übereinstimmen, damit Virtio-FS die Zugriffsrechte korrekt durchreicht.
- Das Home-Verzeichnis und die Shell können nach Bedarf angepasst werden; für reine Virtio-FS-Nutzung ist ein Login nicht zwingend erforderlich.
4.2 Mountpunkt in der VM erstellen und über fstab beim starten einbinden
Nachdem der Benutzer mit den entsprechenden UID/GID in der VM eingerichtet wurde, wird ein Verzeichnis angelegt, das als Ziel für die Virtio-FS-Freigabe vom Host dient. Mit mkdir -p wird der Mountpunkt einschließlich aller übergeordneten Verzeichnisse erstellt, falls diese noch nicht existieren
|
1 |
mkdir -p /mnt/host-dir |
Vor dem dauerhaften Eintrag kann der Mount manuell getestet werden, um sicherzustellen, dass die Freigabe funktioniert.
|
1 |
mount -t virtiofs proxmox-host-dir-name /mnt/host-dir |
mount -t virtiofs verbindet das Host-Verzeichnis (über den Tag proxmox-host-dir-name) mit dem Mountpunkt in der VM. Für einen automatischen Mount bei jedem Bootvorgang wird ein Eintrag in /etc/fstab erstellt.
|
1 |
proxmox-host-dir-name /mnt/host-dir virtiofs rw,nofail,x-systemd.automount 0 0 |
rw– Verzeichnis kann gelesen und beschrieben werdennofail– System startet weiter, auch wenn das Mounten fehlschlägtx-systemd.automount– Mount erfolgt erst beim ersten Zugriff, beschleunigt den Bootvorgang
5. Funktionstest
|
1 2 3 |
mount -a sudo -u vmuser touch /mnt/host-dir/testfile ls -l /mnt/host-dir |
Erwartetes Ergebnis:
|
1 |
-rw-r--r-- 1 vmuser vmuser testfile |
6. Typische Fehlerquellen
- UID/GID zwischen Host und VM stimmen nicht überein
- Ownership wurde nur im Gast, nicht auf dem Host gesetzt
- Übergeordnete Verzeichnisse blockieren den Zugriff (
xfehlt) - Mount-Optionen wie
uid=odergid=werden verwendet (wirkungslos)
Debug-Hilfe:
|
1 |
namei -l /mnt/host-dir journalctl -b | grep virtiofs |
7. Zusammenfassung
Virtiofs ist eine performante und saubere Lösung, um Host-Verzeichnisse direkt in Proxmox-VMs zu nutzen. Entscheidend ist ein konsistentes Benutzer- und Rechtekonzept:
- UID/GID müssen identisch sein
- Rechte werden ausschließlich auf dem Host gepflegt
- Der fstab-Eintrag entscheidet über Boot-Verhalten und Stabilität
Bei korrekter Einrichtung verhält sich virtiofs wie ein lokales Dateisystem – schnell, zuverlässig und ohne Netzwerkabhängigkeiten.
by Speefak