Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 14. Compartir archivos entre el host y sus máquinas virtuales

Es posible que con frecuencia necesite compartir datos entre su sistema anfitrión y las máquinas virtuales (VM) que ejecuta. Para hacerlo de forma rápida y eficiente, puede configurar recursos compartidos de archivos NFS o Samba en su sistema.

14.1. Compartir archivos entre el host y las máquinas virtuales Linux

Para compartir archivos de manera eficiente entre su sistema anfitrión y las máquinas virtuales Linux a las que está conectado, puede exportar un recurso compartido NFS que sus máquinas virtuales puedan montar y acceder.

Requisitos previos

  • El paquete nfs-utils está instalado en el host.
  • Un directorio que quieras compartir con tus máquinas virtuales. Si no quiere compartir ninguno de sus directorios existentes, cree uno nuevo, por ejemplo llamado shared-files.

    # mkdir shared-files
  • El host es visible y alcanzable a través de una red para la VM. Esto es generalmente el caso si la VM está conectada usando el tipo de redes virtuales NAT y bridge. Sin embargo, para la conexión macvtap, primero debe configurar la función macvlan en el host. Para ello:

    1. Cree un archivo de dispositivo de red, por ejemplo, llamado vm-macvlan.netdev en el directorio /etc/systemd/network/ del host.

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. Edite el archivo del dispositivo de red para que tenga el siguiente contenido. Puede sustituir vm-macvlan por el nombre que haya elegido para su dispositivo de red.

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. Cree un archivo de configuración de red para su dispositivo de red macvlan, por ejemplo vm-macvlan.network.

      # touch /etc/systemd/network/vm-macvlan.network
    4. Edite el archivo de configuración de red para que tenga el siguiente contenido. Puede sustituir vm-macvlan por el nombre que haya elegido para su dispositivo de red.

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. Cree un archivo de configuración de red para su interfaz de red física. Por ejemplo, si su interfaz es enp4s0:

      # touch /etc/systemd/network/enp4s0.network

      Si no está seguro de qué nombre de interfaz utilizar, puede utilizar el comando ifconfig en su host para obtener la lista de interfaces de red activas.

    6. Edite el archivo de configuración de la red física para que la red física forme parte de la interfaz macvlan, en este caso vm-macvlan:

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. Reinicie su host.
  • Optional: Para mejorar la seguridad, asegúrese de que sus máquinas virtuales son compatibles con la versión 4 o posterior de NFS.

Procedimiento

  1. En el host, exporte un directorio con los archivos que desea compartir como sistema de archivos de red (NFS).

    1. Obtenga la dirección IP de cada máquina virtual con la que desee compartir archivos. El siguiente ejemplo obtiene las IP de testguest1 y 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 el archivo /etc/exports en el host y añada una línea que incluya el directorio que desea compartir, las IP de las máquinas virtuales con las que desea compartir y las opciones de compartición.

      Shared directory VM1-IP(options) VM2-IP(options) [...]

      Por ejemplo, lo siguiente comparte el directorio /usr/local/shared-files en el host con testguest1 y testguest2, y permite a las máquinas virtuales editar el contenido del directorio:

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
    3. Exporta el sistema de archivos actualizado.

      # exportfs -a
    4. Asegúrese de que el proceso NFS se inicia:

      # systemctl start nfs-server
    5. Obtenga la dirección IP del sistema anfitrión. Se utilizará para montar el directorio compartido en las máquinas virtuales más adelante.

      # 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
      [...]

      Tenga en cuenta que la red relevante es la que se utiliza para la conexión al host por parte de las VMs con las que quiere compartir archivos. Normalmente, esta es virbr0.

  2. En el sistema operativo invitado de una máquina virtual especificada en el archivo /etc/exports, monte el sistema de archivos exportado.

    1. Cree un directorio que desee utilizar como punto de montaje para el sistema de archivos compartido, por ejemplo /mnt/host-share:

      # mkdir /mnt/host-share
    2. Monta el directorio exportado por el host en el punto de montaje. Este ejemplo monta el directorio /usr/local/shared-files exportado por el host 192.168.124.1 en /mnt/host-share en el invitado:

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
    3. Para verificar que el montaje se ha realizado con éxito, accede y explora el directorio compartido en el punto de montaje:

      # cd /mnt/host-share
      # ls
      shared-file1  shared-file2  shared-file3