Dans le passé, j'ai utilisé Virtual Box qui a un très bon support pour partager un dossier sur l'hôte avec un invité Windows. Je recherche des fonctionnalités similaires pour QEMU.
La documentation suggère d'exposer un serveur Samba fonctionnant quelque part sur le réseau, ou d'utiliser le -Net User,smb=/path/to/folder
pour démarrer un serveur samba.
Je n'ai pas eu de chance avec le -Net User,smb
option de QEMU. Il ne fait que démarrer smbd
(qui entre en conflit avec un autre service s'exécutant localement en raison d'un conflit de port). Il suffit de dire que cela est inutilisable, surtout avec plusieurs invités à l'esprit. (Pour Linux, -virtfs
(Plan 9) peut être utilisé pour un partage de dossier facile.)
D'autres problèmes avec Samba est qu'il ne se limite pas au partage de dossiers, il fait également le partage d'imprimantes, le mappage d'utilisateurs et tout ce qui n'est pas. Tout ce dont j'ai besoin est de partager un (ou plusieurs?) Dossiers avec l'invité Windows.
Existe-t-il une autre méthode de partage de dossiers pour QEMU qui fonctionne avec un invité Windows?
Ou existe-t-il un moyen de configurer Samba pour se limiter à un ensemble très limité de fonctionnalités et l'intégrer dans QEMU? Cela devrait:
L'option -Net User,smb
Non fonctionnelle a été provoquée par une incompatibilité avec les versions plus récentes de Samba (> = 4). Ceci est corrigé dans QEMU v2.2.0 et plus récent avec ces modifications:
(Debian a rétroporté les deux derniers correctifs vers 2.1 + dfsg-6 qui est présent dans Jessie.)
Vous pouvez exporter un dossier en tant que \\10.0.2.4\qemu
Lorsque vous utilisez le réseau utilisateur:
qemu-system-x86_64 \
-Net User,smb=/absolute/path/to/folder \
-net nic,model=virtio \
...
Lorsque QEMU est démarré avec succès avec ces options, un nouveau répertoire /tmp/qemu-smb.*-*/
Sera créé contenant un smb.conf
. Si vous êtes assez rapide, ce fichier peut être modifié pour rendre les chemins en lecture seule ou exporter plus de dossiers.
Le démon samba est exécuté chaque fois que les ports 139 ou 445 sont accessibles via un réseau "utilisateur". La communication se fait via une entrée/sortie/erreur standard du processus smbd. C'est la raison pour laquelle les nouveaux démons ont échoué, il écrirait son message d'erreur dans le canal au lieu des messages de protocole.
En raison de cette méthode de fonctionnement, le démon n'écoutera pas sur les ports de l'hôte et ne sera donc accessible qu'à l'invité. Ainsi, les autres clients du réseau et même les utilisateurs locaux ne peuvent pas accéder aux dossiers à l'aide de ce démon.
Étant donné que le partage d'imprimante QEMU v2.2.0 est complètement désactivé via la configuration samba, une autre inquiétude a disparu ici.
La vitesse dépend de la carte réseau, il est donc recommandé d'utiliser le pilote virtio netkvm
sous Windows.
Notez également que le démon est exécuté par son chemin absolu (généralement /usr/sbin/smbd
) Comme spécifié lors de la compilation (en utilisant l'option --smbd
). Chaque fois que vous devez essayer un nouveau binaire ou interposer smbd
, vous devrez modifier le fichier à ce chemin.
Les exécutables (*.exe
) Doivent être exécutables sur l'hôte (chmod +x FILE
) Pour que l'invité dispose des autorisations d'exécution. Pour permettre l'exécution de n'importe quel fichier, ajoutez l'option acl allow execute always = True
À un partage.
Exemple configuration en lecture seule smb.conf qui permet l'exécution de n'importe quel fichier (basé sur QEMU v2.2.0):
... [qemu] chemin =/home/peter/windows lecture seule = oui invité ok = vrai forcer l'utilisateur = peter acl allow execute always = True
Dans 2018 un moyen simple de partager un dossier entre un Linux Host & La machine virtuelle Windows doit activer [~ # ~] rdp [~ # ~] dans Windows guest
et connectez-vous à vm
avec Remmina Remote Desktop Client & activez un dossier partagé:
Cela crée un dossier sous Ce PC ( dossier partagé sur Linux hostname
) & a \\tsclient\shared-folder-name
partage réseau à l'intérieur du guest
. Vous pouvez également mapper un lecteur réseau:
Cette solution n'exige pas d'exécuter samba
.
Testé sous libvirt
/virt-manager
mais devrait fonctionner avec n'importe quelle virtualisation.