Um problema de qualquer desenvolvedor, em especial os que tem que lidar com tecnologias como Yocto ou máquinas escravo para compilar software é como mapear de forma transparente uma pasta local dentro da máquina virtual.
Muito frequentemente esse problema desemboca em soluções complexas quando não meia boca, como instalar e configurar SAMBA, NFS ou mesmo SSHFS. E se a pessoa utiliza algo como VirtuaBox, o plugin de guest additions.
Está em hospedeiro Linux, com KVM e virt-manager? A solução já está no próprio kernel do Linux e se chama 9p, um protocolo e sistema de arquivos desenvolvido para o Plan 9.
Hospedeiro
Sem mais delongas, aos passos:
1 - Na janela de configuração da maquina virtual no virt-manager, vá em “Adicionar Hardware”, e selecione “Sistema de arquivos”.
2 - No “Caminho de Origem”, selecione a pasta local do hospedeiro que deseja compartilhar com o hóspede.
3 - No “Caminho de Destino”, coloque um nome aleatório (não exatamente um caminho) que seja que o 9p chame o caminho de origem selecionado. Mo screenshot de exemplo, chama-se “projects”.

Hóspede
No lado do hospedeiro está pronto, execute a máquina a virtual, os próximos passos são no hóspede:
1 - Crie uma pasta qualquer ao qual você irá montar o caminho de origem configurado no hospedeiro (ex. mkdir /mnt/projects)
2 - Monte a pasta com o seguinte comando:
mount -t 9p -o version=9p2000.L -o trans=virtio projects /mnt/projects
O comando deve ser dado em sudo (ou doas) dependendo de seu sistema. Muito importante que a pasta mapeada em seu hospedeiro tenha as permissões de escrita no mesmo usuário e/ou grupo que seu qemu esteja sendo executado pelo virt-manager, ou terá problemas de permission denied.
3 - Pronto, a pasta já deve estar disponível no hóspede na maquina virtual.

Mais simples impossível, e sem ter de instalar “guest additions” ou coisas do tipo no hóspede.
Montar no boot da VM
Supondo que esteja em um Linux com Systemd, que infelizmente se tornou o padrão nos sistemas Linux hoje em dia, é possível ativar a montagem no boot da seguinte forma:
1 - Crie o um arquivo de unidade mount para o systemd em /etc/systemd/system (ex. /etc/systemd/system/mnt-projects.mount) com o seguinte conteúdo, modifique para seu caso de uso.
Lembre-se que o systemd EXIGE que o nome do arquivo de mount tenha um padrão senão ele não é aceito. Por exemplo, se seu ponto de montagem for /mnt/projects, é OBRIGATÓRIO o nome do arquivo ser mnt-projects.mount.
| |
Neste exemplo acima, o What é a label definida no virt-manager para o ponto de montagem, e o Where é onde será montado.
2 - Ative o arquivo, e caso não tenha erros, inicie ele:
sudo systemctl enable mnt-projects.mount
sudo systemctl start mnt-projects.mount
Se tudo ocorreu certo, sua pasta já deve estar montada, caso não, é possível verificar o que ocorreu com systemctl status, por exemplo:
fbugno@armbiancomserver:/etc/systemd/system$ sudo systemctl status mnt-projects.mount
● mnt-projects.mount - Mount 9p Projects Folder
Loaded: loaded (/etc/systemd/system/mnt-projects.mount; enabled; vendor preset: enabled)
Active: active (mounted) since Sun 2022-11-06 02:15:30 UTC; 7min ago
Where: /mnt/projects
What: projects
Tasks: 0 (limit: 9405)
Memory: 12.0K
CPU: 1ms
CGroup: /system.slice/mnt-projects.mount
Nov 06 02:15:30 armbiancomserver systemd[1]: Mounting Mount 9p Projects Folder...
Nov 06 02:15:30 armbiancomserver systemd[1]: Mounted Mount 9p Projects Folder.
Muito bem, mas agora vamos colocar isso para montar no boot no sistema.
3 - Crie em /etc/systemd/system um arquivo de unidade automount. (ex. /etc/systemd/system/mnt-projects.automount):
| |
Bem simples, onde o Where é o ponto de montagem que foi designado no Where do arquivo anterior.
4 - Ative ele no system:
sudo systemctl enable mnt-projects.automount
E é isso! Se você é como eu, admirador de sistemas BSD, sem duvida foi uma experiência horrorosa e não intuitiva, mas Linux hoje em dia é isso. Teste se está correto reiniciando o sistema.