Pasta compartilhada entre o convidado Windows QEMU e o host Linux

24

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

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

Não tive sorte com a -net user,smbopção do QEMU. Tudo o que 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(Plano 9) pode ser usado para facilitar o compartilhamento de pastas.)

Outros problemas com o Samba é que ele não se limita ao compartilhamento de pastas, mas também ao compartilhamento de impressoras, mapeamento de usuários e outros. Tudo o 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 funcione 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? Deveria:

  • Nem todos na rede devem poder acessar a pasta.
  • usuários locais incluídos (se possível).
  • Não fornece outra funcionalidade (compartilhamento de impressora).
  • Caso de uso: exponha um diretório git ao Windows, compile-o no Windows e use Linux para análise.
  • Tenha uma velocidade aceitável, o Windows usa o virtio-scsi e o virtio-net.
  • Consiga compartilhar uma pasta de um host Linux com um convidado do Windows 7.
Lekensteyn
fonte
um sistema operacional questão agnóstico mais: superuser.com/questions/628169/...
Ciro Santilli新疆改造中心法轮功六四事件
11
@CiroSantilli 法轮功 露 宪 六四 事件 Essa pergunta está marcada com Linux, onde -virtfsfunciona muito bem (consulte também esta pergunta), mas não conheço um driver 9p para Windows.
Lekensteyn
sim, não estou dizendo que é um idiota ou algo assim, apenas relacionado.
Ciro Santilli # 11/18

Respostas:

14

Serviço Samba integrado do QEMU

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

(O Debian suportou os dois últimos patches para 2.1 + dfsg-6, que está presente em Jessie.)

Uso

Você pode exportar uma pasta como \\10.0.2.4\qemuao usar a 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 /tmp/qemu-smb.*-*/diretório será criado contendo um smb.conf. Se você for rápido o suficiente, esse arquivo poderá ser modificado para tornar os caminhos somente leitura ou exportar mais pastas.

Modo de operação

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

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

Como o compartilhamento da impressora QEMU v2.2.0 é completamente desabilitado através da configuração do samba, outras preocupações desaparecem aqui.

A velocidade depende do adaptador de rede, portanto, é recomendável usar o driver virtionetkvm 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 --smbdopção). Sempre que você precisar tentar um novo binário ou interpor smbd, será necessário modificar o arquivo nesse caminho.

Outras advertências

Os 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 acl allow execute always = Trueopção a um compartilhamento.

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

...
[qemu]
caminho = / home / peter / windows 
somente leitura = sim
convidado ok = verdadeiro
forçar usuário = peter 
acl permitir executar sempre = True
Lekensteyn
fonte
Eu usei essa opção, preciso do acesso de leitura e gravação. Eu reiniciei o serviço qemu e atualizei o conf de acordo. Não vejo nada nas pastas de rede do Explorer no Windows Guest. Também como encontro o IP do host (presumo que seja 10.0.2.4) neste caso aqui? Meu IP de convidado para esta NIC era 10.0.2.15. @Lekensteyn - alguma idéia?
precisa
@ tsar2512 Normalmente vou ao Explorer e, em seguida, uso o Map Network Drive para atribuir uma carta \\10.0.2.4\qemu. Ultimamente, pulei essa etapa e abri o caminho diretamente na caixa de diálogo Executar.
Lekensteyn
6

Em 2018 uma maneira simples de compartilhar uma pasta entre um Linux acolhimento e do Windows máquina virtual é permitir RDP em Windows gueste conectar-se ao vmcom o Remmina Remote Desktop cliente e permitir uma pasta compartilhada:

Configurações RDP do Remmina

Isso cria uma pasta em Este pc ( pasta compartilhada no Linuxhostname ) e um \\tsclient\shared-folder-namecompartilhamento de rede dentro do guest. Você também pode mapear uma unidade de rede:

Compartilhamentos de pastas do Windows Guest

  • Esta solução não precisa sambaestar em execução.

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

Stuart Cardall
fonte
Técnica interessante, o Redirecionamento do sistema de arquivos parece ser um recurso RDP. A xfreerdp /drive:shared-folder-name,/home/user/sharedopção deve funcionar também. Referências ao código fonte: configuração Remmina , código da biblioteca FreeRDP .
Lekensteyn
Essa é uma solução segura sem os perigos de possíveis invasores?
Dave