NFS
Network File System
Paula Cecilia Martinez
Emmanuel N. Millán
Introducción a NFS
El sistema de fichero de red (NFS, Network File System) es uno de los servicios de
red más utilizados en Linux. NFS está basado en llamadas a procedimientos
remotos que permiten a un cliente automáticamente montar sistemas de archivos
remotos y por lo tanto acceder transparentemente al mismo como si fuera un
sistema de archivos local.
Introducción a NFS
● UDP: User Datagram Protocol, protocolo de capa de transporte con entrega no
confiable.
● XDR: eXternal Data Representation, es un protocolo de la capa de
presentacion (Modelo OSI). Abstrae los datos que se transfieren entre equipos
de diferentes arquitecturas y SO.
● RPC: Remote Procedure Call, llamadas a procedimientos remotos.
RPC
● Cuando el cliente llama a un procedimiento remoto, está llamando en realidad a una
función en el equipo local que es generada por el paquete RPC. El cliente empaqueta el
procedimiento y sus argumentos en un mensaje de red y lo envía al servidor.
● El servidor recibe el procedimiento, remueve los argumentos del mensaje de red y llama
el procedimiento en el servidor que el programador escribió.
● Cuando el procedimiento finalizó su ejecución, toma los valores de retorno, los
empaqueta en un mensaje de red y los envía al cliente.
● El cliente toma los valores de retorno del mensaje de red y devuelve estos valores a la
aplicación cliente.
NFS
NFS provee un set de llamadas RPC para operaciones con archivos remotas:
● Buscar un directorio
● Leer un set de directorios
● Manipular links y directorios
● Acceder a los atributos de los archivos
● Leer y escribir archivos
Funcionamiento de NFS
Infraestructura de instalación
A continuación se detalla la configuración completa de un servidor y cliente NFS. El
servidor NFS tendrá la IP 192.168.1.100 y el cliente 192.168.1.20. Cliente y servidor
ejecutan una distribución Linux.
Los paquetes necesarios para instalar el servidor NFS varía según la distribución,
aquí trabajaremos con Ubuntu Linux.
Requisitos
Primero es necesario instalar el paquete nfs-common, tanto en cliente como en
servidor.
# apt-get install nfs-common
Además, en el servidor hay que instalar el paquete que funciona como servicio
escuchando en los puertos 2049 TCP y UDP:
# apt-get install nfs-kernel-server
Verificación
● Verifique que la instalación de NFS fue exitosa y que el servicio se está ejecutando con el siguiente
comando:
# rpcinfo -p | grep nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
● Luego verificamos que el SO soporte montar unidades NFS.
# cat /proc/filesystems | grep nfs
nodev nfs
nodev nfs4
● Si el comando anterior no devuelve información, puede ser que el módulo nfs no esté cargado en el
kernel. Carguelo con el siguiente comando:
# modprobe nfs
Exportar directorios
Todos los directorios que uno quiere compartir a través de NFS se deben definir en el archivo de configuración
/etc/exportfs. La sintaxis general del archivo es la siguiente:
directorio IP_o_hostname(opciones)
Por ejemplo:
/home/nfs/ 192.168.1.20(rw,sync)
/home/nfs/ 192.168.1.21(ro,sync,no_root_squash)
La primera línea comparte el directorio /home/nfs a la IP 192.168.1.20 con permisos de lectura y escritura (rw, read
write) y sync provoca que cualquier cambio realizado en el cliente en el sistema de archivos montado se realiza
inmediatamente en el servidor.
La segunda configuración otorga permisos de solo lectura (ro, read only), con modo sync y además permite al
usuario root en el cliente que sea tratado como root en el servidor.
Exportar directorios
Primero cree un directorio en el servidor para compartir, luego edite el archivo de configuración
/etc/exportfs y agregue lo siguiente:
# mkdir /home/publico
# vim /etc/exportfs
/home/publico *(rw,sync)
Luego reinicie el servicio de NFS en el servidor con el siguiente comando:
# /etc/init.d/nfs-kernel-server restart (Ubuntu o Debian)
# /etc/init.d/nfs restart (RedHat o Fedora)
# exportfs -ra
Montar directorio remoto en cliente
En el cliente el directorio remoto se monta con el siguiente comando:
# mount 192.168.1.100:/home/publico /home/publico_nfs
Si el comando mount devuelve el siguiente error puede ser necesario especificar una versión de NFS:
mount: mount to NFS server failed: timed out (retrying).
# mount -t nfs -o nfsvers=3 192.168.1.100:/home/publico /home/publico_nfs
Si el comando mount no devuelve ningún error, ya es posible utiliza el directorio remoto en el cliente,
puede probarlo creando archivos nuevos y verificando en el servidor que los archivos existen.
Automount
En el cliente es posible montar automáticamente directorios remotos cuando el SO está arrancando. Para
esto es necesario editar el archivo /etc/fstab:
# vim /etc/fstab
192.168.1.100:/home/publico /home/publico_nfs nfs defaults 0 0
Nota: generalmente las distribuciones RedHat (y derivados) y Fedora tienen el Firewall activado y bloquean
los puertos utilizados por NFS. Para verificar que es el firewall el que está bloqueando NFS se puede
ejecutar el siguiente comando para desactivarlo:
# service iptables stop
Luego será necesario agregar las reglas pertinentes para que IPTables (firewall de Linux) acepte
conexiones para el servicio NFS.