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/folder
para iniciar um servidor samba.
Não tive sorte com a -net user,smb
opçã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.
fonte
-virtfs
funciona muito bem (consulte também esta pergunta), mas não conheço um driver 9p para Windows.Respostas:
Serviço Samba integrado do QEMU
A
-net user,smb
opçã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\qemu
ao usar a rede do usuário:Quando o QEMU é iniciado com êxito com essas opções, um novo
/tmp/qemu-smb.*-*/
diretório será criado contendo umsmb.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 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--smbd
opção). Sempre que você precisar tentar um novo binário ou interporsmbd
, 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 aacl allow execute always = True
opçã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):
fonte
\\10.0.2.4\qemu
. Ultimamente, pulei essa etapa e abri o caminho diretamente na caixa de diálogo Executar.Em 2018 uma maneira simples de compartilhar uma pasta entre um Linux acolhimento e do Windows máquina virtual é permitir RDP em Windows
guest
e conectar-se aovm
com o Remmina Remote Desktop cliente e permitir uma pasta compartilhada:Isso cria uma pasta em Este pc ( pasta compartilhada no Linux
hostname
) e um\\tsclient\shared-folder-name
compartilhamento de rede dentro doguest
. Você também pode mapear uma unidade de rede:Esta solução não precisa
samba
estar em execução.Testado em
libvirt
/virt-manager
mas deve funcionar com qualquer virtualização.fonte
xfreerdp /drive:shared-folder-name,/home/user/shared
opção deve funcionar também. Referências ao código fonte: configuração Remmina , código da biblioteca FreeRDP .