Un serveur de fichier est simplement un PC mettant à disposition un espace de stockage via le réseau.


On accède donc le(s) disque(s) dur de ce PC via un partage réseau.


Plusieurs solution sont possibles pour réaliser ce partage réseau.

Les 2 solutions les plus courantes au sein d’un réseau local (LAN) sont:

  • SAMBA : le protocole SAMBA est l’implémentation libre du protocole SMB qu’utilisent les OS Microsoft pour partager des ressources (fichiers ou imprimantes) sur un réseau
  • NFS : est un protocole de partage réseau natif des OS Unix


NFS est disponible pour Windows via l’installation d’un client NFS : Microsoft Services for UNIX (SFU) alors que SAMBA est nativement supporté par Windows.

NFS est réputé pour être plus performant que SAMBA, même lors de communication entre machine Linux-Windows


N’ayant que des machines Linux, j’ai choisi NFS.


Installation du serveur NFS

Rien de plus simple :

sudo aptitude install nfs-kernel-server


Configuration

Reste plus qu’a indiquer au serveur NFS les ressources qui doivent être partagés, cela se fait via le fichier /etc/exports avec la syntaxe suivante :

[dossier partagé] [client autorisé][(options)]
  • dossier partagé : le dossier du serveur qui dot être accessible
  • client autorisé : adresse IP/nom de machine autorisé à accéder à ce partage
  • options : voici celles que j’utilise
    • rw : accès en écriture (lecture seule par défaut)
    • async/sync : le serveur NFS doit il afficher les changements avant que ceux ci soient réellement effectué sur le disque (async) ou non (sync – option par défaut)


Un fois cette configuration effectué il suffira de démarrer/redémarrer le serveur NFS :

sudo /etc/init.d/nfs-kernel-server restart



Accès au répertoire partagé côté client

Temporaire

On peut monter le partage réseau à la demande via la commande mount :

mount -t nfs [serveur]:[dossier partagé] [point de montage local]
  • serveur : nom adresse ou adresse IP du serveur
  • dossier partagé : dossier partagé paramétré dans le fichier /etc/exports sur le serveur
  • point de montage local : dossier local dans lequel le contenu du partage serveur sera affiché


Permanent via fstab

On peut rendre ce montage permanent en ajoutant l’entrée correspondante dans le fichier fstab

[serveur]:[dossier partagé]   [point de montage local]    nfs   defaults    0  0


Si le serveur n’est pas toujours allumé lorsque le client démarre, il est conseillé de mettre l’option noauto  à la place de defaults, indiquant que ce montage ne doit pas être monté de façon automatique.

Il conviendra alors de faire un mount -a lorsque le serveur sera accessible et que l’on souhaite y accéder.


Permanent via AutoFS

Le montage permanent via fstab à certaines lacunes :

  • le serveur doit être disponible lors du boot du client ou le point de montage ne doit pas être activé automatiquement
  • Les montages sont permanent même si on ne les utilise pas
  • Il semblerait que ce soi consommateur de ressource si on a beaucoup de montage NFS.

AutoFS pallie à ces problèmes en ne montant les ressources qu’a la demande.


Installation :

sudo aptitude install autofs


Configuration :

On modifie tout d’abord le fichier /etc/auto.master pour faire le lien entre le point de montage local et un fichier de configuration spécifique :

[point de montage local] [fichier de configuration] --ghost,--timeout=300


Le fichier de configuration sera localisé dans /etc et commencera par auto.

Il est d’usage ensuite d’indiquer le protocole utilisé (ici nfs, mais autofs peut monter d’autre protocole)

L’option ghost indique qu’il faut afficher le répertoire même si le montage n’est aps actif et le timeout se passe de commentaire.


Dans mon cas je monte le contenu d’un partage nommé multimedia sur le serveur dans Musique et Vidéos en fonction du type du contenu j’ai donc :

/home/[mon user]/Vidéos/sweetBox    /etc/auto.nfs.video --ghost,--timeout=300
/home/[mon user]/Musique/sweetBox    /etc/auto.nfs.music     --ghost,--timeout=300


Il faut ensuite créer le(s) fichier(s) défini dans /etc/auto.master ainsi :

[nom du partage] -fstype=nfs[options]  [serveur]:[dossier partagé]


nom du partage : nom du sous-répertoire contenant le partage tel qu’il apparaitra dans le répertoire spécifié dans l’entrée /etc/auto.master correspondante

