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
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