Compartir archivos entre equipos Linux en red local con NFS en Raspberry

De entre los diferentes servicios que podemos instalar, quería empezar por NFS en Raspberry, porque es uno de los grandes desconocidos entre los que provenimos de otros sistemas operativos. Mas que nada, porque en esos otros sistemas operativos no existe.

En mi caso particular, vengo utilizando NFS desde años en detrimento de Samba, por el simple hecho de que en mi red local todos los equipos que tengo conectados son Linux. Y todo en base a mi experiencia personal, con independencia de los datos que mostraré mas adelante. Al menos en mi caso, las velocidades de transmisión, con independencia de los archivos a intercambiar, son sensiblemente mas elevadas cuando lo hago por NFS que cuando lo hago por SMB/CIFS.

Ahora bien, si en tu red, también tienes equipos con otros sistemas operativos, que no pueden aprovechar las bondades de NFS, tendrás que esperar al próximo artículo para ver como instalar SMB/CIFS en tu Raspberry Pi.

Compartir archivos entre equipos Linux en red local con NFS en Raspberry

NFS en Raspberry

NFS vs SMB/CIFS

Adjunto te dejo los resultados de un test realizado en el que se muestran las velocidades

NFS Escritura Samba Escritura NFS Lectura SMB Lectura
10 KiB (6998 files) 37s 101s 26s 58s
1 MiB (240 files) 23s 27s 24s 28s
500 MiB (1 file) 45s 45s 45s 48s
3,5 GiB (1 file) 323s 324s 330s 347s

Instalar y configurar un servidor NFS en Raspberry Pi

Evidentemente, lo primero es acceder a nuestra Raspberry Pi a través de ssh. Recordar que yo he optado a una instalación mínima, sin entorno gráfico. En mi caso, la orden sería la siguiente,

ssh pi@192.168.1.48

Instalar dependencias

Una vez ya estamos en su lado ejecutaremos la siguiente orden para instalar los componentes necesarios,

sudo apt install nfs-common nfs-server -y

Algunas modificaciones para NFS en Raspberry Pi 3

Antes de continuar con la configuración normal de NFS en Raspberry Pi, es necesario realizar unas modificaciones en el archivo /etc/netconfig. Hasta que no hice esta modificación, me resultó imposible utilizar NFS. Esto me resulta extraño, pues lo cierto es que he encontrado pocos sistios donde se muestre esta información. Como te indico es fundamental modificar el archivo /etc/netconfig.

Lo que hay que hacer es comentar las dos siguientes líneas,

udp6 tpi_clts v inet6 udp - -
tcp6 tpi_cots_ord v inet6 tcp - -

Así, en mi caso, el archivo /etc/netconfig, una vez realizadas las modificaciones, tiene el siguiente aspecto,

udp        tpi_clts      v     inet     udp     -       -
tcp        tpi_cots_ord  v     inet     tcp     -       -
#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -
rawip      tpi_raw       -     inet      -      -       -
local      tpi_cots_ord  -     loopback  -      -       -
unix       tpi_cots_ord  -     loopback  -      -       -

Crear un directorio que compartir con NFS en Raspberry

Vamos a crear el directorio que queremos compartir, darle propiedad y asignarle los permisos necesarios. En mi caso yo lo he creado en /srv/nfs4/share/. Lo guardo en /srv, porque este directorio, tradicionalmente, es el que debe contener los datos de los servicios proporcionados por el sistema. Así ejecutaremos la siguiente orden,

sudo mkdir -p /srv/nfs4/share/

Ahora le vamos a cambiar el propietario, y le vamos a asignar permisos,

sudo chown pi:pi /srv/nfs4/share/
sudo chmod  755 /srv/nfs4/share/

Configurando permisos

Ahora tenemos que configurar el archivo /etc/exports que es donde se establecen los directorios que se comparten y los permisos.

El formato para este fichero es:

directorio IP(permisos)

