Network File System (NFS) est un protocole Internet standard et prend en charge les autorisations Linux natives et les attributs de système de fichiers.
Les serveurs NFS exportent les répertoires et les clients NFS montent les répertoires exportés sur un point de montage local existant.
Les clients NFS peuvent monter les répertoires exportés de plusieurs façons :
- Manuellement en utilisant la commande
mount
- De façon persistante au démarrage en configurant des entrées dans le fichier
/etc/fstab
- À la demande en configurant une méthode de montage automatique
Paquetages nécessaires
Pour utiliser correctement NFS, nfs-utils
doit être pésent sur le système :
# dnf install nfs-utils |
Montage des répertoires NFS exportés
Avant de monter un répertoire il faut qu’il existe. Il est possible d’utiliser /mnt
comme point de montage temporaire.
# mkdir /mountpoint |
Montage NON persistant
L’utilisation de la commande mount
n’est PAS persistante
# mount -t nfs -o rw,sync server:/export /mountpoint |
Les options :
-t nfs
: spécifie le type de système de fichiers NFS- si
server:/export
: prend par défaut le type NFS
- si
-o
: ajouter une liste d’optionsrw
: système de fichiers exporté monté enrw
sync
: transactions synchrones vers le système de fichiers exporté
Montage persistant
Pour monter de manière persistante une exportation NFS il faut modifier le fichier /etc/fstab
en ajoutant une entrée correspondant au montage souhaité :
# vim /etc/fstab |
La commande mount
lira /etc/fstab
pour obtenir les informations sur le serveur NFS et les options de montage.
# mount /mountpoint |
Démontage manuel des répertoires NFS exportés
Commande unmount
Le démontage d’un partage avec unmount
est NON persistant car l’entrée dans le fichier /etc/fstab
n’est pas modifiée.
# umount /mountpoint |
Erreur target is busy
Le démontage n’est pas possible si le système de fichiers monté est en cours d’utilisation, tous les processus doivent cesser d’accéder aux données du point de montage.
# umount /mnt/data |
La commande lsof
liste tous les fichiers ouverts et les processus qui accèdent au système de fichiers :
# lsof /mnt/data |
Il suffit de kill
tous les processus, si besoin à l’aide d’un -SIGKILL
.
En cas de problème récalcitrant, il est possible d’utiliser umount -f
pour forcer le démontage mais cela peut entraîner une perte de données sur les fichiers ouverts :
# umount -f /mnt |
Montage des exports NFS avec l’automount
Autofs
Le service de montage automatique autofs
monte et démonte automatiquement les systèmes de fichiers et les exportations NFS lorsque les ressources ne sont plus utilisées.
Si les utilisateurs n’ont pas les droits pour lancer un mount
, ils ne pourront pas accéder aux supports amovibles (CD, DVD, disque externe, etc.), ni même aux systèmes de fichiers locaux ou distants s’ils ne sont pas déjà montés au démarrage via /etc/fstab
.
Les systèmes de fichiers avec montage automatique ne sont pas montés lors du démarrage du système mais sont en revanche montés à la demande : uniquement quand un utilisateur ou une application tente d’y accéder.
Avantages des systèmes de fichier en automount :
- n’utilisent quasiment pas de ressource
- sont protégés contre toute corruption inattendue lorsqu’il sont ouverts
- la configuration de montage la plus récente est utilisé (contrairement avec
/etc/fstab
) - sélectionne la connexion la plus rapide en cas de chemins redondants
Configuration de l’automount
Installation de paquets
Installation des paquetages autofs
et nfs-utils
:
# dnf install autofs nfs-utils |
Principes
La configuration d’un automount
se fait en 2 temps :
Création d’une mise en correspondance :
- indirecte
- fichier
/etc/auto.<name>
work -rw,sync myservername:/shares/work
- fichier
- directe
- fichier
/etc/auto.direct
/mnt/docs -rw,sync myservername:/shares/docs
- fichier
Création d’un schéma de correspondance maître :
fichier
/etc/auto.master.d/<name>.autofs
pour la mise en correspondance indirecte
/shares /etc/auto.<name>
pour la mise en correspondance directe
/- /etc/auto.direct
Création d’un schéma de correspondance maître
Le dossier /etc/auto.master.d
identifie le répertoire de base pour les points de montage et ici shared.autofs
est le fichier de mappage pour créer des montages automatiques.
# sudo vim /etc/auto.master.d/shared.autofs |
Il est possible de placer plusieurs entrées dans un seul fichier de schéma de correspondance maître ou d’en créer plusieurs.
Le fichier /etc/auto.master.d/shared.autofs
contient une entrée /shares
qui est le répertoire utilisé comme base pour les futurs montages automatiques :
/shares /etc/auto.shared |
Quand au fichier /etc/auto.shared
il contient les détails du montage et doit être créé avant le démarrage du service autofs
.
Création d’une mise en correspondance indirecte
Chaque fichier de mise en correspondance identifie le point de montage, les options de montage, ainsi que l’emplacement source à monter pour un ensemble de montages automatiques :
# sudo vim /etc/auto.shared |
Par convention, le nom d’un fichier de mise en correspondance comporte /etc/auto.<name>
, où le nom reflète le contenu du schéma de correspondance.
work -rw,sync myservername:/shares/work |
Le format d’une entrée est :
- point de montage :
work
*
: indique tous les sous dossiers
- options de montage :
-rw,sync
- possible également
-fstype=NTFS
ou autres types de fichiers-strict
: erreurs traitées comme étant irrécupérables
- emplacement source :
myservername:/shares/work
myservername:/musiques/&
: le&
pour indiquer une arboressence
Création d’une mise en correspondance directe
Un schéma de correspondance direct permet de mettre en correspondance une exportation NFS avec un point de montage comportant un chemin absolu et dans ce cas précis un seul fichier est nécessaire et peut contenir plusieurs correspondances directes.
Toutes les entrées de schéma de correspondance directe utilisent /-
comme répertoire de base :
/- /etc/auto.direct |
Le contenu du fichier /etc/auto.direct
:
/mnt/docs -rw,sync myservername:/shares/docs |
ici le répertoire /mnt
n’est pas géré par le service autofs
Démarrage de l’automount
La commande systemctl
permetra de démarrer et activer le service autofs
:
# systemctl enable --now autofs |
Méthode alternative avec un daemon systemd.automount
Le daemon systemd
peut créer automatiquement des fichiers d’unité pour les entrées dans /etc/fstab
qui incluent l’option x-systemd.automount
.
Après avoir modifié le fichier /etc/fstab
:
# systemctl daemon-reload // générer un nouveau fichier d’unité |
Le nom de l’unité est basé sur son emplacement de montage, si le point de montage est /remote/dev
alors le fichier d’unité sera remote-dev.automount
.
Cette méthode qui utilise une unité systemd.automount
ne peut prendre en charge que des points de montage de chemin absolus comme les mappages directs autofs.
/!\ Résumé des commandes
Commandes
# mkdir /mountpoint |
Fichiers
Création d’une mise en correspondance :
- indirecte
- fichier
/etc/auto.<name>
work -rw,sync myservername:/shares/work
- fichier
- directe
- fichier
/etc/auto.direct
/mnt/docs -rw,sync myservername:/shares/docs
- fichier
Création d’un schéma de correspondance maître :
fichier
/etc/auto.master.d/<name>.autofs
pour la mise en correspondance indirecte
/shares /etc/auto.<name>
pour la mise en correspondance directe
/- /etc/auto.direct
Paquets
# dnf install nfs-utils |
Cas pratiques
Démontage automatique du stockage rattaché au réseau
Installer le paquetage autofs :
[root@SERVER01 ~]# dnf install autofs |
Configuration d’un schéma de correspondance directe sur SERVER01 avec des exportations de SERVER02. Création du schéma de correspondance directe avec des fichiers nommés /etc/auto.master.d/direct.autofs
pour le schéma de correspondance maître et /etc/auto.direct
pour le fichier de mise en correspondance. Utilisation du répertoire /external
en tant que point de montage principal sur SERVER01.
Test du serveur NFS et export (avant de configurer le service de montage automatique) :
[root@SERVER01 ~]# mount -t nfs SERVER02.room42.company.org:/shares/direct/external/mnt |
[root@SERVER01 ~]# ls -l /mnt |
[root@SERVER01 ~]# umount /mnt |
Création d’un fichier de schéma de correspondance maître nommé /etc/auto.master.d/direct.autofs
, ajout du contenu suivant, puis enregistrer les modifications :
/- /etc/auto.direct |
BUT :
- Création d’un fichier de schéma de correspondance directe
/etc/auto.direct
- Configuration d’un schéma de correspondance indirecte sur SERVER01 avec des exportations de SERVER02
- Création due schéma de correspondance indirecte
/etc/auto.master.d/indirect.autofs
pour le schéma de correspondance maître/etc/auto.indirect
pour le fichier de mise en correspondance
- Utilisation du répertoire
/internal
en tant que point de montage principal sur SERVER01 - Configurer le service de montage automatique.
Montage nfs
:
[root@SERVER01 ~]# mount -t nfs SERVER02.room42.company.org:/shares/indirect /mnt |
Vérification :
[root@SERVER01 ~]# ls -l /mnt |
[root@SERVER01 ~]# umount /mnt |
Création d’un fichier de schéma de correspondance maître (indirect) /etc/auto.master.d/indirect.autofs
et ajout du contenu :
/internal /etc/auto.indirect |
Création d’un fichier de schéma de correspondance indirecte /etc/auto.indirect
et ajout du contenu :
* -rw,sync,fstype=nfs4 SERVER02.room42.company.org:/shares/indirect/& |
Démarrage automatique du service autofs
sur SERVER01 :
[root@SERVER01 ~]# systemctl enable --now autofs |
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service. |
Listez le point de montage /external
en tant qu’utilisateur aline.
[aline@SERVER01 ~]$ ls -l /external |
total 4 |
Vérification de l’accès au point de montage /external
:
[aline@SERVER01 ~]$ cat /external/MyFile.txt |
Hello ! |
Écriture dans un autre fichier :
[aline@SERVER01 ~]$ echo test-direct > /external/test.txt |
Vérification ;
[aline@SERVER01 ~]$ cat /external/test.txt |
test-direct |
Listing du point de montage /internal
:
[aline@SERVER01 ~]$ ls -l /internal |
total 0 |
Avec une mise en correspondance indirecte
-> vous devez accéder à chaque sous-répertoire exporté pour qu’il puisse être monté.
Avec un schéma de correspondance directe (après avoir accédé au point de montage mis en correspondance)
-> vous pouvez immédiatement afficher les répertoires et le contenu configurés dans le répertoire partagé et y accéder.
Test de l’accès au répertoire exporté /internal/backups
, :
[aline@SERVER01 ~]$ ls -l /internal/backups/ |
total 4 |
[aline@SERVER01 ~]$ cat /internal/backups/MyFile.txt |
Hello ! |
Test d’écriture :
[aline@SERVER01 ~]$ echo test-1 > /internal/backups/test-1.txt |
[aline@SERVER01 ~]$ cat /internal/backups/test-1.txt |
test-1 |
[aline@SERVER01 ~]$ ls -l /internal |
total 0 |
Test de l’accès au répertoire exporté /internal/ROOM-42
:
[aline@SERVER01 ~]$ ls -l /internal/ROOM-42 |
[aline@SERVER01 ~]$ cat /internal/ROOM-42/MyFile.txt |
[aline@SERVER01 ~]$ echo test-2 > /internal/ROOM-42/test-2.txt |
[aline@SERVER01 ~]$ cat /internal/ROOM-42/test-2.txt |
[aline@SERVER01 ~]$ ls -l /internal |
Test de l’accès au répertoire exporté /internal/Export-Folder-IMG
:
[aline@SERVER01 ~]$ ls -l /internal/Export-Folder-IMG |
[aline@SERVER01 ~]$ cat /internal/Export-Folder-IMG/MyFile.txt |
[aline@SERVER01 ~]$ echo test-3 > /internal/Export-Folder-IMG/test-3.txt
``` |
[aline@SERVER01 ~]$ ls -l /internal |
Test de l’accès au répertoire exporté /external
:
[aline@SERVER01 ~]$ ls -l /external |
Accès au stockage rattaché au réseau
Caractéristiques de l’environnement :
- SERVER02 partage le répertoire
/shares
qui contient les sous-répertoires Physique, Chimie et Biologie - groupe PhDs
- utilisateurs PhD1 et PhD2
- accès en lecture et en écriture au répertoire exporté
/shares/Physique
- groupe Chimie
- utilisateurs Savant1 et Savant2
- accès en lecture et en écriture au répertoire exporté
/shares/Chimie
- groupe wheel
- utilisateurs aline et sysadmin
- accès en lecture et en écriture au répertoire exporté
/shares/Biologie
- Le point de montage principal de SERVER01 est le répertoire
/remote
- fichier
/etc/auto.master.d/shares.autofs
comme fichier de mise en correspondance principal - fichier
/etc/auto.shares
comme fichier de mise en correspondance indirect - le répertoire exporté
/shares/Physique
est monté automatiquement sur/remote/Physique
sur SERVER01 - le répertoire exporté
/shares/Chimie
est monté automatiquement sur/remote/Chimie
sur SERVER01 - le répertoire exporté
/shares/Biologie
est monté automatiquement sur/remote/Biologie
sur SERVER01
Installation du paquet autofs
:
[root@SERVER01 ~]# dnf install autofs |
[...] |
Test du serveur NFS avant de configurer le service de montage automatique :
[root@SERVER01 ~]# mount -t nfs SERVER02.room42.company.org:/shares /mnt |
[root@SERVER01 ~]# ls -l /mnt |
[root@SERVER01 ~]# umount /mnt |
Création d’un fichier de schéma de correspondance maître /etc/auto.master.d/shares.autofs
et ajout du contenu suivant :
/remote /etc/auto.shares |
Création d’un fichier de schéma de correspondance indirecte /etc/auto.shares
et ajout du contenu suivant :
* -rw,sync,fstype=nfs4 SERVER02.room42.company.org:/shares/& |
Lancement et activation du service autofs
sur SERVER01 :
[root@SERVER01 ~]# systemctl enable --now autofs |
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service. |
Test de la configuration autofs
avec les différents utilisateurs, ici avec l’utilisateur PhD1 :
[root@SERVER01 ~]# su - PhD1 |
[PhD1@SERVER01 ~]$ echo TEST1 > /remote/Physique/Test.txt |
[PhD1@SERVER01 ~]$ ls -l /remote/Biologie/ |
Avec l’utilisateur Savant1 :
[root@SERVER01 ~]# su - Savant1 |
[Savant1@SERVER01 ~]$ echo TEST2 > /remote/Chimie/Test.txt |
[Savant1@SERVER01 ~]$ ls -l /remote/Biologie/ |
Avec l’utilisateur aline :
[root@SERVER01 ~]# su - aline |
[aline@SERVER01 ~]$ echo TEST3 > /remote/Biologie/Test.txt |
[aline@SERVER01 ~]$ ls -l /remote/Physique/ |
Affichage des options mount pour l’exportation NFS montée automatiquement :
[root@SERVER01 ~]# mount | grep nfs |
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) |
Documentation
MAN mount(8)
MAN umount(8)
MAN showmount(8)
MAN fstab(5)
MAN mount.nfs(8)
MAN nfsconf(8)
MAN rpcbind(8)
MAN autofs(5)
MAN automount(8)
MAN auto.master(5)
MAN mount.nfs(8)
MAN systemd.automount(5)