NFS

NFS es un sistema de compartir archivos (directorios) creado por una empresa ya desaparecida llamada SUN MicroSystems hace mucho tiempo y sirve para que un servidor con NFS instalado pueda compartir un directorio (o varios) a clientes los cuales reconoce por su IP. Estos clientes típicamente son clientes en sistemas tipo Unix, siendo Linux el representante actual más reconocido mas no el único pues también BSD y seguramente MacOSX deberían permitirlo.

Como era de esperar, utilizar NFS en Windows no es algo así como dá un click y resuelve. Sino que MicroSoft tuvo la genial idea de no utilizar, no proveer este tipo de protocolo de compartición de archivos/directorios imagino que con la finalidad de promover su “NetBIOS”. Yo sí he utilizado NFS en Windows pero hace muuuuuuuuuuuuchos años y la verdad es que no puedo recordar ahora cómo es exactamente, yo utilicé un programa de 3ros para montar una partición NFS desde Windows. Pero creo recordar que windos entre sus protocolos, tiene por ahi la opción de utilizar NFS (algo que llamaban integración con Unix) pero bueno, es algo que,  insisto, no he probado.

Sigamos con Linux.

Por ejemplo: el servidor mío de Linux puede decidir compartir el directorio /compartido a todos los clientes tipo Unix (Linux) que estén en la red 10.0.5.0/24. El administrador del servidor decidirá qué permisos le dará a los clientes: si de lectura/escritura, o solamente de lectura. Así como ciertos permisos adicionales que describiré más adelante.

En CentOS-6 el instalar NFS es más fácil de lo que parece. Es muy parecido a cómo se hacía antes. El procedimiento es el siguiente:

Configurando el servidor de NFS:

Instalo el servicio nfs-utils:

yum -y install nfs-utils

Creo un directorio que será el que exportaré a mis clientes (el que mis clientes verán), lógicamente este paso lo hago solamente si es que el directorio no existe; si ya existe, simplemente sigues al siguiente paso:

mkdir /compartido

Edito al archivo de configuración de idmapd, para definir un nombre de dominio que será el mismo para el cliente y el servidor:

vi/etc/idmapd.conf

Alrededor de la línea 4 ó 5 de este archivo, agrego o modifico el parámetro “Domain”, definiéndole un dominio, por ejemplo le ponemos: ecualinux.local

Domain = ecualinux.local

Entonces procedo a editar el archivo de configuración de recursos a exportar. En este archivo es que defino qué directorios voy a exportar:

vi /etc/exports

Es un archivo que existe, pero estará vacío, dentro de /etc/exports agrego:

/compartido 10.0.5.0/24(rw,async,no_root_squash)

Una breve explicación de los parámetros:

  • /compartido es el directorio que exportaré a mis clientes
  • 10.0.5.0/24 es la red donde están mis clientes, podría definir una IP solamente, en este caso escogí una red.
  • rw: lectura/escritura. Alternativamente podría poner: ro que es sólo lectura.
  • async: significa que se realizarán escrituras asíncronas, son más rápidas pues el servidor le responderá a un cliente que ya escribió los datos que le han entregado, aún antes de verdaderamente escribirlos. Lógicamente es algo peligroso pues justo en ese instante podría irse la luz y no tener UPS que me respalde y pierda ciertos datos. Alternativamente podría utilizar sync, que se asegura de escribir los datos y luego decirle al cliente que ya escribió los datos. Es más lento sync, pero más seguro
  • no_root_squash: indica que se permita escribir datos como root. Alternativamente podría definirse root_squash que no permite escrituras como root, si se intentara escribir como root, root_squash lo hará bajo el usuario nfsnobody. Es una medida de seguridad que quizá no ten convenga.

Procedo entonces a arrancar y activar los servicios de NFS:

/etc/init.d/rpcbind start
/etc/init.d/nfslock start
/etc/init.d/nfs start
chkconfig rpcbind on
chkconfig nfslock on
chkconfig nfs on

Configuraciones posteriores al servidor

Si luego hiciéramos cambios en el archivo /etc/exports (por ejemplo para agregar más recursos o cambiar permisos) simplemente ejecutaremos:

exportfs -ra

Si está bien configurado /etc/exports, este comando no debe devolver ninguna salida

Configurando NFS en cada cliente

Es más fácil que en el servidor:

Instalo nfs-utils, tal y como en el servidor:

yum install nfs-utils

Edito el archivo de configuración de idmapd.conf

vi /etc/idmapd.conf

Y pongo el mismo dominio que en el servidor

Domain = ecualinux.local

Entonces arranco y activo los servicios de nfs para el cliente:

/etc/init.d/rpcbind start
/etc/init.d/rpcidmapd start
/etc/init.d/nfslock start
/etc/init.d/netfs start
chkconfig rpcbind on
chkconfig rpcidmapd on
chkconfig nfslock on
chkconfig netfs on

Yy por último pruebo conectarme al servidor:

Supongamos que la IP de mi servidor es: 10.0.5.1, le accedo al recurso /compartido de la siguiente forma:

En mi cliente creo un directorio llamado /compartido. En mi cliente!!

mkdir /compartido

Entonces monto el recurso /compartido del servidor 10.0.5.1 en mi directorio /compartido

mount 10.0.5.1:/compartido /compartido

y listo, en /compartido ya estará el recurso de nuestro servidor. Puedo comprobarlo haciendo:

mount

o utilizando:

df -h

Si deseo puedo desmontar el recurso le hago con:

umount /compartido

Si quisiera hacer este montaje permanente, es decir, que persista a pesar de que reinicie a mi cliente, puedo agregar la siguiente línea en /etc/fstab:

vi /etc/fstab

Al final de /etc/fstab pongo:

10.0.5.1:/compartido /compartido nfs defaults 0 0

Y listo, prueba montar entonces de la siguiente forma, tiene que funcionar igualmente:

mount /compartido

Este útimo comando debe funcionar sin emitir ningún tipo de error. En caso de que lo emitiera, revisa lo que has puesto en /etc/fstab y revisa el mensaje de error que te dá. No reinicies sin antes solucionar el error que te pueda haber dado.

Recuerda que el comando mount solamente lleva el nombre del directorio en caso de que exista una línea en /etc/fstab haciendo referencia a ese directorio. Y precisamente este es el caso nuestro pues fue que hicimos anteriormente.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Member of SKCC#7163T