Beschreibung
- Mit virtiofs reicht Proxmox ein Verzeichnis des Hosts direkt an eine VM durch.
- Die VM bindet es wie ein normales Dateisystem ein. Es braucht dafür weder Netzwerk noch einen NFS-Server auf dem Host.
- Das ist schnell, weil Dateizugriffe ohne Umweg über das Netzwerk laufen.
- Die VM sieht nur dieses eine Verzeichnis und nicht den Rest des Hosts.
Voraussetzungen
- Proxmox VE ab 8.4 (die Weboberfläche zeigt dann den Eintrag Directory Mappings).
- Auf dem Host das Paket virtiofsd:
# dpkg -l | grep virtiofsd || apt install virtiofsd
- In der VM ein Linux-Kernel mit virtiofs (jeder aktuelle Debian-, Ubuntu- oder Rocky-Kernel).
Auf dem Proxmox-Host
Verzeichnis zuordnen
| Feld
|
Bedeutung
|
| ID
|
Name der Freigabe, z. B. austausch. Das ist später der Tag in der VM.
|
| Node
|
Der Proxmox-Host, auf dem das Verzeichnis liegt
|
| Path
|
Verzeichnis auf dem Host, z. B. /tank/austausch
|
- Auf der Kommandozeile geht dasselbe:
# pvesh create /cluster/mapping/dir --id austausch --map node=<hostname>,path=/tank/austausch
- Der Eintrag steht nicht bei Resource Mappings → PCI/USB, sondern im eigenen Punkt Directory Mappings.
Freigabe der VM geben
- VM
- Das eben angelegte Mapping wählen.
- Die VM danach über Proxmox stoppen und neu starten. Ein Reboot aus der VM heraus reicht nicht, weil QEMU neu gestartet werden muss.
- Was einer VM zugewiesen ist:
# qm config <vmid> | grep virtiofs
In der VM
Angebotene Freigaben anzeigen
# cat /sys/fs/virtiofs/*/tag
austausch
- Pro Freigabe steht eine Zeile da. Der Tag ist der Name aus dem Mapping.
Einbinden
# mkdir -p /mnt/austausch
# mount -t virtiofs austausch /mnt/austausch
# findmnt -t virtiofs
- Dauerhaft in der /etc/fstab:
austausch /mnt/austausch virtiofs defaults,nofail,noexec,nosuid,nodev 0 0
- nofail verhindert, dass die VM beim Start hängt, wenn die Freigabe fehlt.
- noexec,nosuid,nodev sind sinnvoll, wenn dort nur Daten liegen sollen. Programme in diesem Verzeichnis lassen sich dann nicht starten.
Rechte
- virtiofs reicht Besitzer und Gruppe (UID und GID) unverändert durch. Die Zahlen auf dem Host müssen zu denen in der VM passen.
- Läuft in der VM ein Dienst mit der UID 5001, gehört das Verzeichnis auf dem Host dazu:
# chown -R 5001:5001 /tank/austausch
- Der Dienst in der VM sieht nur das, was seine UID dort darf. Der Host-Benutzer root hat auf der Host-Seite weiter vollen Zugriff.
Grenzen
- Live-Migration einer VM mit virtiofs ist nicht möglich.
- Der Inhalt des Verzeichnisses ist nicht Teil des VM-Backups. Das Verzeichnis muss separat gesichert werden.
Stolperfallen
| Problem
|
Lösung
|
| Kein Eintrag Directory Mappings
|
Proxmox ist älter als 8.4. Erst aktualisieren. Danach Browser-Cache leeren (Strg+Shift+R) oder systemctl restart pveproxy.
|
| cat /sys/fs/virtiofs/*/tag zeigt nichts
|
Die VM wurde noch nicht über Proxmox gestoppt und neu gestartet.
|
| mount meldet unknown filesystem type
|
Der Kernel hat kein virtiofs, oder das Modul fehlt (modprobe virtiofs).
|
| Permission denied beim Schreiben
|
UID und GID auf dem Host stimmen nicht mit dem Benutzer in der VM überein.
|
Quelle