Nfs

De BlaxWiki
Aller à la navigationAller à la recherche


Serveur NFS Linux

  • S'assurer que le kernel intègre bien le support NFS (.config) en dur tant qu'a faire :
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_ROOT_NFS is not set (à activer si l'on veut faire booter un serveur en pxe / nfs)
CONFIG_NFSD=y
CONFIG_NFSD_V3=y
  • Editer le fichier /etc/exports et y ajouter les répertoires à monter ainsi que l'hote distant autorisé à effectuer le montage :
/var/www/vm localhost(ro) 212.43.248.153(ro)
/etc localhost(ro) 212.43.248.153(ro)
/var/lib/mysql localhost(ro) 212.43.248.153(ro)

Faire un exportfs -a pour prendre en compte le /etc/exports

Sur le serveur, nfs & portmap (rpcbind sur les OS récent) doivent etre lancés.

Pour partager ou monter les systèmes de fichiers NFS, les services suivants fonctionnent de concert, selon la version de NFS qui est implémentée :
    nfs — Un service qui lance les processus RPC appropriés pour répondre aux requêtes pour les systèmes de fichiers NFS partagés.
    nfslock — Un service facultatif qui lance les processus RPC appropriés pour permettre aux clients NFS de verrouiller des fichiers sur le serveur.
    portmap — Le service RPC pour Linux ; il répond aux requêtes pour des services RPC et définit des connexions vers le service RPC. Il n'est pas utilisé avec NFSv4. 

Les processus RPC suivants facilitent les services NFS :
  
  rpc.mountd — Ce processus reçoit la requête de montage en provenance d'un client NFS et vérifie que le système de fichiers demandé est bien exporté. Ce processus est démarré 
automatiquement par le service nfs et ne nécessite pas de configuration au niveau de l'utilisateur. Ce processus n'est pas utilisé avec NFSv4.

    rpc.nfsd — Ce processus est le serveur NFS. Il fonctionne avec le noyau Linux pour satisfaire les requêtes dynamiques des clients NFS, comme par exemple pour fournir des fils de 
serveur (ou threads) chaque fois qu'un client NFS se connecte. Ce processus correspond au service nfs.

    rpc.lockd — Un processus facultatif qui permet aux clients NFS de verrouiller des fichiers sur le serveur. Il correspond au service nfslock. Ce processus n'est pas utilisé avec 
NFSv4.

    rpc.statd — Ce processus implémente le protocole RPC de Moniteur de statut de réseau (NSM) (de l'anglais Network Status Monitor) qui avertit les clients NFS lorsqu'un serveur 
est redémarré sans avoir été préalablement arrêté correctement. Ce processus est lancé automatiquement par le service nfslock et ne nécessite pas de configuration au niveau de 
l'utilisateur. Ce processus n'est pas utilisé avec NFSv4.

    rpc.rquotad — Ce processus fournit des informations sur les quotas utilisateur s'appliquant aux utilisateurs distants. Il est lancé automatiquement par le service nfs et ne 
nécessite pas de configuration au niveau de l'utilisateur.

    rpc.idmapd — Ce processus fournit au client et serveur NFSv4 des appels ascendants (aussi appelés upcalls) qui établissent la correspondance entre les noms NFSv4 (qui sont des 
chaînes se présentant sous la forme utilisateur@domaine) et les UID et GID locaux. Pour que idmapd puisse fonctionner avec NFSv4, /etc/idmapd.conf doit être configuré. Ce service 
est nécessaire pour une utilisation avec NFSv4.

    rpc.svcgssd — Ce processus fournit le mécanisme de transport serveur pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une 
utilisation avec NFSv4.

    rpc.gssd — Ce processus fournit le mécanisme de transport client pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une 
utilisation avec NFSv4. 

Client Nfs

Le service portmap (ou rpcbind sur les os récent) doit etre lancé et nfs-common avant le service netfs. Le service nfsd n'a aucune raison de tourner sur un client nfs. Le paquet nfs-utils doit être installé aussi. Sur certain os (genre centos 6.2), rpcbind n'est pas lancé directement, mais netfs qui est démarré le démarre (il n'y a plus portmap ou nfs-common).

Si le client n'arrive pas à faire un mount nfs, essayer de faire un mount nfs en local sur le serveur nfs. Si le serveur n'y arrive pas non plus, rajouter dans le /etc/fstab du 
serveur nfs :
rpc_pipefs      /var/lib/nfs/rpc_pipefs rpc_pipefs      defaults        0       0
nfsd            /proc/fs/nfsd           nfsd            defaults        0       0


Options pour le montage nfs
    * rw, monte le FS en lecture/écriture (doit donc être exporté en rw),
    * ro, monte le FS en lecture seule,
    * bg, si le montage ne fonctionne pas, cette option permet de faire des tentatives ultérieures en tâche de fond et de continuer à traiter les autres requêtes de montage,
    * hard, si un serveur ne fonctionne pas, cette option permet de bloquer les accès à ce serveur jusqu’à ce qu’il fonctionne de nouveau (à utiliser avec modération),
    * soft, si un serveur ne fonctionne pas, cette option permet d’envoyer une erreur en retour évite de bloquer des processus en attente de montage,
    * noexec, ne pas permettre l’exécution des binaires,
    * intr, permet aux utilisateurs d’interrompre les opérations bloquées,
    * nointr, n’autorise pas les interruptions des utilisateurs,
    * retrans=n, précise le nombre de tentatives à faire avant l’envoi d’une erreur,
    * timeo=n, précise la période de timeout (en 1/10 e de secondes) pour les requêtes,
    * rsize=n, précise la taille du tampon de lecture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion),
    * wsize=n, précise la taille du tampon d’écriture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion).

remote_host:/repertoire_distant repertoire_local nfs rsize=1024,wsize=1024 0 0
Lorsque le client boot en pxe / nfs, si il bloque sur udev, modifier le fichier /tftpboot/nfsroot/centos5_26_x32/etc/sysconfig/network-scripts/net.hotplug
avant :        ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)
apres :         eth*|ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)

