Capítulo 14. Compartilhamento de arquivos entre o host e suas máquinas virtuais
Você pode freqüentemente precisar compartilhar dados entre seu sistema host e as máquinas virtuais (VMs) que ele executa. Para fazer isso de forma rápida e eficiente, você pode configurar compartilhamentos de arquivos NFS ou Samba em seu sistema.
14.1. Compartilhamento de arquivos entre o host e as máquinas virtuais Linux
Para um compartilhamento eficiente de arquivos entre seu sistema host e as VMs Linux às quais ele está conectado, você pode exportar um compartilhamento NFS que suas VMs podem montar e acessar.
Pré-requisitos
-
O pacote
nfs-utils
está instalado no host. Um diretório que você deseja compartilhar com seus VMs. Se você não quiser compartilhar nenhum de seus diretórios existentes, crie um novo, por exemplo, chamado shared-files.
# mkdir shared-files
O host é visível e alcançável através de uma rede para o VM. Este é geralmente o caso se a VM estiver conectada usando o tipo de rede virtual NAT e bridge. Entretanto, para a conexão macvtap, é necessário primeiro configurar o recurso macvlan no host. Para fazer isso:
Criar um arquivo de dispositivo de rede, por exemplo, chamado
vm-macvlan.netdev
no diretório/etc/systemd/network/
do host.# touch /etc/systemd/network/vm-macvlan.netdev
Edite o arquivo do dispositivo de rede para ter o seguinte conteúdo. Você pode substituir
vm-macvlan
pelo nome que você escolheu para seu dispositivo de rede.[NetDev] Name=vm-macvlan Kind=macvlan [MACVLAN] Mode=bridge
Crie um arquivo de configuração de rede para seu dispositivo de rede macvlan, por exemplo
vm-macvlan.network
.# touch /etc/systemd/network/vm-macvlan.network
Edite o arquivo de configuração da rede para ter o seguinte conteúdo. Você pode substituir
vm-macvlan
pelo nome que você escolheu para seu dispositivo de rede.[Match] Name=_vm-macvlan_ [Network] IPForward=yes Address=192.168.250.33/24 Gateway=192.168.250.1 DNS=192.168.250.1
Crie um arquivo de configuração de rede para sua interface física de rede. Por exemplo, se sua interface é
enp4s0
:# touch /etc/systemd/network/enp4s0.network
Se você não tiver certeza de qual nome de interface usar, você pode usar o comando
ifconfig
em seu host para obter a lista de interfaces de rede ativas.Edite o arquivo de configuração física da rede para tornar a rede física uma parte da interface macvlan, neste caso vm-macvlan:
[Match] Name=enp4s0 [Network] MACVLAN=vm-macvlan
- Reinicie seu anfitrião.
- Optional: Para maior segurança, garanta que suas VMs sejam compatíveis com o NFS versão 4 ou posterior.
Procedimento
No host, exporte um diretório com os arquivos que você deseja compartilhar como um sistema de arquivos em rede (NFS).
Obter o endereço IP de cada máquina virtual com a qual você deseja compartilhar arquivos. O exemplo a seguir obtém os IPs de testguest1 e testguest2.
# virsh domifaddr testguest1 Name MAC address Protocol Address ---------------------------------------------------------------- vnet0 52:53:00:84:57:90 ipv4 192.168.124.220/24 # virsh domifaddr testguest2 Name MAC address Protocol Address ---------------------------------------------------------------- vnet1 52:53:00:65:29:21 ipv4 192.168.124.17/24
Edite o arquivo
/etc/exports
no host e adicione uma linha que inclua o diretório que você deseja compartilhar, IPs de VMs com as quais você deseja compartilhar, e opções de compartilhamento.Shared directory VM1-IP(options) VM2-IP(options) [...]
Por exemplo, o seguinte compartilha o diretório
/usr/local/shared-files
no host com testguest1 e testguest2, e permite que as VMs editem o conteúdo do diretório:/usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
Exportar o sistema de arquivo atualizado.
# exportfs -a
Assegurar que o processo NFS seja iniciado:
# systemctl start nfs-server
Obter o endereço IP do sistema hospedeiro. Isto será usado para montagem posterior do diretório compartilhado nas VMs.
# ip addr [...] 5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0 valid_lft forever preferred_lft forever [...]
Observe que a rede relevante é aquela que está sendo usada para conexão com o host pelas VMs com as quais você deseja compartilhar arquivos. Normalmente, isto é
virbr0
.
No SO convidado de uma VM especificada no arquivo
/etc/exports
, monte o sistema de arquivo exportado.Crie um diretório que você deseja usar como ponto de montagem para o sistema de arquivos compartilhados, por exemplo
/mnt/host-share
:# mkdir /mnt/host-share
Montar o diretório exportado pelo anfitrião no ponto de montagem. Este exemplo monta o diretório
/usr/local/shared-files
exportado pelo anfitrião192.168.124.1
no site/mnt/host-share
no convidado:# mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
Para verificar o sucesso da montagem, acessar e explorar o diretório compartilhado no ponto de montagem:
# cd /mnt/host-share # ls shared-file1 shared-file2 shared-file3