¿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
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.
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-kernel-server
sudo systemctl start nfs-kernel-server
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,
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.
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
Prefiero ownCloud, es software libre y lo puedo instalar en mi propio servidor.
¿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?
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.
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.
Me lo apunto, claro y conciso. Pero revisa las ódenes de instalación, has puesto «sudo apt install» en vez de «sudo apt-get install»
Un saludo.
Es que en Ubuntu 16.04 ya no es necesario usar apt-get, ahora se puede usar apt que es su reemplazo.
Gracias, no lo sabía.
En realidad se puede usar solo el apt desde ubuntu 14.04.
No sabía que en la 14.04 se podía usar solo apt, si lo hubiera sabido antes me hubiera ahorrado ciertas molestias al usar apt-get y aptitude.
Gracias por la información.
Hola Manuti,
He escrito un artículo para aclarar este tema https://atareao.es/ubuntu/instalar-paquetes-en-ubuntu-apt-vs-apt-get/
Un saludo y gracias.
Ya lo he visto, muchas gracias por aclararlo.
¿Cómo se pueden compartir enlaces simbólicos?
Por otro lado, no veo la necesidad de tener que usar sudo para exportar y acceder a carpetas en el /home del usuario.
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
Perfecto! Gracias!
Añadiría que hay que crear el directorio /mnt/cloudstation en la máquina cliente con:
sudo mkdir /mnt/cloudstation/
Muchas gracias Jordi, he añadido tu comentario al artículo.
Un saludo.
Genial el artículo. Lo uso para compartir Videos en mi red local. Gracias! ¿Se puede acceder a la carpeta compartida desde un Android? lo he intentado con VLC Android, pero no lo consigo. En esta pantalla de configuración no sé muy bien qué poner.
https://uploads.disquscdn.com/images/8119b134eda969301303c631244bd271f0de9a7a5882cdb4d026b95bed2f5162.jpg
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.
Hola Claudio,
Por supuesto que existen otras formas de compartir un directorio. Es algo tan sencillo, como desde el explorador de archivos, pulsar el botón derecho y seleccionar la opción «Recurso compartido en red local».
Saludos.
una respuesta sensata y criteriosa. gracias atareao.
Las estupideces que hay que leer… anda, sigue con tu Windows de juguete y dejanos Linux a los demas…
las respuestas vacias y mediocres que tengo que leer. No uso Windows , solo en el trabajo. Personalmente uso MX Linux.
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.
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
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,
Muchiisimas gracias, la verdad, es que desde que te descubri en la red, no sabes lo que aprendiendo de linux y el gozo que me da, que hagas tutoriales, videos, y que encima los sigas y te salgan!! Gracias Lorenzo!
Muchísimas gracias por tu apoyo.
Un saludo.