web-dev-qa-db-fra.com

Dossier partagé entre l'invité QEMU Windows et l'hôte Linux

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:

  • Tout le monde sur le réseau ne devrait pas pouvoir accéder au dossier.
  • utilisateurs locaux inclus (si possible).
  • Ne fournit pas d'autres fonctionnalités (partage d'imprimante).
  • Cas d'utilisation: exposez un répertoire git à Windows, compilez-le dans Windows et utilisez Linux pour l'analyse.
  • Avoir une vitesse acceptable, Windows utilise virtio-scsi et virtio-net.
  • Pouvoir partager un dossier d'un hôte Linux avec un invité Windows 7.
26
Lekensteyn

Service Samba intégré de QEMU

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.)

Usage

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.

Mode de fonctionnement

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.

Autres mises en garde

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 
15
Lekensteyn

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é:

Remmina RDP settings

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:

Windows Guest folder shares

  • Cette solution n'exige pas d'exécuter samba.

  • Testé sous libvirt/virt-manager mais devrait fonctionner avec n'importe quelle virtualisation.

6
Stuart Cardall