Como compartir directorios en red local con NFS en Ubuntu

¿Quieres compartir directorios como si fueran directorios locales? La solución la tienes de forma sencilla con NFS, que te permite compartir directorios en red local. Es una increible solución para tener todos tus archivos centralizados en un NAS. O simplemente para hacer copias de seguridad de forma sencilla.

La desaparición de Copy.com me ha hecho desconfiar de los servicios en la nube. Así que me decidí a tener los archivos en mi propio NAS para de esta forma poder acceder a ellos desde donde sea que me encuentre. Ahora bien, cuando estoy en casa, la mejor solución es compartir directorios en red local con NFS. Esto no quiera decir que siga utilizando otros servicios como Drive, a pesar del pésimo soporte que le ha dado a Linux. Pero como estamos unidos vía Android esta relación parece complicada de romper, aunque ya saben como mejorarla…

Sin lugar a dudas existen otros procedimientos para compartir directorios en red local con Ubuntu. Pero tener la posibilidad de montarlos en tu dispositivo y trabajar como si fuera local, es una auténtica comodidad…

Compartir directorios en red local con NFS - logo

Compartir directorios en red local con NFS

NFS o Network File System es un sistema de archivos distribuido en una red local. Este sistema de archivos distribuido permite que distintos dispositivos a esa red local puedan acceder a ficheros remotos como si estuvieran en el propio dispositivo.

Mediante NFS permite compartir un directorio que se encuentra en un dispositivo de la red con otros ordenadores y dispositivos. El ordenador donde está el directorio es el servidor, mientras que los dispositivos que se conectan a este servidor son los clientes.

Compartir directorios en red local con NFS - descripción

Precisamente, un sistema NFS, es perfecto para un NAS o Networked Attached Storage en un medio Linux. NFS es un protocolo nativo en Linux. Justo lo contrario que Samba que utiliza el protocolo SMB desarrollado por Microsoft. Tanto Mac OSX como Windows 7 tienen un buen soporte para NFS. Por todo ello NFS es ideal para compartir directorios en red local.

Como he comentado, NFS se compone de un servidor y un cliente. Así es necesario instalar las herramientas necesarias. Tanto en el ordenador donde se encuentra el directorio y que actuará como servidor, como en los otros ordenadores que actuarán como clientes.

El servidor

Para instalar las herramientas necesarias en el ordenador que actuará como servidor, ejecutaremos la siguiente orden,

sudo apt install nfs-kernel-server

El siguiente paso es definir los directorios que queremos compartir. Para esto editamos el archivo /etc/exports . Así por ejemplo si queremos compartir el directorio compartir, tendríamos que configurarlo de la siguiente forma,

/home/atareao/compartir 192.168.1.0/24(rw,no_subtree_check,async)

Con esto hemos compartido el directorio en cuestión con toda nuestra red (192.168.1.0/24). Indicamos que es de lectura y escritura (rw). No realiza comprobación de subdirectorios (no_subtree_check) lo que en ocasiones mejora el rendimiento. No es necesario que todas las escrituras se completen (async) aunque esto puede conllevar una pérdida de datos en caso de que se produzca un corte de conexión.

En el caso de que no queramos compartirlo con todos los equipos de nuestra red, sino que solo queramos compartirlo con uno de los equipos, por ejemplo con el 192.168.1.100 , la configuración sería distinta. En este caso, en el archivo /etc/exports pondríamos lo siguiente,

/home/atareao/compartir 192.168.1.100(rw,no_subtree_check,async)

De esta manera el directorio /home/atareao/compartir solo estaría disponible para el equipo en la IP 192.168.1.100

Después de cualquier cambio sobre el archivo /etc/exports tenemos que ejecutar la siguiente orden para actualizar la tabla de NFS

sudo exportfs -arv

La opción -a exporta todos los directorios, la opción -r eliminará las entradas antiguas, mientras que la opción  -v nos mostrará el resultado de la ejecución.

Una vez configurado el servidor, es necesario reiniciar el servicio para que funcione correctamente,

sudo systemctl enable nfs
sudo systemctl start nfs

El cliente

Ahora nos toca instalar y configurar el cliente en nuestro equipo Ubuntu. Esto es tan sencillo, como ejecutar la siguiente orden en un emulador de terminal,

