Gestion du stockage réseaux

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
  • -o : ajouter une liste d’options
    • rw : système de fichiers exporté monté en rw
    • 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
[...]
server:/export /mountpoint nfs rw 0 0

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
umount: /mnt/data: target is busy.

La commande lsof liste tous les fichiers ouverts et les processus qui accèdent au système de fichiers :

# lsof /mnt/data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1337 root cwd DIR 253,14 16 128 /mnt/data
bash 1772 john cwd DIR 253,14 12 128 /mnt/data
lsof 1786 root cwd DIR 253,14 19 128 /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
  • directe
    • fichier /etc/auto.direct
      /mnt/docs	-rw,sync	myservername:/shares/docs

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
* -rw,sync myservername:/musiques/&

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

Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.

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é
# systemctl start unit.automount // activer la config. de montage automatique

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

# mount -t nfs -o rw,sync server:/export /mountpoint

# systemctl enable --now autofs

# systemctl daemon-reload // générer un nouveau fichier d’unité
# systemctl start unit.automount // activer la config. de montage automatique

Fichiers

Création d’une mise en correspondance :

  • indirecte
    • fichier /etc/auto.<name>
      work	-rw,sync	myservername:/shares/work
  • directe
    • fichier /etc/auto.direct
      /mnt/docs	-rw,sync	myservername:/shares/docs

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
total 4
-rw-r--r--. 1 root wheel 22 Apr 7 23:15 MyFile.txt
[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
total 0
drwxrws---. 2 root wheel 24 Apr 7 23:34 ROOM-42
drwxrws---. 2 root wheel 24 Apr 7 23:34 Export-Folder-IMG
drwxrws---. 2 root wheel 24 Apr 7 23:34 backups
[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
-rw-r--r--. 1 root wheel 22 Apr 7 23:34 MyFile.txt

Vérification de l’accès au point de montage /external :

[aline@SERVER01 ~]$ cat /external/MyFile.txt
Hello !
This is the External Folder

É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
-rw-r--r--. 1 root wheel 18 Apr 7 23:34 MyFile.txt
[aline@SERVER01 ~]$ cat /internal/backups/MyFile.txt
Hello !
This is BACKUPS FOLDER

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
drwxrws---. 2 root wheel 24 Apr 7 23:34 backups

Test de l’accès au répertoire exporté /internal/ROOM-42 :

[aline@SERVER01 ~]$ ls -l /internal/ROOM-42
total 4
-rw-r--r--. 1 root wheel 21 Apr 7 23:34 MyFile.txt
[aline@SERVER01 ~]$ cat /internal/ROOM-42/MyFile.txt
Hello Again !
This is ROOM-42 Folder
[aline@SERVER01 ~]$ echo test-2 > /internal/ROOM-42/test-2.txt
[aline@SERVER01 ~]$ cat /internal/ROOM-42/test-2.txt
test-2
[aline@SERVER01 ~]$ ls -l /internal
total 0
drwxrws---. 2 root wheel 24 Apr 7 23:34 ROOM-42
drwxrws---. 2 root wheel 24 Apr 7 23:34 backups

Test de l’accès au répertoire exporté /internal/Export-Folder-IMG :

[aline@SERVER01 ~]$ ls -l /internal/Export-Folder-IMG
total 4
-rw-r--r--. 1 root wheel 18 Apr 7 23:34 MyFile.txt
[aline@SERVER01 ~]$ cat /internal/Export-Folder-IMG/MyFile.txt
Hello !
This is Export-Folder-IMG Folder !

[aline@SERVER01 ~]$ echo test-3 > /internal/Export-Folder-IMG/test-3.txt

```
[aline@SERVER01 ~]$ cat /internal/Export-Folder-IMG/test-3.txt
test-3
[aline@SERVER01 ~]$ ls -l /internal
total 0
drwxrws---. 2 root wheel 24 Apr 7 23:34 ROOM-42
drwxrws---. 2 root wheel 24 Apr 7 23:34 Export-Folder-IMG
drwxrws---. 2 root wheel 24 Apr 7 23:34 backups

Test de l’accès au répertoire exporté /external :

[aline@SERVER01 ~]$ ls -l /external
ls: cannot open directory '/external': Permission denied

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
[...]
Is this ok [y/N]: y
[...]
Complete!

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
total 0
drwxrwx---. 2 root PhDs 25 Apr 4 01:13 Physique
drwxrwx---. 2 root wheel 25 Apr 4 01:13 Biologie
drwxrwx---. 2 root Chimie 25 Apr 4 01:13 Chimie
[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 ~]$ ls -l /remote/Physique/
total 4
-rw-r--r--. 1 root PhDs 46 Apr 4 01:13 Welcome.txt
[PhD1@SERVER01 ~]$ cat /remote/Physique/Welcome.txt
Welcome !!!
You are on the Physique Folder on SERVER02
[PhD1@SERVER01 ~]$ echo TEST1 > /remote/Physique/Test.txt
[PhD1@SERVER01 ~]$ cat /remote/Physique/Test.txt
TEST1
[PhD1@SERVER01 ~]$ ls -l /remote/Biologie/
ls: cannot open directory '/remote/Biologie/': Permission denied
[PhD1@SERVER01 ~]$ ls -l /remote/Chimie/
ls: cannot open directory '/remote/Chimie/': Permission denied

Avec l’utilisateur Savant1 :

[root@SERVER01 ~]# su - Savant1
[Savant1@SERVER01 ~]$ ls -l /remote/Chimie/
total 4
-rw-r--r--. 1 root Chimie 46 Apr 4 01:13 Welcome.txt
[Savant1@SERVER01 ~]$ cat /remote/Chimie/Welcome.txt
Welcome !!!
You are on Chimie Folder on SERVER02
[Savant1@SERVER01 ~]$ echo TEST2 > /remote/Chimie/Test.txt
[Savant1@SERVER01 ~]$ cat /remote/Chimie/Test.txt
TEST2
[Savant1@SERVER01 ~]$ ls -l /remote/Biologie/
ls: cannot open directory '/remote/Biologie/': Permission denied
[Savant1@SERVER01 ~]$ ls -l /remote/Physique/
ls: cannot open directory '/remote/Physique/': Permission denied

Avec l’utilisateur aline :

[root@SERVER01 ~]# su - aline
[aline@SERVER01 ~]$ ls -l /remote/Biologie/
total 4
-rw-r--r--. 1 root wheel 45 Apr 4 01:13 Welcome.txt
[aline@SERVER01 ~]$ cat /remote/Biologie/Welcome.txt
Welcome !!!
You are on Welcome to Biologie Folder on SERVER02
[aline@SERVER01 ~]$ echo TEST3 > /remote/Biologie/Test.txt
[aline@SERVER01 ~]$ cat /remote/Biologie/Test.txt
TEST3
[aline@SERVER01 ~]$ ls -l /remote/Physique/
ls: cannot open directory '/remote/Physique/': Permission denied
[aline@SERVER01 ~]$ ls -l /remote/Chimie/
ls: cannot open directory '/remote/Chimie/': Permission denied

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)
SERVER02.room42.company.org:/shares/Physique on /remote/Physique type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,local_lock=none,addr=172.25.250.11)

SERVER02.room42.company.org:/shares/Biologie on /remote/Biologie type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,local_lock=none,addr=172.25.250.11)

SERVER02.room42.company.org:/shares/Chimie on /remote/Chimie type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,local_lock=none,addr=172.25.250.11)

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)

> Partager <