Proxmox virtiofs

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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

  • Datacenter
    • Directory Mappings
      • Add
  • Eintragen:
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
    • Hardware
      • Add
        • Virtiofs
  • 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