Lo primero instalar el cliente,

sudo apt install nfs-common

Por último, nos queda montar el directorio remoto en nuestro equipo, así por ejemplo, si el servidor se encuentra en la IP 192.168.1.181 , y el directorio que queremos montar es /volume1/homes, lo primero que debemos hacer es crear el directorio a montar en nuestro equipo, es decir en el directorio del equipo cliente, para ello, ejecutaremos la siguiente orden en un emulador de terminal,

sudo mkdir -P /mnt/cloudstation/

A continuación solo nos queda ejecutar la siguiente orden en un emulador de terminal, para poder acceder fácilmente a ese directorio…

sudo mount 192.168.1.181:/home/atareao/compartir /mnt/cloudstation/ 

A partir de aquí, podemos trabajar en estos directorios como si estuviéramos en casa, pudiendo realizar todas las operaciones, incluyendo el sincronizado de archivos que comentamos en el artículo Realizar copias de seguridad de Android a Ubuntu con SShelper

El cambio que hemos hecho no es permanente. Es decir, cada vez que reiniciemos el cliente tendremos que volver a montar el directorio remoto. Para añadir el directorio remoto de forma permanente, tenemos que añadir la siguiente línea en el archivo /etc/fstab  en la máquina cliente,

192.168.1.181:/home/atareao/compartir /mnt/cloudstation/ nfs rw,async 0 0

Una vez guardados los cambios en /etc/fstab tienes que desmontar /mnt/cloudstation/ con la orden umount /mnt/cloudstation/ . Posteriormente toca montarlo todo. Para ello ejecuta mount -a que intentará montar todo lo que está en /etc/fstab y que no esté montado, claro.

Por último, si cualquier otra máquina de la red que no sea la que está en la IP 192.168.1.100 arrojará un error como el que se muestra a continuación,

mount.nfs: access denied by server while mounting 192.168.1.181:/home/atareao/compartir

Resumen

Como puedes ver esto es una forma realmente sencilla de compartir un directorio con todos los equipos de tu red. Bueno, con todos o con algunos. Pero, si además en los equipos cliente haces que el montaje sea persistente, es como si trabajaras con un directorio local. De esta forma, realizar operaciones como copias de seguridad u otras operaciones del estilo, se vuelve algo realmente sencillo.

En mi caso particular, yo utilizo este método para compartir directorios del NAS de música, vídeo e imágenes. Así desde cualquier equipo puedo consumir todo el material multimedia. Y el otro uso que le doy es para realizar copias de seguridad en el NAS. De esta forma es como si lo hiciera de forma local.


Más información,

