it-swarm.com.de

Freigegebener Ordner zwischen QEMU Windows-Gast und Linux-Host

In der Vergangenheit habe ich Virtual Box verwendet, die eine sehr gute Unterstützung für die Freigabe eines Ordners auf dem Host für einen Windows-Gast bietet. Ich suche nach ähnlichen Funktionen für QEMU.

In der Dokumentation wird empfohlen, einen Samba-Server verfügbar zu machen, der irgendwo im Netzwerk ausgeführt wird, oder -Net User,smb=/path/to/folder um einen Samba-Server zu starten.

Ich hatte kein Glück mit dem -Net User,smb Option von QEMU. Alles, was es tut, ist das Starten von smbd (das aufgrund eines Portkonflikts mit einem anderen lokal ausgeführten Dienst in Konflikt steht). Es genügt zu sagen, dass dies unbrauchbar ist, insbesondere für mehrere Gäste. (Für Linux -virtfs (Plan 9) kann für die einfache Freigabe von Ordnern verwendet werden.)

Andere Probleme mit Samba sind, dass es nicht nur auf die Ordnerfreigabe beschränkt ist, sondern auch die Druckerfreigabe, Benutzerzuordnung und so weiter. Ich muss lediglich einen (oder mehrere?) Ordner für den Windows-Gast freigeben.

Gibt es eine alternative Methode zur Ordnerfreigabe für QEMU, die mit einem Windows-Gast funktioniert?

Oder gibt es eine Möglichkeit, Samba so zu konfigurieren, dass es sich auf eine sehr begrenzte Anzahl von Funktionen beschränkt und diese in QEMU integriert? Es sollte:

  • Nicht jeder im Netzwerk sollte auf den Ordner zugreifen können.
  • lokale Benutzer eingeschlossen (wenn möglich).
  • Keine anderen Funktionen bereitstellen (Druckerfreigabe).
  • Anwendungsfall: Stellen Sie ein Git-Verzeichnis für Windows bereit, kompilieren Sie es in Windows und verwenden Sie Linux für die Analyse.
  • Windows hat eine akzeptable Geschwindigkeit und verwendet virtio-scsi und virtio-net.
  • Sie können einen Ordner von einem Linux-Host für einen Windows 7-Gast freigeben.
26
Lekensteyn

QEMUs integrierter Samba-Service

Die nicht funktionierende Option -Net User,smb Wurde durch eine Inkompatibilität mit neueren Samba-Versionen (> = 4) verursacht. Dies wurde in QEMU v2.2.0 und neuer mit den folgenden Änderungen behoben:

(Debian hat die beiden letztgenannten Patches auf 2.1 + dfsg-6 zurückportiert, das in Jessie vorhanden ist.)

Verwendungszweck

Sie können einen Ordner als \\10.0.2.4\qemu Exportieren, wenn Sie das Benutzernetzwerk verwenden:

qemu-system-x86_64 \
    -Net User,smb=/absolute/path/to/folder \
    -net nic,model=virtio \
    ...

Wenn QEMU mit diesen Optionen erfolgreich gestartet wurde, wird ein neues /tmp/qemu-smb.*-*/ - Verzeichnis mit einem smb.conf Erstellt. Wenn Sie schnell genug sind, kann diese Datei geändert werden, um Pfade schreibgeschützt zu machen oder weitere Ordner zu exportieren.

Arbeitsweise

Der Samba-Daemon wird immer dann ausgeführt, wenn über ein "Benutzer" -Netzwerk auf die Ports 139 oder 445 zugegriffen wird. Die Kommunikation erfolgt über die Standardeingabe/-ausgabe/-fehler des smbd-Prozesses. Dies ist der Grund, warum neuere Daemons fehlgeschlagen sind. Sie schreiben ihre Fehlermeldung anstelle von Protokollmeldungen in die Pipe.

Aufgrund dieser Funktionsweise überwacht der Dämon die Host-Ports nicht und ist daher nur für den Gast zugänglich. Daher können andere Clients im Netzwerk und sogar lokale Benutzer mit diesem Dämon keinen Zugriff auf Ordner erhalten.

Da die Druckerfreigabe in QEMU v2.2.0 durch die Samba-Konfiguration vollständig deaktiviert ist, ist hier eine weitere Sorge verschwunden.

Die Geschwindigkeit hängt vom Netzwerkadapter ab. Es wird daher empfohlen, den Treiber virtio netkvm unter Windows zu verwenden.

Beachten Sie auch, dass der Dämon über seinen absoluten Pfad (normalerweise /usr/sbin/smbd) Ausgeführt wird, der zur Kompilierungszeit angegeben wurde (mit der Option --smbd). Wann immer Sie eine neue Binärdatei ausprobieren oder smbd einfügen müssen, müssen Sie die Datei unter diesem Pfad ändern.

Andere Vorbehalte

Ausführbare Dateien (*.exe) Müssen auf dem Host (chmod +x FILE) Ausführbar sein, damit der Gast über Ausführungsberechtigungen verfügt. Fügen Sie einer Freigabe die Option acl allow execute always = True Hinzu, um die Ausführung einer beliebigen Datei zu ermöglichen.

Beispiel schreibgeschützte smb.conf-Konfiguration, die die Ausführung einer beliebigen Datei ermöglicht (basierend auf QEMU v2.2.0):

 ... 
 [Qemu] 
 Pfad =/home/peter/windows 
 Schreibgeschützt =  ja  
 Gast ok = wahr 
 Benutzer erzwingen = Peter acl allow execute always = True 
15
Lekensteyn

In 2018 eine einfache Möglichkeit, einen Ordner zwischen einem Linux Host & freizugeben Windows virtuelle Maschine soll aktivieren [~ # ~] rdp [~ # ~] in Windows guest & Verbindung zum vm mit Remmina Remote Desktop Client & Freigeben eines freigegebenen Ordners:

(Remmina RDP settings

Dies erstellt einen Ordner unter Dieser PC ( freigegebener Ordner unter Linux hostname) & a \\tsclient\shared-folder-name Netzwerkfreigabe innerhalb von guest. Sie können auch ein Netzlaufwerk zuordnen:

(Windows Guest folder shares

  • Diese Lösung erfordert nicht , dass samba ausgeführt wird.

  • Getestet unter libvirt/virt-manager sollte aber mit jeder Virtualisierung funktionieren.

6
Stuart Cardall