Principes

NFS (Network File System) est comme son nom l'indique un système de fichier par réseau. Il vous permet d'avoir accès à un répertoire d'une machine distante (le serveur NFS) de façon tout à fait transparente, via un simple répertoire de votre machine (le client NFS).

Par exemple il est possible de faire en sorte que le répertoire /home d'une machine soit en fait une vue du répertoire /home d'un serveur (là où sont vraiment les données, sur le disque dur du serveur).

Reste à écrire :

Mise en place

A lire pour tout comprendre :

Sinon, voici ci-dessous la recette de cuisine à la mode AUF.

Configuration côté serveur

# aptitude install nfs-kernel-server

# extrait de /etc/exports. Faire un "man 5 exports" pour avoir le détail de la syntaxe
/home   192.168.0.0/16(rw,async,no_subtree_check) 10.196.0.0/20(rw,async,no_root_squash,no_subtree_check)
/home2  192.168.0.0/16(rw,async,no_subtree_check) 10.196.0.0/20(rw,async,no_root_squash,no_subtree_check)

A détailler :

Configuration côté client

Montage "à la main", pour un test rapide

# mount serveur:/repertoire /point/de/montage

Le montage sera effectif tant que la partition n'aura pas été démontée (umount /point/de/montage) ou que la machine n'aura pas été redémarrée. Ca n'a pas vraiment d'utilité, sauf pour tester bien entendu. Et notamment tester les options de montage NFS dont vous pouvez voir les détails avec man nfs.

Montage par automount

On préfére utiliser un auto-monteur : il va monter les partitions à la demande, et les démontera quand elles ne seront plus utilisées.

  1. On installe l'automonteur :

# aptitude install autofs
  1. On indique qu'on veut que /nfs soit un point d'automontage, et que sa configuration sera dans

# extrait du fichier /etc/auto.master
# /nfs sera un répertoire géré par autofs (il faut faire un mkdir /nfs)
# ce répertoire /nfs a sa configuration dans /etc/auto.nfs
# démontages après une heure de non-utilisation.
/nfs    /etc/auto.nfs --timeout=3600
  1. Configuration des sous-répertoires de /nfs :

# fichier /etc/auto.nfs
repertoire1   -fstype=nfs,intr,rsize=8192,wsize=8192,proto=tcp        serveur1:/repertoire1
repertoire2   -fstype=nfs,intr,rsize=8192,wsize=8192,proto=udp        serveur2:/un/autre/repertoire2

Et c'est tout ! A partir de ce moment, /nfs/repertoire1 et /nfs/repertoire2 seront montés sur demande, et démontés au bout d'une heure de non-utilisation. Très pratique et très propre !

Montage depuis le fstab

Avec /etc/fstab le montrage sera permanent. Inconvénients :

Si on veut rendre un montage NFS permanent, on peut l'indiquer dans le fichier /etc/fstab :

# (... extrait de /etc/fstab ...)
# <file system> <mount point>   <type>  <options>                                <dump>  <pass>
serveur:/home   /point/de/mnt   nfs     rw,intr,rsize=8192,wsize=8192,proto=tcp  0       0

Mais franchement, pourquoi se priver d'un auto-monteur ?

Que faire lorsque "ça ne marche pas" ?

Vérifications à faire côté client

cd /nfs/home

ls -lsd /nfs/home

(-d pour voir le répertoire lui-même, et non son contenu)

# mount -t nfs le-serveur-nfs:/home /mnt
mount to NFS server 'le-serveur-nfs' failed: server is down.

/var/log/messages:Nov 23 09:31:23 poste-client kernel: nfs: server 111.222.111.222 not responding, still trying
/var/log/messages:Nov 23 09:39:09 poste-client kernel: nfs: server 111.222.111.222 OK

~# rpcinfo -p un-serveur-pas-nfs 
rpcinfo: ne peut contacter l'aiguilleur de ports: RPC: erreur système sur l'hôte cible - Connexion refusée
~# rpcinfo -p un-vrai-serveur-nfs
   program no_version protocole  no_port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
...

# showmount -e un-serveur-nfs
Export list for nfs:
/home           10.196.0.0/20,192.168.0.0/16
/home2          10.196.0.0/20,192.168.0.0/16
/srv/nfs/ubuntu 10.196.1.0/24,192.168.0.0/16

Passage par des règles iptables

Voilà, vous avez votre serveur NFS qui fonctionne. Cependant, vous avez des règles iptables sur le chemin, ou quelque part sur votre réseau, et NFS utilise des ports dynamiques pour dialoguer. Il est alors possible de configurer NFS ainsi:

# /etc/default/nfs-common
 STATDOPTS="--port 32765 --outgoing-port 32766"

# /etc/default/nfs-kernel-server
 RPCMOUNTDOPTS="-p 32767"

# /etc/default/quota
 RPCRQUOTADOPTS="-p 32769"

De plus vous avez toujours portmap en communication sur le port 111 et le démon nfsd sur le port 2049 par défaut.

Il reste à créer ce fichier:

# /etc/modprobe.d/options.local
 options lockd nlm_udpport=32768 nlm_tcpport=32768

Enfin vous n'avez plus qu'à écrire vos règles iptables en autorisant le passage sur les port 111, 2049 et 32765:32769 en tcp et udp.

Vérifications à faire côté serveur

(à finir demain, je fatigue un peu, là...)