Recherche de site Web

Comment définir l’ordre de montage des systèmes de fichiers sur les distributions Linux modernes


Dans un tutoriel précédent, nous avons discuté du fichier /etc/fstab et de la façon dont il est utilisé pour déclarer les systèmes de fichiers qui doivent être montés au démarrage. À l’époque pré-Systemd, le système de fichiers était monté dans l’ordre spécifié dans le fichier /etc/fstab ; sur les distributions Linux modernes, en revanche, pour un démarrage plus rapide, les systèmes de fichiers sont montés en parallèle. Systemd gère le montage des systèmes de fichiers via des unités spécialement conçues et générées automatiquement à partir des entrées /etc/fstab. Pour ces raisons, une stratégie différente doit être adoptée pour établir la dépendance entre deux systèmes de fichiers, et donc pour définir leur ordre de montage correct.

Dans ce tutoriel, nous voyons comment établir une dépendance explicite entre deux systèmes de fichiers et définir leur ordre de montage sur les distributions Linux modernes.

Dans ce tutoriel, vous allez apprendre :

  • Comment les entrées du fichier /etc/fstab sont transformées en unités de montage Systemd
  • Comment les unités de montage Systemd sont structurées
  • Comment établir une dépendance entre deux systèmes de fichiers dans /etc/fstab

Unités « mount » Systemd

systemd est le système d’initialisation adopté sur pratiquement toutes les principales distributions Linux. Systemd fait bien plus que simplement gérer l’initialisation du système au sens traditionnel du terme. Sur les distributions Linux modernes, il gère également le montage du système de fichiers via des unités « mount », qui sont similaires aux unités « service » utilisées pour gérer les services. La façon traditionnelle de définir quels systèmes de fichiers doivent être montés au démarrage était d’utiliser le fichier fstab. Bien que cette méthode fonctionne toujours, les entrées fstab sont transformées en unités « mount » par systemd-fstab-generator et « stockées » dans le répertoire /run/systemd/generator.

Anatomie d’une unité de montage

Les unités de montage ont le suffixe « .mount » et doivent être nommées d’après le point de montage qu’elles contrôlent. Une unité utilisée pour monter le système de fichiers qui doit être monté dans le répertoire /home, par exemple, doit être nommée « home.mount ».  Voyons un exemple de la façon dont les unités de montage sont générées à partir d’entrées dans fstab. Dans le fichier /etc/fstab, j’ai configuré un système de fichiers à monter sur /home :

/dev/sda3 /home ext4 defaults 1 2

Pour les besoins de cet exemple, le système de fichiers a été créé sur la partition /dev/sda3. Il s’agit d’un système de fichiers « ext4 » configuré pour être monté sur /home avec les options « par défaut ». Ci-dessous, vous pouvez voir l’unité « .mount » correspondante générée par systemd-fstab-generator sous la forme /run/systemd/generator/home.mount :

Automatically generated by systemd-fstab-generator

