6300
Commentaire: bon là j'ai donné tout ce que j'avais, j'ai mal au dos
|
9063
mise à jour des liens externes sur NFS
|
Texte supprimé. | Texte ajouté. |
Ligne 7: | Ligne 7: |
NFS est d'abord utilisé sur les postes clients fixes. Si vous désirez mettre en place un accès aux données serveur pour un ordinateur portable, rendez-vous sur [[SSHFS]]. Quelques documents génériques pour tout comprendre : * [[http://nfs.sourceforge.net/nfs-howto/|Linux NFS-HOWTO]] : toute la doc, officielle. * [[http://formation-debian.via.ecp.fr/nfs.html|Le chapitre NFS]] de la [[http://formation-debian.via.ecp.fr/|Formation Debian GNU/Linux]] de l'ECP. * d'autres idées sur [[http://lea-linux.org/documentations/index.php/Reseau-partfic-nfs|la page NFS]] de Léa Linux. |
|
Ligne 10: | Ligne 17: |
* Pour l'utiliser quand même ? Parce que ça marche et que c'est facile à mettre en oeuvre. On dira que c'est ''efficace''. | * Pour l'utiliser quand même ? Parce que ça marche et que c'est facile à mettre en oeuvre. On dira que c'est ''efficace''. |
Ligne 14: | Ligne 22: |
* surtout, rajouter des liens vers des vraies docs | Sinon, voici ci-dessous la recette de cuisine à la mode AUF. |
Ligne 19: | Ligne 27: |
{{{# aptitude install nfs-kernel-server | {{{ # aptitude install nfs-kernel-server |
Ligne 22: | Ligne 31: |
{{{ # 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) |
{{{ # Exemple 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_root_squash,no_subtree_check) /home2 192.168.0.0/16(rw,async,no_root_squash,no_subtree_check) |
Ligne 28: | Ligne 37: |
Pour mieux comprendre les options que nous avons indiquées, lire la page `man exports` /!\ Attention à l'option `no_root_squash` : elle n'est pas vraiment recommandée car elle pose des petits problèmes de sécurité, mais il faut l'activer pour que l'impression PDF fonctionne avec `cups-pdf` sur les postes clients. Il n'existe pas d'autre solution actuellement (14 juillet 2009). |
|
Ligne 37: | Ligne 50: |
=== Montage "à la main" === | === Montage "à la main", pour un test rapide === |
Ligne 39: | Ligne 52: |
{{{ | {{{ |
Ligne 43: | Ligne 56: |
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. | 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`. |
Ligne 45: | Ligne 58: |
'''A détailler : options... rsize et ses amis''' | === Montage par auto-monteur (autofs) === |
Ligne 47: | Ligne 60: |
=== Montage depuis le fstab === | 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 : {{{ $ sudo 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 }}} 1. Relancer le service `autofs` : {{{ $ sudo invoke-rc.d autofs restart }}} 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 (non recommandé) === Avec `/etc/fstab` le montrage sera permanent. De '''GROS''' inconvénients : * le montage est fait systématiquement, même quand le répertoire n'est pas utilisé : gaspillage de ressources ! Surtout dans le cas d'un paramètrage "tcp", par défaut sous ubuntu. * si le serveur NFS doit être redémarré au même moment que le client, le client sera bloqué jusqu'à la fin du démarrage du serveur. Le poste client aura aussi des difficulté a démarré en cas de problèmes sur le réseau. (le cas d'école étant une machine "A" qui monte une partition de la machine "B" dans son fstab, alors que "B" fait la même chose de son côté avec "A" : ça marche bien au cas par cas, et plus aucune des deux machines ne pourra démarrer aprés une coupure electrique générale) |
Ligne 50: | Ligne 94: |
{{{ | {{{ |
Ligne 56: | Ligne 100: |
=== Montage par automount (pourquoi et comment) === | Mais franchement, pourquoi se priver d'un auto-monteur ? |
Ligne 58: | Ligne 102: |
Si on fait un montage permanent via fstab, cela donne quelques inconvénients : * le montage est fait systématiquement, même quand le répertoire n'est pas utilisé : gaspillage de ressources * si le serveur NFS doit être redémarré entre temps, le client ne parviendra plus à refaire le montage correctement (ou disons plutôt que ça marchera très mal, Jérôme précisera car là moi je bon) On préfére donc 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 }}} 2. 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 }}} 3. 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 ! |
|
Ligne 84: | Ligne 105: |
Ligne 87: | Ligne 107: |
* [:VérifierSiUnProcessusExiste:automount est-il bien actif] (et je ne vous parle pas si vous n'utilisez par automount dans votre CNF) * cohérence entre le fichier {{{/etc/auto.master}}} et les fichiers de table ({{{/etc/auto.nfs}}} pour les postes configurés avec le PaquetAufDesktop. * Que donne l'accés direct au répertoire en automount en ligne de commande ? Par exemple : {{{cd /nfs/home}}} * Vérifier, si le repertoire apparait, qu'il posséde bien les droits et propriétaires attendus : {{{ls -lsd /nfs/home}}} ({{{-d}}} pour voir le répertoire lui-même, et non son contenu) * vérifier que les uid/gid côté client et serveur sont bien synchrone ({{{id mauvais.gringo}}} doit donner le même résultat sur le client nfs et sur le serveur) |
* [[VérifierSiUnProcessusExiste|automount est-il bien actif]] (et je ne vous parle pas si vous n'utilisez par automount dans votre CNF) * cohérence entre le fichier `/etc/auto.master` et les fichiers de table (`/etc/auto.nfs` pour les postes configurés avec le [[Etude/PaquetAufDesktop]]. * Que donne l'accés direct au répertoire en automount en ligne de commande ? Par exemple : {{{ $ cd /nfs/home }}} * Vérifier, si le repertoire apparait, qu'il posséde bien les droits et propriétaires attendus : {{{ $ ls -lsd /nfs/home }}} (`-d` pour voir le répertoire lui-même, et non son contenu) * vérifier que les uid/gid côté client et serveur sont bien synchrone ('''id mauvais.gringo''' doit donner le même résultat sur le client nfs et sur le serveur) |
Ligne 93: | Ligne 119: |
{{{ | {{{ |
Ligne 97: | Ligne 123: |
* les logs ? {{{/var/log/messages}}}, {{{/var/log/daemon.log}}} {{{ |
* les logs ? `/var/log/messages`, `/var/log/daemon.log`... Un exemple classique de soucis : {{{ |
Ligne 103: | Ligne 129: |
{{{ ~# rpcinfo -p un-serveur-pas-nfs |
{{{ # rpcinfo -p un-serveur-pas-nfs |
Ligne 106: | Ligne 132: |
~# rpcinfo -p un-vrai-serveur-nfs | # rpcinfo -p un-vrai-serveur-nfs |
Ligne 114: | Ligne 140: |
{{{ | {{{ |
Ligne 126: | Ligne 152: |
* Le daemon [:VérifierSiUnProcessusExiste:nfsd est-il bien actif] ? | * Le daemon [[VérifierSiUnProcessusExiste|nfsd est-il bien actif]] ? |
Ligne 132: | Ligne 158: |
= Annexe : passage par des règles iptables, fixation des ports de communication = ## ça sert vraiment ça? -MS ## tiré de http://wiki.debian.org/SecuringNFS 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. Aïe ! Pour '''fixer les ports utilisés par NFS''', il est possible de le configurer ainsi : {{{ # (... extrait de /etc/default/nfs-common ...) STATDOPTS="--port 32765 --outgoing-port 32766" }}} {{{ # (... extrait de /etc/default/nfs-kernel-server ...) RPCMOUNTDOPTS="-p 32767" }}} {{{ # (... extrait de /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. |
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).
NFS est d'abord utilisé sur les postes clients fixes. Si vous désirez mettre en place un accès aux données serveur pour un ordinateur portable, rendez-vous sur SSHFS.
Quelques documents génériques pour tout comprendre :
Linux NFS-HOWTO : toute la doc, officielle.
Le chapitre NFS de la Formation Debian GNU/Linux de l'ECP.
d'autres idées sur la page NFS de Léa Linux.
Reste à écrire :
- schéma technique général, démons et modules mis en jeu
- les lacunes de nfs : sécurité et performances
Pour l'utiliser quand même ? Parce que ça marche et que c'est facile à mettre en oeuvre. On dira que c'est efficace.
Mise en place
Sinon, voici ci-dessous la recette de cuisine à la mode AUF.
Configuration côté serveur
- Installation du logiciel serveur :
# aptitude install nfs-kernel-server
Configuration : on déclare ce qu'on veut exporter dans le fichier /etc/exports. Ce fichier sert de liste de contrôle d’accès pour les systèmes de fichiers à partager avec les clients NFS. Un exemple :
# Exemple 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_root_squash,no_subtree_check) /home2 192.168.0.0/16(rw,async,no_root_squash,no_subtree_check)
- C'est tout !
Pour mieux comprendre les options que nous avons indiquées, lire la page man exports
Attention à l'option no_root_squash : elle n'est pas vraiment recommandée car elle pose des petits problèmes de sécurité, mais il faut l'activer pour que l'impression PDF fonctionne avec cups-pdf sur les postes clients. Il n'existe pas d'autre solution actuellement (14 juillet 2009).
A détailler :
différences entre nfs-kernel-server, nfs-user-server et unfs3.
quelques options de exports
Configuration côté client
Sur Ubuntu, à partir de la version Gutsy (7.10) il faut installer le paquet nfs-common (qui n'est plus installé par défaut)
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 auto-monteur (autofs)
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.
- On installe l'automonteur :
$ sudo aptitude install autofs
- 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
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
Relancer le service autofs :
$ sudo invoke-rc.d autofs restart
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 (non recommandé)
Avec /etc/fstab le montrage sera permanent. De GROS inconvénients :
- le montage est fait systématiquement, même quand le répertoire n'est pas utilisé : gaspillage de ressources ! Surtout dans le cas d'un paramètrage "tcp", par défaut sous ubuntu.
- si le serveur NFS doit être redémarré au même moment que le client, le client sera bloqué jusqu'à la fin du démarrage du serveur. Le poste client aura aussi des difficulté a démarré en cas de problèmes sur le réseau. (le cas d'école étant une machine "A" qui monte une partition de la machine "B" dans son fstab, alors que "B" fait la même chose de son côté avec "A" : ça marche bien au cas par cas, et plus aucune des deux machines ne pourra démarrer aprés une coupure electrique générale)
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
automount est-il bien actif (et je ne vous parle pas si vous n'utilisez par automount dans votre CNF)
cohérence entre le fichier /etc/auto.master et les fichiers de table (/etc/auto.nfs pour les postes configurés avec le Etude/PaquetAufDesktop.
- Que donne l'accés direct au répertoire en automount en ligne de commande ? Par exemple :
$ cd /nfs/home
- Vérifier, si le repertoire apparait, qu'il posséde bien les droits et propriétaires attendus :
$ ls -lsd /nfs/home
(-d pour voir le répertoire lui-même, et non son contenu)
vérifier que les uid/gid côté client et serveur sont bien synchrone (id mauvais.gringo doit donner le même résultat sur le client nfs et sur le serveur)
- Si on essaye de monter la partition "à la main", quels sont les messages d'erreur ?
# mount -t nfs le-serveur-nfs:/home /mnt mount to NFS server 'le-serveur-nfs' failed: server is down.
les logs ? /var/log/messages, /var/log/daemon.log... Un exemple classique de soucis :
/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
- le serveur est-il bien accessible via le portmapper ?
# 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 ...
- Vérifier les exports, vus du côté client :
# 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
Vérifications à faire côté serveur
(à finir demain, je fatigue un peu, là...)
Le daemon nfsd est-il bien actif ?
- tcp/udp ?
- fichier exports ?
- filtrage de paquets ?
- logs ?
- heuuuu ?
Annexe : passage par des règles iptables, fixation des ports de communication
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. Aïe ! Pour fixer les ports utilisés par NFS, il est possible de le configurer ainsi :
# (... extrait de /etc/default/nfs-common ...) STATDOPTS="--port 32765 --outgoing-port 32766"
# (... extrait de /etc/default/nfs-kernel-server ...) RPCMOUNTDOPTS="-p 32767"
# (... extrait de /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.