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 :

 

10 réflexions sur « Créer un serveur de fichiers avec NFS »

  1. Bonjour,
    J’ai trouvé votre site, fort intéressante par ailleurs, via framboise. Je me demandais si votre étude: « Partage réseau NFS », fonctionnerait également avec 3 Raspberry relier en RJ45( Switch) en local, donc non connecté à internet. Avec évidement les RPI, en adressage static?
    Bien cordialement.

    1. Bonjour,
      Le partage réseau NFS fonctionne quelle que soit la version du Raspberry et l’interface réseau utilisée (avec ou sans connexion Internet).
      PS : cela fait longtemps que je n’ai pas mis à jour le blog faute de temps. Les derniers projets ont fait l’objet d’articles dans le magazine « L’Officiel PC ». Dernier projet : une machine à BlindTest. Je tâcherai de mettre a minima les pdf en téléchargement prochainement.

      1. Merci de votre retour.
        Je comprend très bien le manque de temps.
        si j’ai bien compris votre article le serveur prend l’adresse :192.168.1.0 et les clients : 192.168.1.101…192.168.1.102
        Merci
        Cdl

        1. L’adresse 192.168.1.0 désigne le réseau et ne peut peut-être utilisée pour adresser un hôte. Pour le serveur, vous pouvez utiliser l’adresse 192.168.1.1, les clients 192.168.1.2 et 192.168.1.3,… Avec le masque à 255.255.255.0, vous êtes libre d’utiliser les adresses comprises sur la plage 192.168.1.1 à 192.168.1.254.

          1. Oui, trés bien. J’ai compris.
            Je fais des tests et le cas échéant je reviens vers vous.
            Merci encore.
            Cdl

          2. bonjour,
            Il n’y a-il pas une erreur :
            –> sudo nano /etc/exports , j’aurai bien pensé à : sudo nano /etc/exportfs

            Merci , Cdl

          3. Bonjour, pour avoir accès au fichier /etc/exports, il faut avoir installé le serveur nfs (paquet nfs-server de mémoire).

          4. Merci .
            J’étais bloqué avec Samba, le montage automatique ne fonctionnait pas bien.
            Tout fonctionne correctement avec NFS, mon projet reprends de plus belle.
            merci encore
            Cdl

  2. Merci de votre réponse . Je comprends la  » guerre du temps » 🙂
    Donc si j’ai bien saisis le RPI serveur prend l’adresse : 192.168.1.0 et les clients :192.168.1.101…102
    c’est bien cela.
    Vous aurez compris que je suis débutant.
    Cdl,

Laisser un commentaire

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