Sous freebsd, il faut editer le fichier /etc/rc.conf et rajouter : nfs_client_enable="YES" et nfs_reserved_port_only="YES"


Export NFS Netapp & Qtree

Nous allons voir ici un cas un peu particulier d'export Nfs concernant des droits restreints, mais le principe d'une Qtree / export nfs est le même pour les cas simples.

On peut avoir besoin d'avoir des droits nfs restreint sur des répertoires d'une Qtree, donc que chaque serveur ne puisse monter que son "sous-répertoire" de la qtree et ne puisse pas
monter la qtree globale

Il faut alors procéder de la sorte :
 - On crée une qtree de facon normal, ici /vol/vol0/dialnode
 - On fait un export nfs classique de la qtree /vol/vol0/dialnode, on monte la qtree sur un serveur, et on créé plusieurs répertoires (ex db02so,wb01so) qui vont etre affectés à des 
serveurs, avec des exports nfs particulier pour chacun des répertoires
 - On démonte la qtree /vol/vol0/dialnode sur le serveur, et on supprime son export nfs sur le nfs
 - On recréé alors l'export nfs suivant : 
	/vol/vol0/dialnode 	Read-Write Access (127.0.0.1)
        Root Access (127.0.0.1)
        Security (sys)

Cela va permettre de creer des exports nfs pour les autres répertoires que nous avons créés (et qui ne sont pas des qtree) et de les monter sur les différents serveurs. Sans l'export
nfs précédent (/vol/vol0/dialnode Read-Write Access (127.0.0.1)), les répertoires de cette qtree ne pourraient pas être montés sur les serveurs. Mais avec ces droits particuliers, les
serveurs ne peuvent pas monter la qtree /vol/vol0/dialnode

 - Export nfs pour les répertoires de la qtree (classique)
	/vol/vol0/dialnode/backup/db02so
        Read-Write Access (172.31.50.23)
        Root Access (172.31.50.23)
        Security (sys)
	
        /vol/vol0/dialnode/backup/wb01so 	
        Read-Write Access (172.31.50.24)
        Root Access (172.31.50.24)
        Security (sys)