Pasta compartilhada entre o convidado do Windows QEMU e o host Linux

18

No passado, usei o Virtual Box, que tem um suporte muito bom para compartilhar uma pasta no host com um convidado do Windows. Eu estou procurando funcionalidade semelhante para o QEMU.

A documentação sugere que exponha um servidor Samba em algum lugar da rede ou use o -net user,smb=/path/to/folder para iniciar um servidor samba.

Eu não tive sorte com a opção -net user,smb do QEMU. Tudo o que ele faz é iniciar smbd (que entra em conflito com outro serviço em execução localmente devido a um conflito de porta). Basta dizer que isso é inutilizável, especialmente com vários convidados em mente. (Para Linux, -virtfs (Plan 9) pode ser usado para facilitar o compartilhamento de pastas.)

Outros problemas com o Samba são que ele não está limitado ao compartilhamento de pastas, ele também faz compartilhamento de impressoras, mapeamento de usuários e whatsnot. Tudo que preciso é compartilhar uma (ou mais?) Pastas com o convidado do Windows.

Existe um método alternativo de compartilhamento de pastas para o QEMU que funciona com um convidado do Windows?

Ou existe uma maneira de configurar o Samba para se restringir a um conjunto muito limitado de recursos e integrá-lo ao QEMU? Deve:

  • Nem todos na rede devem poder acessar a pasta.
  • usuários locais incluídos (se possível).
  • Não fornece outras funcionalidades (compartilhamento de impressoras).
  • Caso de uso: exponha um diretório git ao Windows, compile-o no Windows e use o Linux para análise.
  • Tenha uma velocidade aceitável, o Windows usa virtio-scsi e virtio-net.
  • Consiga compartilhar uma pasta de um host Linux com um convidado do Windows 7.
por Lekensteyn 02.11.2014 / 16:22

2 respostas

11

Serviço Samba embutido do QEMU

A opção -net user,smb não funcional foi causada por uma incompatibilidade com versões mais recentes do Samba (> = 4). Isso é corrigido no QEMU v2.2.0 e mais recente com estas alterações:

(o Debian deu backport aos últimos dois patches para o 2.1 + dfsg-6 que está presente no Jessie.)

Uso

Você pode exportar uma pasta como \10.0.2.4\qemu ao usar rede do usuário:

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

Quando o QEMU é iniciado com êxito com essas opções, um novo diretório /tmp/qemu-smb.*-*/ será criado contendo smb.conf . Se você for rápido o suficiente, esse arquivo pode ser modificado para tornar os caminhos somente leitura ou exportar mais pastas.

Modo de operação

O daemon do samba é executado sempre que as portas 139 ou 445 são acessadas por uma rede de "usuários". A comunicação acontece via entrada / saída / erro padrão do processo smbd. Esta é a razão pela qual os daemons mais novos falharam, ele escreveria sua mensagem de erro no canal em vez de mensagens de protocolo.

Devido a esse método de operação, o daemon não escutará as portas do host e, portanto, só estará acessível ao convidado. Assim, outros clientes na rede e até mesmo usuários locais não podem obter acesso a pastas usando esse daemon.

Como o compartilhamento de impressoras QEMU v2.2.0 está completamente desativado por meio da configuração do samba, outra preocupação desapareceu.

A velocidade depende do adaptador de rede, por isso é recomendável usar o driver virtio netkvm no Windows.

Observe também que o daemon é executado por seu caminho absoluto (normalmente /usr/sbin/smbd ) conforme especificado no tempo de compilação (usando a opção --smbd ). Sempre que você precisar testar um novo binário ou interpor smbd , será necessário modificar o arquivo nesse caminho.

Outras advertências

Executáveis ( *.exe ) devem ser executáveis no host ( chmod +x FILE ) para que o convidado tenha permissões de execução. Para permitir a execução de qualquer arquivo, adicione a opção acl allow execute always = True a um compartilhamento.

Exemplo de configuração somente leitura smb.conf, que permite a execução de qualquer arquivo (baseado no QEMU v2.2.0):

...
[qemu]
path=/home/peter/windows
read only=yes
guest ok=true
force user=peter
acl allow execute always = True
    
por 08.02.2015 / 11:25
1

Em 2018 uma maneira simples de compartilhar uma pasta entre um host Linux & A máquina virtual Windows é ativar RDP no Windows guest & conecte-se ao vm com o Remmina Remote Desktop Client & ativar uma pasta compartilhada:

IstocriaumapastasobEstepc(pastacompartilhadanoLinuxhostname)&umcompartilhamentoderede\tsclient\shared-folder-namedentrodoguest.Vocêtambémpodemapearumaunidadederede:

  • Esta solução não não requer que samba esteja em execução.

  • Testado em libvirt / virt-manager , mas deve funcionar com qualquer virtualização.

por 11.10.2018 / 10:41