options : on peut mentionner rw pour monter le partage en lecture/écriture (dans mes partages et tous les exemples trouvés sur le net on peut trouver l’option intr, dont j’avoue ne pas voir compris à quoi elle sert http://pwet.fr/man/linux/formats/nfs)


Voici mes fichiers :

/etc/auto.nfs.music

Musique      -fstype=nfs,rw,intr    [IP sweetBox]:/mnt/raid/multimedia/Musiques

/etc/auto.nfs.video

Animations      -fstype=nfs,rw,intr    [IP sweetBox]:/mnt/raid/multimedia/Animation
Films      -fstype=nfs,rw,intr    [IP sweetBox]:/data/multimedia/Films
Séries      -fstype=nfs,rw,intr    [IP sweetBox]:/data/multimedia/Series


Pour que les montages soient pris en compte il faut ensuite redémarrer le service autofs :

sudo service autofs restart


Ce qui a pour conséquence de « créer » les réperoires suivant le /home de mon utilisateur :

  • Vidéos/sweetBox/Animation
  • Vidéos/sweetBox/Films
  • Vidéos/sweetBox/Séries
  • Musique/sweetBox/Musique


Cas des liens symboliques

Prenons un exemple réel, celui de mon PC multimédia, j’ai sur ce PC un répertoire /data/multimedia, contenant mes films et ma musique organisés en sous-répertoires (cf. ci-dessous).

2 de ces sous-répertoires (Animation et Musique) sont plus sensibles (contrairement aux autres cela m’embêterait d’en perdre le contenu), ils sont donc en réalité localisés sur un volume RAID1 et un lien symbolique est fait dans le répertoire multimedia :

  • /data/multimedia/Animation –> /mnt/raid/multimedia/Animation
  • /data/multimedia/Documentaires
  • /data/multimedia/Films
  • /data/multimedia/Musique–> /mnt/raid/multimedia/Musique
  • /data/multimedia/Series


Le but est d’exposer l’ensemble de ces répertoires via NFS, la première idée est d’ajouter le répertoire multimedia, comme ceci :

/data/multimedia 192.168.1.0/24(rw,sync)


Le problème est que dans le cas d’un accès NFS les liens symboliques sont interprétés côté client, lorsque vous double cliquez sur le sous-répertoire Animation, Nautilus cherche à accéder au répertoire /mnt/raid/multimedia/Animation sur le PC client (ou vous êtes) et non pas sur le serveur…


Le solution trouvé pour mon cas est donc de créer un export NFS pour chacun des sous-répertoire de multimedia ainsi :

/data/multimedia/NonTries 192.168.1.0/24(rw,async,no_subtree_check)
/data/multimedia/Films 192.168.1.0/24(rw,async,no_subtree_check)
/data/multimedia/Series 192.168.1.0/24(rw,async,no_subtree_check)
/data/multimedia/Documentaires 192.168.1.0/24(rw,async,no_subtree_check)
/mnt/raid/multimedia/Animation 192.168.1.0/24(rw,async,no_subtree_check)
/mnt/raid/multimedia/Musiques 192.168.1.0/24(rw,async,no_subtree_check)


Cas des partages sur plusieurs disques durs/partitions

Ce paragraphe est rédigé de tête, n’ayant plus cette configuration, je ne peux pas vérifier le bien fondé des indications fournies ici, mais elle peuvent être un point de départ pour trouver la solution.


Autre cas qui peut faire perdre pas mal de temps et qui m’est arrivé, prenons une structure comme celle-ci sur le serveur de fichier :

Sur la partition 1 du disque sda, nous avons le point de montage /

Nous avons créé un répertoire /data/multimedia/Films contenant comme son nom l’indique des films.

On souhaite ensuite stocker de la musique dans un répertoire /data/multimedia/Musique

Mais comme sda1 est bientôt plein le répertoire Musique est le point de montage vers une autre partition (éventuellement d’un autre disque dur)

On a donc :

  • /data/multimedia/Films sur sda1
  • /data/multimedia/Musique sur sdb1


Si on veut exporter le répertoire multimedia via NFS, on créera une entrée comme celle-ci dans /etc/exports :

/data/multimedia 192.168.1.0/24(rw,sync)


Côté client si on monte ce partage dans un répertoire /home/[mon_user]/multimedia, on y verra bien les 2 répertoires Films et Musique mais ce dernier est vide


Cela est dû au fait que l’on est sur un filesystem différent dans le cas de Musique et donc NFS par défaut n’autorise pas l’accès au répertoire.


La solution consiste à utiliser l’option nohide et à exporter explicitement 1 à 1 les répertoires sur des filesystem différents :

/data/multimedia [adresse IP client](rw,sync,nohide)
/data/multimedia/Musique [adresse IP client](rw,sync,nohide)


Vous remarquerez au passage qu’avec cette option il n’est plus possible de définir des clients multiples (avec un masque de sous-réseau comme c’était le cas avant)



Sources :

nfs – Documentation Ubuntu Francophone

http://www.troubleshooters.com/linux/nfs.htm : tableau complet sur les options de montage

Fichiers de configuration de clients NFS

NFS: Overview and Gotchas

Chapter 20: NFS – Network File System

NFS security (Managing NFS and NIS, 2nd Edition)

[SOLVED] exporting several directories by a single nfs mount point – Ubuntu Forums


http://www.linux-consulting.com/Amd_AutoFS/autofs-5.html

http://doc.ubuntu-fr.org/autofs#nfs

http://www.linux-kheops.com/doc/redhat72/rhl-rg-fr-7.2/s1-nfs-client-config.html

http://www.greenfly.org/tips/autofs.html


image par Andy Field (Hubmedia) sous CC BY-BC-SA

Les commentaires sont fermés.