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.