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.
1. Roles: servidor y cliente
Sección titulada “1. Roles: servidor y cliente"| Rol | Paquete | Qué hace |
|---|---|---|
| Servidor | nfs-kernel-server | Exporta directorios a la red |
| Cliente | nfs-common | Monta los directorios del servidor |
Un mismo equipo puede ser servidor y cliente simultáneamente.
2. Configurar el servidor NFS
Sección titulada “2. Configurar el servidor NFS"# Instalar el servidorsudo apt install nfs-kernel-server
# Verificar que el servicio está activosystemctl status nfs-kernel-serverCrear y exportar un directorio
Sección titulada “Crear y exportar un directorio"# Crear el directorio a compartirsudo mkdir -p /srv/compartidosudo chown nobody:nogroup /srv/compartidosudo chmod 755 /srv/compartidoEditar /etc/exports para definir qué se exporta y a quién:
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)Opciones de exportación más importantes
Sección titulada “Opciones de exportación más importantes"| Opción | Significado |
|---|---|
rw | Lectura y escritura |
ro | Solo lectura |
sync | Escribe en disco antes de responder al cliente (más seguro) |
async | Responde antes de escribir (más rápido, riesgo de pérdida) |
no_subtree_check | Desactiva verificación de subárbol (mejora rendimiento, recomendado) |
root_squash | Mapea root del cliente a nobody (seguridad — por defecto) |
no_root_squash | El root del cliente tiene root en el servidor (peligroso) |
all_squash | Mapea todos los usuarios a nobody |
Aplicar los cambios sin reiniciar el servicio:
# Reexportar todas las entradas de /etc/exportssudo exportfs -ra
# Ver qué se está exportando actualmentesudo exportfs -vFirewall y puertos NFS
Sección titulada “Firewall y puertos NFS"# NFS usa varios puertos — abrir en UFWsudo ufw allow from 192.168.1.0/24 to any port nfssudo ufw allow 2049/tcpsudo ufw allow 2049/udp3. Configurar el cliente NFS
Sección titulada “3. Configurar el cliente NFS"# Instalar las herramientas de clientesudo apt install nfs-commonMontar temporalmente
Sección titulada “Montar temporalmente"# Ver qué exporta el servidor (desde el cliente)showmount -e 192.168.1.10
# Crear el punto de montaje localsudo mkdir -p /mnt/nfs/compartido
# Montar el recurso NFSsudo mount -t nfs 192.168.1.10:/srv/compartido /mnt/nfs/compartido
# Verificardf -h /mnt/nfs/compartidols /mnt/nfs/compartidoMontar permanentemente (/etc/fstab)
Sección titulada “Montar permanentemente (/etc/fstab)"sudo nano /etc/fstab# Servidor NFS192.168.1.10:/srv/compartido /mnt/nfs/compartido nfs defaults,_netdev 0 0La 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).
# Probar el fstab sin reiniciarsudo mount -a4. Opciones avanzadas de montaje cliente
Sección titulada “4. Opciones avanzadas de montaje cliente"# Montaje con opciones de rendimiento y timeoutsudo mount -t nfs \ -o rw,hard,intr,rsize=8192,wsize=8192,timeo=14 \ 192.168.1.10:/srv/compartido /mnt/nfs/compartido| Opción | Significado |
|---|---|
hard | Reintenta indefinidamente si el servidor cae (para datos críticos) |
soft | Devuelve error al proceso si el servidor no responde (para datos no críticos) |
intr | Permite interrumpir operaciones bloqueadas con Ctrl+C |
rsize/wsize | Tamaño de los bloques de lectura/escritura (en bytes) |
timeo | Timeout en décimas de segundo antes de reintentar |
5. Desmontar y gestión
Sección titulada “5. Desmontar y gestión"# Desmontar un recurso NFSsudo umount /mnt/nfs/compartido
# Si da "device is busy", ver qué proceso lo usasudo lsof /mnt/nfs/compartidosudo fuser -m /mnt/nfs/compartido
# Forzar desmontaje (si el servidor ya no está disponible)sudo umount -f -l /mnt/nfs/compartido6. Diagnóstico de problemas NFS
Sección titulada “6. Diagnóstico de problemas NFS"# En el servidor: verificar exportaciones activassudo exportfs -v
# En el servidor: ver conexiones NFS activassudo nfsstat -s
# En el cliente: ver estadísticas de montajenfsstat -c
# Comprobar que el servidor NFS escucha en el puerto 2049sudo ss -tulpn | grep :2049
# En el cliente: probar conectividad al puerto NFStelnet 192.168.1.10 2049