Red Hat Training

A Red Hat training course is available for RHEL 8

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:

    1. 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
    2. 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
    3. 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
    4. 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
    5. 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.

    6. 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
    7. 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

  1. No host, exporte um diretório com os arquivos que você deseja compartilhar como um sistema de arquivos em rede (NFS).

    1. 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
    2. 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)
    3. Exportar o sistema de arquivo atualizado.

      # exportfs -a
    4. Assegurar que o processo NFS seja iniciado:

      # systemctl start nfs-server
    5. 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.

  2. No SO convidado de uma VM especificada no arquivo /etc/exports, monte o sistema de arquivo exportado.

    1. 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
    2. 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ão 192.168.124.1 no site /mnt/host-share no convidado:

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
    3. 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