[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
Before=local-fs.target
Requires=systemd-fsck@dev-sda3.service
After=systemd-fsck@dev-sda3.service
After=blockdev@dev-sda3.target

[Mount]
What=/dev/sda3
Where=/home
Type=ext4

La première chose que nous voyons dans le fichier est un commentaire indiquant que l’unité a été générée automatiquement par systemd-fstab-generator. Nous pouvons observer que l’unité a deux sections : [Unité] et [Monter].

La strophe [Unit] contient des informations génériques sur l’unité : elle est commune à tous les types d’unités systemd. Le mot-clé Documentation est utilisé pour référencer la documentation relative à l’unité (dans ce cas, la page de manuel de fstab et le system-fstab-generator).

Le mot-clé SourcePath, en revanche, est utilisé pour référencer la source à partir de laquelle l’unité a été générée, qui dans ce cas est le fichier /etc/fstab.

Les mots-clés Before, After et Requires permettent d’établir les dépendances unitaires et leur ordre. Par exemple, en utilisant Before=local-fs.target, il est établi qu’avant que le système puisse atteindre le « local-fs.target », l’unité doit être exécutée (le mot-clé After fonctionne de la manière opposée : pour que l’unité soit démarrée, les unités mentionnées doivent être complètement démarrées).

La strophe [Mount] est spécifique aux unités « .mount ». Dans ce cas, il contient trois mots-clés : Quoi, Où et Type. Le premier mot-clé est utilisé pour référencer le chemin complet de la ressource qui doit être montée, le second prend le chemin absolu du point de montage où la ressource doit être montée en tant que valeur ; La troisième est utilisée pour spécifier le type de système de fichiers.

Établissement des dépendances et de l’ordre de montage dans /etc/fstab

Dans quels cas peut-on vouloir établir une dépendance entre deux systèmes de fichiers ? Supposons que nous ayons un système de fichiers que nous montons dans le répertoire /home, et un autre contenant des données utilisateur spécifiques que nous voulons monter dans un sous-répertoire de son répertoire home (par exemple : /home/egdoc/data). Cette configuration établit une « dépendance » entre les deux systèmes de fichiers, car pour que le second soit monté avec succès, le premier doit déjà être monté.

Dans ce cas, puisque le deuxième point de montage est en dessous du premier, nous ne devrions rien faire de spécial. Systemd est assez intelligent pour établir une dépendance entre les deux systèmes de fichiers, donc dans le fichier fstab, nous écririons simplement :

/dev/sda3 /home ext4 defaults 1 2
/dev/sda4 /home/egdoc/data ext4 defaults 1 2

Que se passe-t-il si nous voulons établir explicitement une dépendance entre deux systèmes de fichiers avec des points de montage « non liés » ? Pour accomplir cette tâche, nous devons utiliser l’option x-systemd.requires-mounts-for. Cette option prend un chemin absolu en tant que valeur et établit une dépendance entre le système de fichiers pour lequel elle est utilisée et le fileystem utilisé pour le point de montage passé en tant que valeur.

Voyons un exemple. Supposons que, pour une raison quelconque, nous voulions que le système de fichiers monté sur /home soit monté après celui monté sur /boot (ce que nous supposons ci-dessous être sur la partition /dev/sda2). Dans /etc/fstab, nous écririons :

/dev/sda2 /boot   ext4 defaults 1 2
/dev/sda3 /home ext4 defaults,x-systemd.requires-mounts-for=/boot 1 2

Pour que les unités de montage systemd soient régénérées immédiatement, nous pourrions exécuter :

sudo systemctl daemon-reload

À ce stade, si nous jetons un coup d’œil à l’unité /run/systemd/generator/home.mount, nous pouvons voir que l’option RequiresMountsFor=/boot a été incluse dans la strophe [Unit] :

Automatically generated by systemd-fstab-generator 

[Unit] 
Documentation=man:fstab(5) man:systemd-fstab-generator(8) 
SourcePath=/etc/fstab 
RequiresMountsFor=/boot 
Before=local-fs.target 
Requires=systemd-fsck@dev-sda3.service 
After=systemd-fsck@dev-sda3.service 
After=blockdev@dev-sda3.target 

[Mount]
What=/dev/sda3
Where=/home
Type=ext4
Options=defaults,x-systemd.requires-mounts-for=/boot

Conclusions

De nos jours, presque toutes les grandes distributions Linux ont (non sans controverse) adopté Systemd comme système d’initialisation. L’une des plus grandes critiques utilisées contre Systemd est qu’il fait bien plus que gérer l’initialisation du système. Dans ce cas, nous avons vu comment il gère également le montage des systèmes de fichiers au démarrage, via des unités spécifiques qui peuvent être écrites à partir de zéro ou générées automatiquement à partir du fichier traditionnel /etc/fstab. Comme le montage du système de fichiers n’est pas effectué de manière séquentielle au démarrage, nous avons vu dans ce tutoriel comment déclarer la dépendance entre deux systèmes de fichiers et définir leur ordre de montage correct à l’aide de l’option x-systemd.requires-mounts-for.

Articles connexes: