Introduction
NFS :
- Protocole de partage Unix natif (depuis 1984)
- Plus performant que SMB sur LAN Linux
- Mount transparent : un partage NFS apparait comme un FS local
- Versions : NFSv3 (UDP/TCP), NFSv4 (TCP only, plus securise et performant)
- Authentification : Unix uid/gid (NFSv3), Kerberos optionnel (NFSv4)
Cas d'usage : NAS Linux, homes partages, stockage VM (Proxmox, KVM), data scientifique partagee.
⚠️ NFS sans Kerberos = securite par IP source uniquement. Jamais sur Internet.
Prerequis
- Serveur Linux Debian / Ubuntu (le NFS server)
- Clients Linux qui mountent
- LAN dedie ou VPN
- Acces root
Etape 1 : Installation cote serveur
sudo apt update
sudo apt install -y nfs-kernel-server
sudo systemctl status nfs-server
Etape 2 : Creer un dossier a partager
sudo mkdir -p /srv/nfs/partage
sudo chown nobody:nogroup /srv/nfs/partage
sudo chmod 755 /srv/nfs/partage
Pour un partage utilisable en write :
sudo chmod 775 /srv/nfs/partage
Etape 3 : Exporter le partage
/etc/exports :
/srv/nfs/partage 192.168.50.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs/data 192.168.50.10(rw,sync,no_subtree_check) 192.168.50.11(rw,sync,no_subtree_check)
/srv/nfs/readonly 192.168.50.0/24(ro,sync,no_subtree_check,root_squash)
Options importantes :
rw/ro: read-write / read-onlysync: ecritures synchrones (sur sur le disque avant l'ack). Plus sur.asyncest plus rapide mais risque en cas de crash.no_subtree_check: recommande, evite des checks couteuxroot_squash(defaut) : le root du client devientnobodycote serveur (securite)no_root_squash: le root client = root serveur (dangereux, juste pour les cas legitimes)all_squash: tous les utilisateurs deviennentnobody
Etape 4 : Appliquer et demarrer
sudo exportfs -ra
sudo systemctl restart nfs-server
sudo systemctl enable nfs-server
Verifier les exports :
sudo exportfs -v
Etape 5 : Ouvrir le firewall
NFSv4 utilise uniquement le port 2049 :
sudo ufw allow from 192.168.50.0/24 to any port 2049
NFSv3 a besoin de plusieurs ports dynamiques (rpcbind 111, mountd, nlockmgr). C'est pourquoi NFSv4 est preferable.
Pour figer les ports NFSv3 :
sudo nano /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="--port 32767"
STATDOPTS="--port 32765"
Etape 6 : Cote client - installation
sudo apt update
sudo apt install -y nfs-common
Etape 7 : Mount manuel
sudo mkdir -p /mnt/nfs-partage
sudo mount -t nfs4 192.168.50.10:/srv/nfs/partage /mnt/nfs-partage
df -h /mnt/nfs-partage
Vous pouvez maintenant lire/ecrire dans /mnt/nfs-partage.
Etape 8 : Mount automatique via fstab
/etc/fstab :
192.168.50.10:/srv/nfs/partage /mnt/nfs-partage nfs4 defaults,_netdev,soft,intr,timeo=600 0 0
Options client :
soft: si serveur down, ne bloque pas (echec apres timeout)hard: bloque indefinitivement (defaut, parfois necessaire pour les VMs)_netdev: attendre le reseau au boottimeo=600: timeout RPC en dixiemes de secondenofail: ne pas bloquer le boot si mount echoue
sudo mount -a
Etape 9 : Automount (autofs)
Pour mounter a la demande seulement :
sudo apt install -y autofs
sudo nano /etc/auto.master
Ajoutez :
/mnt/nfs /etc/auto.nfs --timeout=60
sudo nano /etc/auto.nfs
partage -fstype=nfs4,soft,intr 192.168.50.10:/srv/nfs/partage
data -fstype=nfs4,soft,intr 192.168.50.10:/srv/nfs/data
sudo systemctl restart autofs
ls /mnt/nfs/partage # mount automatique
Apres 60s sans acces, autofs unmounte.
Etape 10 : Performance tuning
Tailles de buffer
Sur le client :
sudo mount -t nfs4 server:/path /mnt/point -o rsize=1048576,wsize=1048576,nconnect=8
rsize/wsize: tailles de bloc read/write (1 Mo recommande)nconnect=8: 8 connexions TCP paralleles (NFSv4.1+, gros boost de perf)
Async write (risque mais rapide)
sudo mount -t nfs4 server:/path /mnt/point -o async
⚠️ En cas de crash serveur, des ecritures peuvent etre perdues. A reserver aux usages tolerants.
Test de perf
dd if=/dev/zero of=/mnt/nfs-partage/test.bin bs=1M count=1024 oflag=direct
dd if=/mnt/nfs-partage/test.bin of=/dev/null bs=1M
Sur Gigabit LAN, attendez 110 MB/s+. Sur 10 GbE, 800 MB/s+.
Etape 11 : NFSv4 avec Kerberos (sec)
Pour de l'auth forte, configurez Kerberos puis exportez avec sec=krb5p :
/srv/nfs/secure *(rw,sync,sec=krb5p)
C'est complexe (nécessite un KDC), surtout utile en entreprise. Pour de petits LAN, restez en sec=sys avec IP whitelist.
Etape 12 : Monitoring
Cote serveur :
sudo nfsstat -s
sudo nfsstat -m # mounts cote serveur
sudo showmount -e # exports actifs
sudo showmount -a 192.168.50.10 # qui est connecte
Cote client :
nfsstat -c
mount | grep nfs
Logs :
sudo journalctl -u nfs-server -f
sudo dmesg | grep nfs
Depannage
"mount.nfs: Connection refused"
Le service n'est pas demarre ou port bloque :
sudo systemctl status nfs-server
sudo ss -tunlp | grep 2049
sudo ufw status
"Permission denied" lors de l'ecriture
Probleme de uid mapping. Le client et le serveur doivent avoir le meme uid pour l'utilisateur. Sinon, utilisez all_squash avec anonuid :
/srv/nfs/partage *(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)
"Stale file handle"
Le fichier a ete supprime ou le serveur a redemarre. Remountez :
sudo umount -f /mnt/nfs-partage
sudo mount /mnt/nfs-partage
Performance lente
mount | grep nfs # voir les options actives
Augmentez rsize / wsize et essayez nconnect.
Le serveur ne demarre pas
sudo exportfs -ra
sudo journalctl -u nfs-server
Verifiez /etc/exports (syntaxe sensible, espaces importants).
Commandes utiles
# Cote serveur
sudo systemctl status nfs-server
sudo systemctl restart nfs-server
sudo exportfs -v
sudo exportfs -ra # reload sans restart
sudo nfsstat -s
sudo showmount -e # voir tous les exports
sudo showmount -a # voir tous les mounts actifs
# Cote client
sudo mount -t nfs4 server:/path /mnt/point
sudo umount /mnt/point
sudo umount -f /mnt/point # force
mount | grep nfs
nfsstat -c
sudo rpcinfo -p server # voir les services RPC distants
# Diagnostic
sudo journalctl -u nfs-server -f
sudo dmesg | grep nfs
ss -tunlp | grep 2049
Conclusion
NFS est le standard de partage de fichiers Linux/Unix :
- Performance superieure a SMB sur LAN Linux
- Mount transparent
- Stable, mature, dans le kernel
Limites :
- Securite par IP / uid (sauf Kerberos)
- Pas adapte aux LANs publics ou Internet sans VPN
- Performance dependante du reseau (latence importante)
Pour aller plus loin :
- Pour multi-client write-intensive, considerez GlusterFS ou CephFS
- Pour HA NFS, regardez DRBD + Pacemaker ou un NAS commercial
- Pour cross-platform, Samba reste plus universel
Ressources
- Documentation officielle NFSv4 : https://datatracker.ietf.org/doc/html/rfc7530
- Linux NFS Wiki : https://linux-nfs.org
- Ubuntu NFS server guide : https://ubuntu.com/server/docs/network-file-system-nfs
- Wiki Debian : https://wiki.debian.org/NFSServerSetup


















