In der Vergangenheit habe ich Virtual Box verwendet, die 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 vorgeschlagen, einen Samba-Server verfügbar zu machen, der irgendwo im Netzwerk ausgeführt wird, oder -net user,smb=/path/to/folder
einen Samba-Server zu starten.
Ich hatte kein Glück mit der -net user,smb
Option von QEMU. Es wird lediglich gestartet smbd
(was zu Konflikten mit einem anderen Dienst führt, der aufgrund eines Portkonflikts lokal ausgeführt wird). Es genügt zu sagen, dass dies unbrauchbar ist, insbesondere wenn mehrere Gäste daran denken. (Unter Linux kann -virtfs
(Plan 9) für die einfache Freigabe von Ordnern verwendet werden.)
Andere Probleme mit Samba sind, dass es nicht nur auf die Freigabe von Ordnern beschränkt ist, sondern auch 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 einen sehr begrenzten Funktionsumfang beschränkt und 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: Machen Sie ein Git-Verzeichnis für Windows verfügbar, kompilieren Sie es in Windows und verwenden Sie Linux zur Analyse.
- Haben Sie eine akzeptable Geschwindigkeit, verwendet Windows virtio-scsi und virtio-net.
- Sie können einen Ordner von einem Linux-Host für einen Windows 7-Gast freigeben.
quelle
-virtfs
großartig funktioniert (siehe auch diese Frage), aber mir ist kein 9p-Treiber für Windows bekannt.Antworten:
QEMUs eingebauter Samba-Dienst
Die nicht funktionierende
-net user,smb
Option 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 letzten beiden Patches auf 2.1 + dfsg-6 zurückportiert, das in Jessie vorhanden ist.)
Verwendung
Sie können einen Ordner exportieren,
\\10.0.2.4\qemu
wenn Sie das Benutzer-Netzwerk verwenden:Wenn QEMU mit diesen Optionen erfolgreich gestartet wurde, wird ein neues
/tmp/qemu-smb.*-*/
Verzeichnis erstellt, das a enthältsmb.conf
. Wenn Sie schnell genug sind, kann diese Datei geändert werden, um Pfade schreibgeschützt zu machen oder mehr Ordner zu exportieren.Arbeitsweise
Der Samba-Daemon wird ausgeführt, wenn über ein "Benutzer" -Netzwerk auf die Ports 139 oder 445 zugegriffen wird. Die Kommunikation erfolgt über die Standard-Ein- / Ausgabe / Fehler des SMBD-Prozesses. Dies ist der Grund, warum neuere Daemons fehlgeschlagen sind. Statt Protokollnachrichten wird die Fehlermeldung in die Pipe geschrieben.
Aufgrund dieser Vorgehensweise überwacht der Dämon die Host-Ports nicht und ist daher nur für den Gast zugänglich. Andere Clients im Netzwerk und sogar lokale Benutzer können mit diesem Dämon nicht auf Ordner zugreifen.
Da die Druckerfreigabe in QEMU v2.2.0 in der Samba-Konfiguration vollständig deaktiviert ist, gibt es hier keine weiteren Probleme.
Die Geschwindigkeit hängt vom Netzwerkadapter ab, daher wird empfohlen, den virtio-
netkvm
Treiber unter Windows zu verwenden.Beachten Sie außerdem, dass der Dämon (normalerweise
/usr/sbin/smbd
) anhand seines absoluten Pfads ausgeführt wird , der zum Zeitpunkt der Kompilierung angegeben wurde (mithilfe der--smbd
Option). Wann immer Sie eine neue Binärdatei oder eine Zwischenschaltung versuchen müssensmbd
, müssen Sie die Datei an diesem Pfad ändern.Andere Vorbehalte
Executables (
*.exe
) müssen auf dem Host (chmod +x FILE
) ausführbar sein, damit der Gast über Ausführungsberechtigungen verfügt.acl allow execute always = True
Fügen Sie einer Freigabe die Option hinzu, um die Ausführung einer beliebigen Datei zuzulassen .Beispiel einer schreibgeschützten smb.conf-Konfiguration, die die Ausführung einer beliebigen Datei ermöglicht (basierend auf QEMU v2.2.0):
quelle
\\10.0.2.4\qemu
. In letzter Zeit habe ich diesen Schritt übersprungen und den Pfad direkt aus dem Dialogfeld "Ausführen" heraus geöffnet.Im Jahr 2018 besteht eine einfache Möglichkeit, einen Ordner zwischen einem Linux- Host und einer virtuellen Windows- Maschine freizugeben , darin , RDP in Windows zu aktivieren und mit dem Remmina-Remotedesktop-Client eine
guest
Verbindung herzustellen und einen freigegebenen Ordner zu aktivieren:vm
Dies erstellt einen Ordner unter Dieser PC ( freigegebener Ordner unter Linux
hostname
) und eine\\tsclient\shared-folder-name
Netzwerkfreigabe in derguest
. Sie können auch ein Netzlaufwerk zuordnen:Diese Lösung ist nicht erforderlich zu
samba
laufen.Getestet unter
libvirt
/virt-manager
sollte aber mit keiner Virtualisierung funktionieren.quelle
xfreerdp /drive:shared-folder-name,/home/user/shared
Option sollte auch funktionieren. Quellcode-Referenzen: Remmina-Konfiguration , FreeRDP-Bibliothekscode .