Créer un serveur de fichiers avec NFS

Partage réseau NFS


Maintenant que l’on a vu comment ajouter de l’espace disque au Raspberry avec LVM (à moindre coût en recyclant des disques durs), il est question de partager cet espace de stockage sur le réseau. Disposant des plusieurs Raspberry Pi sous Raspbian, j’ai naturellement opté pour le serveur NFS (Network File System) pour exposer la capacité disque aux systèmes Raspbian. Le partage de fichiers NFS permet de partager tout ou partie du système de fichier à destination de clients NFS (des machines Unix le plus souvent). On utilisera également le partage de fichier avec un serveur Samba pour pouvoir déposer des fichiers depuis un système Microsoft.

Pourquoi ne pas avoir exclusivement utiliser Samba permettant le partage vers tous les OS ? Tout simplement parce que NFS, compatible entre systèmes de type Unix, s’appuie sur le protocole UDP (non connecté) et permet de garantir un meilleur flux entre le Raspberry Pi serveur NFS et les Raspberry Pi client NFS. Pour preuve, j’ai réalisé un test basique : Lecture en simultanée d’un même film HD puis 3 films différents en HD sur les machines suivantes :

  1. le serveur NFS lui-même (Raspberry, connecté au réseau filaire);
  2. le client NFS (Raspberry, connecté au réseau en wifi) ;
  3. le client Samba (PC portable, connecté au réseau en wifi puis en filaire).

J’ai pu observer dans tous les cas le constat suivant : seul le film lu sur le PC portable (client Samba) souffrait de quelques ralentissements/saccades. Je pense que cela vient du fait que Samba s’appuie sur le protocole TCP, connecté, qui est donc plus lourd pour les accès réseau. Pour pousser les tests peu plus loin et conforter cette observation avec des mesures factuelles, je ferais prochainement des tests de copie brute avec la commande dd.

Dans la suite de cet article, le serveur désigne la machine qui héberge l’espace à partager et le client la machine qui accèdera à ce partage via le réseau. Le répertoire de partage sera « /media/nas ».

Configuration du serveur

Côté serveur, il est nécessaire d’installer les paquets suivants :

Pour rappel, dans l’article « Gérer des disques avec LVM« , nous avions monté le Logical Volume (LV) sur le répertoire /media/nas. C’est ce répertoire que nous allons partagé pour que l’ensemble du LV  soit accessible sur le réseau.

Pour configurer les répertoires à « exporter vers les clients » (à partager donc), ouvrez le fichier /etc/exports :

et ajoutez la ligne suivante :

Cette ligne permet de préciser qu’on exporte le répertoire /media/nas à l’ensemble du réseau 192.168.1.0 en lecture/écriture et que toutes les connexions se feront sous l’identité suivante : user pi et groupe pi.

Le serveur se base sur les uid et gid fourni dans chaque requêtes pour les contrôles d’accès aux fichiers exporté par le serveur. Ainsi, cela nécessite que l’uid et le gid utilisés le client existent également sur le serveur pour un accès transparent, comme si les fichiers se trouvaient sur le filesystem local. Mais cela n’est pas systématiquement le cas et n’est pas non plus souhaitable, notamment pour l’utilisateur root d’une machine client qui serait alors vu comme root du serveur lors des accès aux fichiers du serveur. Par défaut, le « root squashing » est activé et permet de mapper l’uid 0 et le gid 0 sur l’utilisateur nobody (uid : 65534) et le groupe nogroup (gid : 65534). On peut également activer le « squashing » pour tous les utilisateurs avec l’option all_squash et préciser l’uid et le gid vers lequel mapper les requêtes avec les options anonuid=1000 et anongid=1000 (ici, user pi, groupe pi). Enfin, l’option sync permet au serveur de répondre aux requêtes seulement une fois que les modifications sont commités dans un état de stockage stable.

Pour lister les partages, tapez la commande :

Le serveur est configuré, chaque client du réseau 192.168.1.0 pourra accèder en R/W au répertoire /media/nas sous l’utilisateur pi et le groupe pi.

Configuration client

Côté client, seul le paquet nfs-common est nécessaire :

Pour lister les partages sur le serveur, tapez la commande :

Il suffit maintenant de monter sur le filesystem du client, le filesystem exporté par le serveur, dans un répertoire destiné à accueillir le montage :

et monter le partage à l’aide de la commande :

Il est également possible d’automatiser le montage au démarrage du système en éditant le fichier /etc/fstab :

et d’y ajouter la ligne suivante :

Ainsi, que ce soit sur le serveur ou le(s) client(s), l’espace disque partagé du NAS sera accessible dans le répertoire /media/nas.

Pour que les modifications du fichier /etc/fstab soient effectives, on peut rédemarrer ou demander le (re)montage de tous les filesystem mentionnés dans le fichier /etc/fstab à l’aide de la commande :

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *