Error en Vagrant al Montar directorio compartido con NFS

vagrant error mount.nfs: access denied by server while mounting

Si has utilizado Vagrant sabrás que facilita el desarrollo de aplicaciones al permitir crear de ambientes de pruebas o de desarrollo de forma sencilla. Sin embargo hace algunos días me ocurrió un extraño error al montar un directorio NFS desde la VM con Ubuntu 16.04 xenial que decía:  mount.nfs: access denied by server while mounting … y estuve tratando de resolver el problema hasta que encontré la solución y aquí como resolverlo.

Error en Vagrant mount.nfs: access denied by server while mounting

El error se presentaba al iniciar la máquina virtual en Vagrant y al momento de querer montar el directorio compartido mediante NFS arrojaba un error parecido a esto:

==> default: Mounting NFS shared folders...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -o vers=3,udp 10.4.4.1:/home/lm/Vagrant/phvm03 /home/vagrant/code

Stdout from the command:

Stderr from the command:
mount.nfs: access denied by server while mounting 10.4.4.1:/home/lm/Vagrant/phvm03

Pasé horas intentando resolver el problema en la configuración de los exports entre otras soluciones, pero este no es el problema.

La situación particular que tengo es que estoy usando Ubuntu 16.04 Xenial como imagen para la máquina virtual de Vagrant y también tengo un derivado de Ubuntu 16.04 en el equipo host mediante Linux Mint 18.2.

Así que para poder compartir un directorio local por NFS y tenerlo accesible en la VM vagrant debí instalar el servidor NFS mediante el paquete nfs-kernel-server.

Al parece este servidor NFS utiliza la versión 4 de este protocolo mientras que el comando en la VM vagrant intentaba acceder mediante la versión 3.

vagrant error mount.nfs: access denied by server while mounting

Este detalle lo puedes ver en el comando que se reporta en el mensaje del error:

mount -o vers=3,udp 10.4.4.1...

El indicio de como solucionar este problema lo encontré a la VM para intentar montar manualmente el directorio lo que daba el mismo resultado con estos parámetros, mientras que montaba perfectamente con el comando sin los parámetros «-o vers=3,udp».

Al verificar los parámetros del recurso NFS que ya estaba montado mostraba que se conectaba con la versión 4 del protocolo

$ nfsstat -m
/home/vagrant/code from 10.4.4.1:/home/lm/Vagrant/phvm03
 Flags: rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.4.4.51,local_lock=none,addr=10.4.4.1

Entonces el problema no era la configuración de los exports sino la versión con la que se estaba intentando conectar desde la VM de Vagrant. Buscando en la documentación de Vagrant sobre las conexiones NFS también llamados «synced folders» encontré como determinar la versión del protocolo.

La Solución al problema está en el Vagrantfile

La solución de este problema y lograr que Vagrant conecte un directorio compartido NFS sin problema es agregar un par de parámetros a la configuración del sync directory en el archivo Vagrantfile.

La configuración original del Vagrantfile para este directorio NFS era la siguiente

 # Share an additional folder to the guest VM. The first argument is
 # the path on the host to the actual folder. The second argument is
 # the path on the guest to mount the folder. And the optional third
 # argument is a set of non-required options.
 config.vm.synced_folder ".", "/home/vagrant/code", nfs: true

En versiones anteriores esta configuración funcionaba sin problema pero con Ubuntu 16.04 Xenial al parecer esto ya no funciona y se requiere agregar un par de parámetros para que quede así:

 config.vm.synced_folder ".", "/home/vagrant/code", nfs: true, nfs_version: 4, nfs_udp: false

De esta forma al iniciar la VM con el comando «vagrant up» se monta el directorio compartido de forma automática y sin problema y el problema se resuelve.

Tu Servidor y Amigo

Luis Armando Medina Avitia
@larmdina

This entry was posted in Blog and tagged , , , . Bookmark the permalink.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*


Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.