Le système de fichiers réseau NFS (Network File System)
Document Sample


Le système de fichiers réseau NFS (Network File System)
Introduction
Dans le monde de Linux et des clones UNIX, le plus commun des systèmes de fichiers réseau est
celui nommé NFS, Network File System. NFS est un protocole complexe de partage de fichiers qui
possède de profondes racines dans UNIX. Il s'agit du protocole standard de partage réseau entre
machines UNIX, créé par SUN vers 1980. Il comprend l'ajout de fonctionnalités supplémentaires
(dans la couche session au dessus de TCP/IP), les RPC, Remote Procedure Calls (et spécialement
l'excellente implémentation de Sun Solaris). Le protocole de transport principal peut utiliser soit TCP
soit UDP, mais plusieurs sous-protocoles additionnels sont aussi requis, chacun d'eux fonctionnant au
dessus du protocole RPC, Remote Procedure Call. Cela inclut le protocole de montage séparé pour
l'authentification et NLM, Network Lock Manager pour le verrouillage des fichiers (l'implémentation
commune est aussi fortement liée à d'autres protocoles communs basé sur RPC, tels NIS, Network
Information Service pour l'authentification. NIS n'est pas communément utilisé pour l'authentification
sur GNU/Linux, du fait de son insécurité fondamentale). Le fait que NFS n'a pas été largement adapté
comme un protocole Internet est peut être due à sa complexité.
Implémentation du système de fichiers par réseau :
Le code NFS du noyau Linux et du serveur est en grande partie écrit par Rick Sadley. NFS est dérivé
de unfsd, User space NFS server, réalisé à l'origine par Mark Shand, et de hnfs, Harris NFS server
écrit par Donald Becker. La plupart des implémentations d'UNIX, le client comme le serveur NFS sont
implémentés commme des démons de niveau noyau (nfsd le démon NSF sur le serveur et biod ,
Block I/O Daemon sur la machine cliente) qui sont lancés depuis l'espace utilisateur au moment du
démarrage du système. Dans la version 1.0 de Linux, l'implémentation de NFS est quelque peu
différente : le client est intégré à la couche du système de fichiers virtuel VFS, Virtual File système du
noyau. Le plus gros problème avec NFS dans cette version est que le noyau n'est pas capable
d'allouer de la mémoire par blocs de plus de 4 ko (les grands datagrammes UDP doivent être
artificiellement réduit). La nouveauté dans Linux 2.2 c'est le support d'un serveur NFS dans le noyau,
appelé knfsd 2.2. Ce type d'implémentation a des avantages, principalement la rapidité, une
machine Linux 2.2 avec knfsd est un serveur NFS respectable. Dans Linux 2.6, ce système de
fichiers crucial a reçu de nombreuses mises-à-jour et améliorations. La plus importante est que Linux
supporte maintenant expérimentalement la nouvelle version du protocole NFSv4 encore peu adoptée
pour ses implémentations à la fois client et serveur (les versions précédentes de Linux comprenaient
le support des versions 2 et 3 du protocole). La nouvelle version supporte une authentification plus
solide et plus sécurisée (avec chiffrement), un verrouillage plus intelligent, le support de pseudo-
systèmes de fichiers, et d'autres changements. Seules quelques caractéristiques de NFSv4 ont été
implémentées dans Linux pour le moment, mais le support est relativement stable et peut être utilisé
pour des applications de production. De plus, l'implémentation du serveur NFS de Linux a été
amélioré afin d'être plus adaptable (jusqu'à 64 fois plus d'utilisateurs concurrents et une file de
requêtes plus importante), pour être plus complet (par le support du service au-dessus de TCP, en
plus de l'UDP), pour être plus robuste (les pilotes des systèmes de fichiers individuels peuvent
adapter la façon dont les fichiers sur ces systèmes seront exportés pour s'adapter à leurs
particularités) et pour faciliter la maintenance (un nouveau système de fichiers nfsd a été imaginé à
la place d'appels système). Il y eu également d'autres changements invisibles, incluant la séparation
de lockd et nfsd et un support pour zero-copy networking sur les interfaces supportées. NFS est
également un peu plus facilement sécurisable grâce à la possibilité pour l'administrateur d'assigner
les numéros de port de lockd. Le côté client de NFS a aussi bénéficié d'un certain nombre
d'améliorations sur l'implémentation du protocole RPC sous-jacent incluant une infrastructure de
cache, un contrôle de connection au-dessus d'UDP, et d'autres améliorations pour TCP. Le support
de Linux pour l'utilisation de volumes NFS partagé en tant que système de fichiers root (pour des
systèmes sans disque) a été amélioré puisque le noyau supporte maintenant NFS par dessus TCP
dans ce but.
Qu'est-ce que NFS ?
Ce système de fichiers par réseau permet d'accèder aux fichiers présents sur des machines distantes
exactement comme s'ils étaient locaux. Il est constitué d'un mélange de fonctionnalités intégrées au
noyau côté client et d'un serveur NFS de l'autre côté. L'accès pour le client est complètement
transparent et fonctionne sur une grande variété de serveurs et d'architectures. Le système
GNU/Linux supporte les protocoles de partage de fichiers NFS pour clients UNIX.
Avantages qu'offre NFS :
– les données auxquelles tous les utilisateurs accèdent peuvent résider sur un hôte central, chaque
client montant ce répertoire au démarrage du système,
– les données occupant beaucoup de place disque peuvent être stockées sur une seule machine,
– les données administratives peuvent se trouver sur une unique machine.
Principe du NFS :
Le principe de fonctionnement de NFS est l'accès aux fichiers distants : un client essaie de monter un
répertoire d'une machine distante sur un répertoire local, exactement de la même manière qu'il le fait
pour un périphérique physique (HD, CDROM, ...). Comme toute ressource extérieure doit être
intégrée dans le système de fichiers Linux, cet accès ne pourra être permis qu'à l'aide d'un processus
de montage : une partie de l'arborescence d'une machine GNU/Linux "serveur", est exportée ce qui
lui permet d'être intégré dans le système de fichiers d'une machine GNU/Linux "cliente". L'utilisateur
peut monter cette arborescence exportée par le serveur, sur un point de montage, de façon tout-à-fait
semblable au montage de systèmes de fichiers des divers périphériques. Dès lors, pour l'utilisateur
sur la machine cliente, la ressource est accessible comme si elle résidait sur un périphérique local.
Pour désigner ce répertoire distant on utilise les commandes spécifiques aux systèmes de fichiers :
ex : mount t nfs machine_distante:/home /users monte le répertoire /home de la
machine_distante sur le répertoire /users de la machine locale avec l'option t pour le type de
système de fichiers (ici nfs). La machine distante est appelée serveur NFS, et on dit qu'elle exporte
tout (arborescence racine /) ou partie de son système de fichiers, en le partageant par une liste de
stations accessibles par réseau, en installant toutefois des restrictions d'accès.
(*) Note : dans l'exemple ci-dessus le montage peut s'effectuer en cours de session de travail par la
commande interactive mount. Mais dans un cadre de travail stable, où le serveur est dédié, il est
souhaitable de monter la ressources NFS au démarrage. Il suffit pour cela d'inclure la description du
montage sur une ligne de /etc/fstab. On peut comparer le processus à la "connexion à un lecteur
réseau" sur d'autres systèmes.
Installation et configuration de NFS (serveur et client) :
Vérifications d'usage :
Avant de pouvoir utiliser NFS, que ce soit en mode client ou en en serveur, il faut vérifier que le noyau
de la distribution GNU/Linux, que vous avez installé, a bien été compilée avec le support de NFS.
ex : cat /proc/filesystems
nodev rpc_pipefs
nodev nfsd le démon NFS
Le serveur :
L'installation s'effectue grâce au gestionnaire de paquetages (reportez-vous aux paragraphes du
Chapitre 4 : la commande rpm ; concernant l'utilisation de cet outil de gestion paquetages).
Tout d'abord, les services portmap qui gère les connexions RPC, et NFS ont dû être installés
initialement (sur une distribution Mandrakelinux 10.x, il s'agit des paquetages portmap... et nfs
utils...). Pour vérifier que les processus correspondant sont bien en exécution :
ex : ps aux | grep portmap
NFS, comme les autres services, se gère avec un script placé dans /etc/rc.d/init.d/ :
ex : service portmap start
Starting portmapper: [OK]
service nfs start
Starting NFS services: [OK]
Starting NFS deamon: [OK]
Starting NFS mountd: [OK]
Les fichiers importants du NFS :
/etc/exports ce fichier (à créer s'il est absent) contient la liste des exportations. Sur chaque
ligne, on précise un répertoire du système de fichiers, suivi par la liste des machines distantes
clientes autorisées à les monter. Si cette liste est vide, toutes les stations accessibles sont autorisées.
ex : chemin_absolu_repertoire liste_machines (liste_options)
exportation déclarées dans le fichier /etc/exports sur le serveur NFS (server_nfs)
/var/www/html *.linuxfranchcounty.org (ro) pc1 (rw)
/home/toto pc2(ro) pc3(rw)
/usr/bin pc2(ro) pc3(ro)
/usr/share/doc (ro)
Pour valider un changement opéré dans ce fichier de configuration, faire appel à la commande :
ex : /usr/sbin/exportfs a
Le client :
Sur la station cliente on créé un répertoire de montage spécial dans /mnt, de la machine hôte (pc1) :
ex : mkdir /mnt/nfs
Puis on effectue le montage, sur le point de montage précédent, de la ressource /var/www/html
(qui a été exportée par nfs_server) :
ex : mount t nfs machine_serveur:arborescence point_montage
mount t nfs server_nfs:/home/httpd/html /mnt/nfs l'utilisateur sur l'hôte (pc1)
pourra alors mettre à jour le site WEB distant sur server_nfs.
Respects par nfs des droits :
Les permissions des fichiers importés s'appliquent vis à vis de l'utilisateur, notamment en ce qui
concerne la directive (rw). On ne pourra mettre à jour sur la station cliente, un fichier exporté que s'il
posséde la permission d'écriture (w) vis-à-vis de l'utilisateur.
Automatisation du montage :
En ajoutant le contenu de la commande précédente dans une ligne du fichier /etc/fstab :
ex : server_nfs:/home/httpd /mnt/nfs nfs auto,user
Autres paramètres de montage :
insecure autorise les accès non authentifiés
rsize=8192 et wsize=8192 augmente le débit de NFS ?
intr interrompt une requête NFS en cas de serveur indisponible, permet d'éviter un blocage
Configuration graphique :
Configurer l'export : du serveur server_nfs pour les stations clientes (pc2, pc3)
Pour chaque répertoire à exporter, on précise la liste des clients :
/home pc2, pc3 r
/usr/bin pc2, pc3 r
/home/httpd pc3 rw
/usr/public pc3 rw
Après validation, on peut vérifier que la table suivante a été écrite dans le fichier /etc/exports :
/home pc2(ro), pc3(ro)
/usr/bin pc2(ro), pc3(ro)
/home/httpd pc3(rw)
/usr/public pc3(rw)
Related docs
Get documents about "