donde,

  • directorio es el directorio que queremos compartir
  • IP es la dirección IP o rango de direcciones a las que queremos dar permiso para que accedan. Así por ejemplo,
    • /srv/nfs4/share 192.168.1.110 solo da permiso a la IP 192.168.1.110. Es decir, solo podremos acceder desde esta dirección.
    • /srv/nfs4/share 192.168.1.0/24 daría acceso a todos las IP comprendidas entre la 192.168.1.1 y la 192.168.1.254
    • /srv/nfs4/share 192.168.1.0/30 daría acceso a las IP 192.168.1.1 y la 192.168.1.2
    • /srv/nfs4/share * permitiría cualquier acceso con independencia de la IP.
  • (permisos) define las características del acceso al directorio. Así, tenemos, que
    • ro lo define como de solo lectura, mientras que rw lo define como de lectura y escritura, es decir, se pueden hacer modificaciones desde el cliente.
    • sync hace que cada las escrituras estén sincronizadas entre cliente y servidor. Evidentemente esto es mas seguro ante una posible caída del sistema, pero puede reducir el rendimiento.
    • secure obliga a que las peticiones de conexión vengan a través de un puerto inferior a 1024.
    • subtree_checkobliga a que todos los directorios correspondan a un mismo volumen, mientras que no_subtree_checkobvia esta comprobación consiguiendo que la transferencia de archivos sea mas rápida.
    • all_squashmapea todos los uids y gids al usuario anómimo.
    • root_squash mapea las peticiones de uid/gid 0 al usuario anómimo.

En mi caso particular, el archivo /etc/exports tiene acualmente el siguiente aspecto

/srv/nfs4/share 192.168.1.0/24(rw,async,no_subtree_check)

Una vez realizados todos los cambios comentados, nos queda actualizar y reiniciar el servicio,

sudo exportfs -ra
sudo update-rc.d rpcbind enable && sudo update-rc.d nfs-common enable
sudo systemctl restart rpcbind
sudo systemctl restart nfs-kernel-server

Con esto ya tenemos nuestro servicio NFS activo. Con la Raspberry Pi, hemos terminado. Ahora debemos configurar todos aquellos dispositivos que quieran acceder a la Raspberry Pi a través de NFS. PAra ello tan solo tienes que seguir las indicaciones del artículo “Como compartir directorios en red local con NFS en Ubuntu”.


Más información,

Si te ha gustado el artículo, apúntate y te mantendré actualizado sobre el que es el mejor sistema operativo. Te mostraré como mejorar tu entorno de trabajo y conseguir ser mucho mas productivo

Publicado en la categoría... Raspberry Pi
Etiquetado como... , , , ,
  • Laureano

    Lo primero y como siempre…. montones de gracias por el interés y lo bien explicado de tus artículos.
    Quisiera pedir algo (si no es complicado claro) y es que incluyeras en “compartir” a Evernote.
    Un saludo,
    Laureano

    • Hola Laureano,
      Muchas gracias por tus comentarios.
      Respecto al asunto de “Evernote”, indicarte que nada mas leí tu comentario intenté añadir el botón de Evernote, pero por algún tipo de razón “Evernote” no traga con las páginas de este sitio.
      Puede ser que sea un error de la API de Evernote, pero hasta el momento no he podido. Si, consigo en algún momento que funcione, no dudes que añadiré el botón.
      Gracias y un saludo.

      • Laureano

        No me queda otra que responder.
        Mi mujer crítica mi manía por lo que protesto de quien pone los pies en un asiento público, del que casi atropella con su bici o moto a los que van por la acera, etc. Vamos que en una palabra no confío mucho en el género humano.
        Precisamente por eso me levanta el ánimo gente amable como “el atareao”.
        No digas nada, sigue así.
        Un afectuoso saludo,
        Laureano

  • Hefistion

    Magnifico articulo, como todos, le di muchas vueltas a utilizar MFS en la raspberry y siempre me daba error, hasta que he visto lo de comentar las lineas en el fichero netconfig, muchas gracias.