Linux und Windows HelpDesk

Festplatte in Host und (mehreren) VMs einbinden.

Benötigt man eine Festplatte gleichzeitig auf dem Host und in einer oder mehreren VMs, wird zumeist auf die Netzwerkprotokolle NFS oder CIFS, also Samba zurückgegriffen.
Eine weitere und recht einfach einzurichtende Möglichkeit, bietet das auch virtio-9p genanten QEMU 9pfs Filesystem Protokoll.

Auf dem Host ist dafür zunächst die Konfigurationsdatei der jeweiligen VM unter /etc/pve/local/qemu-server/<vmid>.conf mit dem Editor zu öffnen und die folgende Zeile einzufügen. Die VM sollte dabei nicht in Betrieb sein.
Wenn es in der Konfigurationsdatei bereits eine Zeile "args:" gibt, dann wird diese mit den folgenden Angaben nur erweitert.

args: -fsdev local,security_model=passthrough,id=fsdev0,multidevs=remap,path=/mnt/sdX, -device virtio-9p-pci,fsdev=fsdev0,mount_tag=fsdev0_sdX

Diese Punkte sind individuell an das System anzupassen.

security_model
Bei der von offizieller Seite nicht empfohlenen Angabe "passthrough", werden die Dateien mit unveränderten Rechten für Benutzer und Gruppen auf dem Host abgelegt. Verwendet man stattdessen "mapped-xattr" als security model, haben die abgelegten Dateien nur eingeschränkte Rechte. Bei meinen Tests, wurden die Dateien mit den Rechten 600 auf dem Host abgelegt. Ist das für den jeweiligen Zweck ausreichend, so ist aus Sicherheitsgründen die Verwendung der Option "mapped-xattr" anzuraten.
id
Die ID kann mehr oder weniger frei definiert werden. Richtet man mehrere Freigaben ein, sollten die IDs unterschiedlich sein.
path
Hier ist der Mountpoint der Festplatte auf dem Host anzugeben. Es ist ebenso möglich, nur einen einzelnen Ordner als Freigabe anzugeben.
fsdev
Hier wird der bereits unter ID angegebene Wert eingetragen.
mount_tag
Auch dieser Wert kann frei definiert werden und entspricht der Angabe der Partition im mount Aufruf bzw. in der /etc/fstab, auf dem Gast-System.

Die VM kann nun wieder gestartet werden und sollte dabei keinerlei Auffälligkeiten zeigen.
Mit den folgenden Befehlen wird das Verzeichnis für den Mountpoint erstellt und die Freigabe auf dem Gast gemountet. Die angegebene Partition im Aufruf, ist entspricht der Angabe mount_tag welche in der Datei <vmid>.conf angegeben wurde, anzupassen.

# mkdir /mnt/sdX
# mount -t 9p -o trans=virtio,version=9p2000.L fsdev0_sdX /mnt/sdX

Möchte man erreichen, dass die Freigabe automatisch beim booten der VM gemountet wird, fügt man in die Datei /etc/fstab folgende Zeile mit entsprechend angepasster Angabe für Partition und Mountpoint hinzu.

fsdev0_sdX /mnt/sdX 9p trans=virtio,version=9p2000.L,nobootwait,rw,_netdev 0 0

In der Regel ist es nötig die Option _netdev anzugeben, damit die Freigabe beim Boot gemountet wird. Beim Eisfair-Server habe ich beobachtet, dass diese Option den gegenteiligen Effekt hatte und entfernt werden musste. Wird eine Freigabe beim Boot nicht gemountet, kann aber mit einem händischen Mount Befehl eingebunden werden, dann sollte die Option _netdev entfernt werden.

An einer Unterstützung für Windows-Gäste wird lt. QEMU-Dokumentation derzeit noch gearbeitet. MacOS-Gäste werden lt. den dortigen Angaben seit QEMU 7.0 unterstützt.