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:
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
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
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
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
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.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
- 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
En el host, exporte un directorio con los archivos que desea compartir como sistema de archivos de red (NFS).
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
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)
Exporta el sistema de archivos actualizado.
# exportfs -a
Asegúrese de que el proceso NFS se inicia:
# systemctl start nfs-server
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
.
En el sistema operativo invitado de una máquina virtual especificada en el archivo
/etc/exports
, monte el sistema de archivos exportado.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
Monta el directorio exportado por el host en el punto de montaje. Este ejemplo monta el directorio
/usr/local/shared-files
exportado por el host192.168.124.1
en/mnt/host-share
en el invitado:# mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
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