26 comentarios en “Como compartir directorios en red local con NFS en Ubuntu

  1. Excelente articulo! pero me quedaron unas dudas, que ventaja tiene usar nfs con respecto a samba? En caso de que una de las pc cliente sea windows necesita alguna configuración especial?

    En lugar de usar drive, no probaste con mega? tiene cliente de android, linux y windows.

    1. Hola Sephitoth,

      Respecto de las ventajas de NFS respecto a Samba, indicarte que NFS tiene mejor rendimiento cuando se trabajan con archivos de hasta 1 MB (cuanto menor tamaño de archivo mejor rendimiento en NFS respecto a Samba), sin embargo, para tamaños superiores (500 MB y mas) la diferencia es inapreciable.
      Respecto a Windows, al menos tenemos que disponer de Windows 7 en adelante, y detenemos que configurarlo, puedes leer este sitio donde te indica como hacerlo http://www.muspells.net/blog/2011/08/montar-directorios-nfs-bajo-windows-7/
      Sobre Mega…, recientemente he leído noticias respecto a la no continuidad del servicio… No me termino de fiar…

      Saludos y gracias

  2. ¿Sabes si es posible añadir a la sincronización por nfs algún equipo windows? ¿Podríamos tener con nfs una red mixta? Y otra cosa; sobre lo de la desconfianza en la nube… ¿no has probado owncloud, e instalar y configurar tu propia nube en el servidor que elijas?

    1. Depende de la versión de Windows, al menos la 7, puedes leer sobre la configuración en http://www.muspells.net/blog/2011/08/montar-directorios-nfs-bajo-windows-7/.
      Respecto al tema de una red mixta, si te refieres a tener maquinas Linux y Windows en la misma red, indicarte que si es posible.
      Sobre la desconfianza en la nube y owncloud…, actualmente tengo todo replicado en un NAS en casa, y para la sincronización utilizo rsync. Una o dos veces a la semana, sincronizo las copias y listo.
      Si en algún momento necesito un archivo puedo acceder a él, a través de las propias aplicaciones desarrolladas por el fabricante del NAS.

      Gracias y un saludo.

    2. Hola. Respecto a owncloud, yo tengo un server con nextcloud en una r-pi, pero hago las descargas y todo eso en mi máquina de escritorio. El uso de NFS me va a venir genial para pasar los contenidos al servidor web y no tener que estar montando con sshfs (y un lío con los permisos) o usando el flowupload del servidor. Bueno eso creo, je je.

    1. Hola Beni,
      Respecto de los enlaces simbólicos, ten en cuenta que no puedes hacer referencia a un archivo que no se encuentre en el sistema local. Con lo que no podrás utilizar un enlace simbólico a menos que haga referencia, de forma relativa, a un archivo que se encuentre en el directorio que estás montando.
      Respecto al uso de sudo, solo es para realizar el montaje. Luego para acceder a las carpetas ya no lo necesitarás…

      Saludos

  3. tanto lio para compartir una carpeta?? no hay una forma grafica de hacer lo mismo sin usar un terminal?? si tengo que hacer lo mismo con varias carpetas, se pierde tiempo y el tiempo es algo sagrado. Samba es muy inestable y mas aun cunado usas el ufw.No hay otra aplicacion grafica que sea mas simple y menos inconveniente para usar?? no la hay?? punto en contra para linux, sigo con windows, prefiero que me espien y no andar complicandome con algo que tendria que resultar muy simple de hacer.

    1. Escribir 5 líneas en el servidor y 3 en el cliente no parece un lío excesivo. De hecho parece mucho menos complicado que decirle a windows un puñado de veces que estás seguro de que quieres hacer algo. Pero hay gustos a montones, claro.

  4. Hola Atareado, muchas gracias por tu trabajo. Hola a todas y todos.
    Tengo dos máquinas en red entre las que quería compartir una carpeta. La que comparte la carpeta, servidor, ejecuta un ubuntu 16.04 mate y la máquina cliente tiene instalado ubuntu 18.04.
    Seguí los pasos de indicas en este post y a la hora de activar el nfs en el servidor sucedió lo siguiente:

    ricardo@mate:~$ sudo systemctl enable nfs
    Failed to execute operation: No such file or directory

    La solución la encontré en:
    http://microdevsys.com/wp/systemctl-enable-nfs-failed-to-execute-operation-no-such-file-or-directory/

    El demonio en esta situación debe ser invocado como “nfs-kernel-server” y no como «nfs» simplemente
    ricardo@mate:~$ sudo systemctl enable nfs-kernel-serve

    Así ya no hay errores.
    Muchas Gracias.
    Ricardo

  5. Hola,

    Gracias Atareado por tus articulos, me sirven siempre. De hecho suele ser el primer lugar donde consultar cuando tengo dudas. Gracias por tu dedicación.

    Un apunte a tu articulo: al añadir las carpetas remotas en el fstab la velocidad de arranque se ve perjudicada. En mi caso tenia dos unidades remotas nfs y me tardaba como unes 6 o 7 segundos montar cada unidad, en total 12 o 14 segundos más en el arranque.

    Así que buscando he encontrado una otra solución: utilizar autofs.
    – Hay que instalar autofs (sudo apt install autofs)
    – La configuración es bastante sencilla hay que crear un archivo en /etc/, por ejemplo nfs.auto y añadir las carpetas remotas a montar:
    Carpeta o unidad 1 -fstype=nfs4,rw,async ipserver:/mnt/unidad1
    Carpeta o unidad 2 -fstype=nfs4,rw,async ipserver:/mnt/unidad2
    – Después hay que editar el archivo /etc/auto.master y añadir la carpeta local donde se montaran las carpetas remotas y el archivo (el editado anteriormente) donde tiene que buscar la configuración:
    /mnt /etc/auto.nfs
    – Por ultimo reniciar el servicio: sudo systemctl restart autofs.service

    Saludos,

Deja un comentario

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