Ir al contenido

5.8 NFS — Almacenamiento en Red

NFS (Network File System) permite que un servidor exporte directorios a través de la red para que otros sistemas Linux los monten como si fueran discos locales. Es el protocolo de almacenamiento compartido más extendido en entornos Linux: clusters de HPC, /home centralizado, despliegues de contenedores y laboratorios de virtualización lo usan a diario.


RolPaqueteQué hace
Servidornfs-kernel-serverExporta directorios a la red
Clientenfs-commonMonta los directorios del servidor

Un mismo equipo puede ser servidor y cliente simultáneamente.


ventana terminal
# Instalar el servidor
sudo apt install nfs-kernel-server
# Verificar que el servicio está activo
systemctl status nfs-kernel-server
ventana terminal
# Crear el directorio a compartir
sudo mkdir -p /srv/compartido
sudo chown nobody:nogroup /srv/compartido
sudo chmod 755 /srv/compartido

Editar /etc/exports para definir qué se exporta y a quién:

ventana terminal
sudo nano /etc/exports
# Formato: directorio cliente(opciones)
# Compartir con una IP específica (lectura/escritura)
/srv/compartido 192.168.1.100(rw,sync,no_subtree_check)
# Compartir con toda una subred (solo lectura)
/srv/compartido 192.168.1.0/24(ro,sync,no_subtree_check)
# Compartir con cualquier host (solo en redes internas confiables)
/srv/compartido *(rw,sync,no_subtree_check,no_root_squash)
OpciónSignificado
rwLectura y escritura
roSolo lectura
syncEscribe en disco antes de responder al cliente (más seguro)
asyncResponde antes de escribir (más rápido, riesgo de pérdida)
no_subtree_checkDesactiva verificación de subárbol (mejora rendimiento, recomendado)
root_squashMapea root del cliente a nobody (seguridad — por defecto)
no_root_squashEl root del cliente tiene root en el servidor (peligroso)
all_squashMapea todos los usuarios a nobody

Aplicar los cambios sin reiniciar el servicio:

ventana terminal
# Reexportar todas las entradas de /etc/exports
sudo exportfs -ra
# Ver qué se está exportando actualmente
sudo exportfs -v
ventana terminal
# NFS usa varios puertos — abrir en UFW
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow 2049/tcp
sudo ufw allow 2049/udp

ventana terminal
# Instalar las herramientas de cliente
sudo apt install nfs-common
ventana terminal
# Ver qué exporta el servidor (desde el cliente)
showmount -e 192.168.1.10
# Crear el punto de montaje local
sudo mkdir -p /mnt/nfs/compartido
# Montar el recurso NFS
sudo mount -t nfs 192.168.1.10:/srv/compartido /mnt/nfs/compartido
# Verificar
df -h /mnt/nfs/compartido
ls /mnt/nfs/compartido
ventana terminal
sudo nano /etc/fstab
# Servidor NFS
192.168.1.10:/srv/compartido /mnt/nfs/compartido nfs defaults,_netdev 0 0

La opción _netdev indica que este dispositivo requiere red: systemd esperará a que la red esté activa antes de intentar montarlo (evita errores al arrancar).

ventana terminal
# Probar el fstab sin reiniciar
sudo mount -a

ventana terminal
# Montaje con opciones de rendimiento y timeout
sudo mount -t nfs \
-o rw,hard,intr,rsize=8192,wsize=8192,timeo=14 \
192.168.1.10:/srv/compartido /mnt/nfs/compartido
OpciónSignificado
hardReintenta indefinidamente si el servidor cae (para datos críticos)
softDevuelve error al proceso si el servidor no responde (para datos no críticos)
intrPermite interrumpir operaciones bloqueadas con Ctrl+C
rsize/wsizeTamaño de los bloques de lectura/escritura (en bytes)
timeoTimeout en décimas de segundo antes de reintentar

ventana terminal
# Desmontar un recurso NFS
sudo umount /mnt/nfs/compartido
# Si da "device is busy", ver qué proceso lo usa
sudo lsof /mnt/nfs/compartido
sudo fuser -m /mnt/nfs/compartido
# Forzar desmontaje (si el servidor ya no está disponible)
sudo umount -f -l /mnt/nfs/compartido

ventana terminal
# En el servidor: verificar exportaciones activas
sudo exportfs -v
# En el servidor: ver conexiones NFS activas
sudo nfsstat -s
# En el cliente: ver estadísticas de montaje
nfsstat -c
# Comprobar que el servidor NFS escucha en el puerto 2049
sudo ss -tulpn | grep :2049
# En el cliente: probar conectividad al puerto NFS
telnet 192.168.1.10 2049