GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de la commande systemctl pour gérer les unités systemd

Dans les deux premiers articles de cette série, j'ai exploré la séquence de démarrage Linux systemd. Dans le premier article, j'ai examiné les fonctions et l'architecture de systemd et la controverse autour de son rôle en remplacement de l'ancien programme d'initialisation SystemV et des scripts de démarrage. Et dans le deuxième article, j'ai examiné deux outils systemd importants, systemctl et journalctl, et j'ai expliqué comment passer d'une cible à une autre et changer la cible par défaut.

Dans ce troisième article, j'examinerai plus en détail les unités systemd et comment utiliser la commande systemctl pour explorer et gérer les unités. J'expliquerai également comment arrêter et désactiver des unités et comment créer une nouvelle unité de montage systemd pour monter un nouveau système de fichiers et lui permettre de démarrer au démarrage.

Préparation

En savoir plus sur les administrateurs système

  • Activer le blog Sysadmin
  • L'entreprise automatisée :un guide pour gérer l'informatique avec l'automatisation
  • Livre électronique :Automatisation Ansible pour les administrateurs système
  • Témoignages du terrain :guide de l'administrateur système sur l'automatisation informatique
  • eBook :Un guide de Kubernetes pour les SRE et les administrateurs système
  • Derniers articles sur l'administrateur système

Toutes les expériences de cet article doivent être effectuées en tant qu'utilisateur root (sauf indication contraire). Certaines des commandes qui répertorient simplement diverses unités systemd peuvent être exécutées par des utilisateurs non root, mais les commandes qui apportent des modifications ne le peuvent pas. Assurez-vous d'effectuer tous ces tests uniquement sur des hôtes hors production ou des machines virtuelles (VM).

L'une de ces expériences nécessite le package sysstat, installez-le donc avant de continuer. Pour Fedora et les autres distributions basées sur Red Hat, vous pouvez installer sysstat avec :

dnf -y install sysstat

Le RPM sysstat installe plusieurs outils statistiques qui peuvent être utilisés pour l'identification des problèmes. L'un est le rapport d'activité du système (SAR), qui enregistre de nombreux points de données de performances du système à intervalles réguliers (toutes les 10 minutes par défaut). Plutôt que de s'exécuter en tant que démon en arrière-plan, le package sysstat installe deux minuteries systemd. Une minuterie s'exécute toutes les 10 minutes pour collecter des données, et l'autre s'exécute une fois par jour pour agréger les données quotidiennes. Dans cet article, j'examinerai brièvement ces minuteurs, mais attendons d'expliquer comment créer un minuteur dans un prochain article.

suite systemd

Le fait est que systemd est plus qu'un simple programme. Il s'agit d'une vaste suite de programmes tous conçus pour fonctionner ensemble afin de gérer presque tous les aspects d'un système Linux en cours d'exécution. Une exposition complète de systemd prendrait un livre à elle seule. La plupart d'entre nous n'ont pas besoin de comprendre tous les détails sur la façon dont tous les composants de systemd s'emboîtent, je vais donc me concentrer sur les programmes et les composants qui vous permettent de gérer divers services Linux et de gérer les fichiers journaux et les journaux.

Structure pratique

La structure de systemd - en dehors de ses fichiers exécutables - est contenue dans ses nombreux fichiers de configuration. Bien que ces fichiers aient des noms et des extensions d'identifiant différents, ils sont tous appelés fichiers "unités". Les unités sont la base de tout systemd.

Les fichiers d'unité sont des fichiers en texte brut ASCII qui sont accessibles et peuvent être créés ou modifiés par un administrateur système. Il existe un certain nombre de types de fichiers d'unité, et chacun a sa propre page de manuel. La figure 1 répertorie certains de ces types de fichiers unitaires par leurs extensions de nom de fichier et une brève description de chacun.

unité systemd Description
.automount Le .automount les unités sont utilisées pour implémenter à la demande (c'est-à-dire plug and play) et le montage d'unités de système de fichiers en parallèle lors du démarrage.
.appareil Le .device les fichiers d'unité définissent le matériel et les périphériques virtuels qui sont exposés à l'administrateur système dans le répertoire /dev/ . Tous les appareils n'ont pas de fichiers d'unité; généralement, les périphériques de blocage tels que les disques durs, les périphériques réseau et certains autres ont des fichiers d'unité.
.mount Le .mount unit définit un point de montage sur la structure de répertoires du système de fichiers Linux.
.scope Le .scope définit et gère un ensemble de processus système. Cette unité n'est pas configurée à l'aide de fichiers d'unité, elle est plutôt créée par programmation. Selon systemd.scope page de manuel, "L'objectif principal des unités de portée est de regrouper les processus de travail d'un service système pour l'organisation et la gestion des ressources."
.service Le .service les fichiers d'unité définissent les processus gérés par systemd. Ceux-ci incluent des services tels que crond cups (Common Unix Printing System), iptables, des services de gestion de volumes logiques multiples (LVM), NetworkManager, etc.
.slice Le .slice L'unité définit une "tranche", qui est une division conceptuelle des ressources système liées à un groupe de processus. Vous pouvez considérer toutes les ressources système comme un gâteau et ce sous-ensemble de ressources comme une "part" de ce gâteau.
.socket Le .socket les unités définissent les sockets de communication interprocessus, tels que les sockets réseau.
.swap Le .swap les unités définissent des périphériques ou des fichiers d'échange.
.target La .cible Les unités définissent des groupes de fichiers d'unité qui définissent les points de synchronisation de démarrage, les niveaux d'exécution et les services. Les unités cibles définissent les services et autres unités qui doivent être actifs pour démarrer avec succès.
.timer Le .timer l'unité définit les temporisateurs qui peuvent lancer l'exécution du programme à des moments spécifiés.

systemctl

J'ai examiné les fonctions de démarrage de systemd dans le deuxième article, et ici j'explorerai un peu plus ses fonctions de gestion des services. systemd fournit le systemctl commande utilisée pour démarrer et arrêter les services, les configurer pour qu'ils se lancent (ou non) au démarrage du système et surveiller l'état actuel des services en cours d'exécution.

Dans une session de terminal en tant qu'utilisateur root, assurez-vous que le répertoire personnel de root ( ~ ) est le PWD. Pour commencer à regarder les unités de différentes manières, répertoriez toutes les unités systemd chargées et actives. systemctl dirige automatiquement son flux de données stdout via le moins téléavertisseur, vous n'avez donc pas à :

[root@testvm1 ~]# systemctl
UNIT                                       LOAD   ACTIVE SUB       DESCRIPTION              
proc-sys-fs-binfmt_misc.automount          loaded active running   Arbitrary Executable File>
sys-devices-pci0000:00-0000:00:01.1-ata7-host6-target6:0:0-6:0:0:0-block-sr0.device loaded a>
sys-devices-pci0000:00-0000:00:03.0-net-enp0s3.device loaded active plugged   82540EM Gigabi>
sys-devices-pci0000:00-0000:00:05.0-sound-card0.device loaded active plugged   82801AA AC'97>
sys-devices-pci0000:00-0000:00:08.0-net-enp0s8.device loaded active plugged   82540EM Gigabi>
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loa>
sys-devices-pci0000:00-0000:00:0d.0-ata1-host0-target0:0:0-0:0:0:0-block-sda-sda2.device loa>
<snip – removed lots of lines of data from here>

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

206 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Lorsque vous faites défiler les données dans votre session de terminal, recherchez des éléments spécifiques. La première section répertorie les périphériques tels que les disques durs, les cartes son, les cartes d'interface réseau et les périphériques TTY. Une autre section montre les points de montage du système de fichiers. D'autres sections incluent divers services et une liste de toutes les cibles chargées et actives.

Les temporisateurs sysstat au bas de la sortie sont utilisés pour collecter et générer des résumés quotidiens de l'activité du système pour SAR. SAR est un outil de résolution de problèmes très utile. (Vous pouvez en savoir plus à ce sujet dans le chapitre 13 de mon livre Using and Administering Linux:Volume 1, Zero to SysAdmin:Getting Started .)

Tout en bas, trois lignes décrivent la signification des statuts (chargé, actif et sous). Appuyez sur q pour quitter le téléavertisseur.

Utilisez la commande suivante (comme suggéré dans la dernière ligne de la sortie ci-dessus) pour voir toutes les unités installées, qu'elles soient chargées ou non. Je ne reproduirai pas la sortie ici, car vous pouvez la parcourir vous-même. Le programme systemctl dispose d'une excellente fonction de complétion par tabulation qui facilite la saisie de commandes complexes sans avoir à mémoriser toutes les options :

[root@testvm1 ~]# systemctl list-unit-files

Vous pouvez voir que certaines unités sont désactivées. Le tableau 1 de la page de manuel de systemctl répertorie et fournit de brèves descriptions des entrées que vous pourriez voir dans cette liste. Utilisez le -t (type) option pour afficher uniquement les unités de minuterie :

[root@testvm1 ~]# systemctl list-unit-files -t timer
UNIT FILE                    STATE  
[email protected]         disabled
dnf-makecache.timer          enabled
fstrim.timer                 disabled
logrotate.timer              disabled
logwatch.timer               disabled
[email protected]     static  
mlocate-updatedb.timer       enabled
sysstat-collect.timer        enabled
sysstat-summary.timer        enabled
systemd-tmpfiles-clean.timer static  
unbound-anchor.timer         enabled

Vous pourriez faire la même chose avec cette alternative, qui fournit beaucoup plus de détails :

[root@testvm1 ~]# systemctl list-timers
Thu 2020-04-16 09:06:20 EDT  3min 59s left n/a                          n/a           systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Thu 2020-04-16 10:02:01 EDT  59min left    Thu 2020-04-16 09:01:32 EDT  49s ago       dnf-makecache.timer          dnf-makecache.service
Thu 2020-04-16 13:00:00 EDT  3h 57min left n/a                          n/a           sysstat-collect.timer        sysstat-collect.service
Fri 2020-04-17 00:00:00 EDT  14h left      Thu 2020-04-16 12:51:37 EDT  3h 49min left mlocate-updatedb.timer       mlocate-updatedb.service
Fri 2020-04-17 00:00:00 EDT  14h left      Thu 2020-04-16 12:51:37 EDT  3h 49min left unbound-anchor.timer         unbound-anchor.service
Fri 2020-04-17 00:07:00 EDT  15h left      n/a                          n/a           sysstat-summary.timer        sysstat-summary.service

6 timers listed.
Pass --all to see loaded but inactive timers, too.
[root@testvm1 ~]#

Bien qu'il n'y ait pas d'option pour effectuer des montages de liste systemctl, vous pouvez lister les fichiers d'unité de point de montage :

[root@testvm1 ~]# systemctl list-unit-files -t mount
UNIT FILE                     STATE    
-.mount                       generated
boot.mount                    generated
dev-hugepages.mount           static  
dev-mqueue.mount              static  
home.mount                    generated
proc-fs-nfsd.mount            static  
proc-sys-fs-binfmt_misc.mount disabled
run-vmblock\x2dfuse.mount     disabled
sys-fs-fuse-connections.mount static  
sys-kernel-config.mount       static  
sys-kernel-debug.mount        static  
tmp.mount                     generated
usr.mount                     generated
var-lib-nfs-rpc_pipefs.mount  static  
var.mount                     generated

15 unit files listed.
[root@testvm1 ~]#

La colonne STATE de ce flux de données est intéressante et nécessite quelques explications. Les états "générés" indiquent que l'unité de montage a été générée à la volée lors du démarrage à l'aide des informations contenues dans /etc/fstab . Le programme qui génère ces unités de montage est /lib/systemd/system-generators/systemd-fstab-generator, ainsi que d'autres outils qui génèrent un certain nombre d'autres types d'unités. Les unités de montage "statiques" sont pour les systèmes de fichiers comme /proc et /sys , et les fichiers correspondants se trouvent dans le répertoire /usr/lib/systemd/system répertoire.

Maintenant, regardez les unités de service. Cette commande affichera tous les services installés sur l'hôte, qu'ils soient actifs ou non :

[root@testvm1 ~]# systemctl --all -t service

Le bas de cette liste d'unités de service affiche 166 comme le nombre total d'unités chargées sur mon hôte. Votre numéro sera probablement différent.

Les fichiers d'unité n'ont pas d'extension de nom de fichier (comme .unit ) pour aider à les identifier, vous pouvez donc généraliser que la plupart des fichiers de configuration appartenant à systemd sont des fichiers unitaires d'un type ou d'un autre. Les quelques fichiers restants sont principalement .conf fichiers situés dans /etc/systemd .

Les fichiers d'unité sont stockés dans /usr/lib/systemd répertoire et ses sous-répertoires, tandis que le répertoire /etc/systemd/ répertoire et ses sous-répertoires contiennent des liens symboliques vers les fichiers unitaires nécessaires à la configuration locale de cet hôte.

Pour explorer cela, créez /etc/systemd le PWD et lister son contenu. Créez ensuite /etc/systemd/system le PWD et lister son contenu, et lister le contenu d'au moins quelques sous-répertoires du PWD actuel.

Jetez un œil à la default.target fichier, qui détermine sur quelle cible de niveau d'exécution le système démarrera. Dans le deuxième article de cette série, j'ai expliqué comment changer la cible par défaut de l'interface graphique (graphical.target ) à la ligne de commande uniquement (multi-user.target ) cibler. La cible par défaut le fichier sur ma machine virtuelle de test est simplement un lien symbolique vers /usr/lib/systemd/system/graphical.target .

Prenez quelques minutes pour examiner le contenu de /etc/systemd/system/default.target fichier :

[root@testvm1 system]# cat default.target 
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes

Notez que cela nécessite le multi-user.target; la cible.graphique ne peut pas démarrer si le multi-user.target n'est pas déjà opérationnel. Il dit également qu'il "veut" le display-manager.service unité. Un "désir" n'a pas besoin d'être satisfait pour que l'unité démarre avec succès. Si le "vouloir" ne peut pas être satisfait, il sera ignoré par systemd, et le reste de la cible démarrera malgré tout.

Les sous-répertoires dans /etc/systemd/system sont des listes de désirs pour diverses cibles. Prenez quelques minutes pour explorer les fichiers et leur contenu dans /etc/systemd/system/graphical.target.wants répertoire.

Le systemd.unit La page de manuel contient de nombreuses informations utiles sur les fichiers d'unité, leur structure, les sections dans lesquelles ils peuvent être divisés et les options qui peuvent être utilisées. Il répertorie également de nombreux types d'unités, qui ont tous leurs propres pages de manuel. Si vous souhaitez interpréter un fichier d'unité, ce serait un bon point de départ.

Unités de service

Une installation Fedora installe et active généralement des services dont certains hôtes n'ont pas besoin pour un fonctionnement normal. À l'inverse, il arrive parfois qu'il n'inclue pas les services qui doivent être installés, activés et démarrés. Les services qui ne sont pas nécessaires pour que l'hôte Linux fonctionne comme souhaité, mais qui sont installés et éventuellement en cours d'exécution, représentent un risque de sécurité et doivent, au minimum, être arrêtés et désactivés et, au mieux, doivent être désinstallés.

La commande systemctl est utilisée pour gérer les unités systemd, y compris les services, les cibles, les montages, etc. Examinez de plus près la liste des services pour identifier les services qui ne seront jamais utilisés :

[root@testvm1 ~]# systemctl --all -t service
UNIT                           LOAD      ACTIVE SUB        DESCRIPTION                            
<snip>
chronyd.service                loaded    active running    NTP client/server                      
crond.service                  loaded    active running    Command Scheduler                      
cups.service                   loaded    active running    CUPS Scheduler                          
dbus-daemon.service            loaded    active running    D-Bus System Message Bus                
<snip>
● ip6tables.service           not-found inactive dead     ip6tables.service                  
● ipset.service               not-found inactive dead     ipset.service                      
● iptables.service            not-found inactive dead     iptables.service                    
<snip>
firewalld.service              loaded    active   running  firewalld - dynamic firewall daemon
<snip>
● ntpd.service                not-found inactive dead     ntpd.service                        
● ntpdate.service             not-found inactive dead     ntpdate.service                    
pcscd.service                  loaded    active   running  PC/SC Smart Card Daemon

J'ai supprimé la majeure partie de la sortie de la commande pour économiser de l'espace. Les services qui affichent "l'exécution active chargée" sont évidents. Les services "non trouvés" sont ceux que systemd connaît mais qui ne sont pas installés sur l'hôte Linux. Si vous souhaitez exécuter ces services, vous devez installer les packages qui les contiennent.

Notez le pcscd.service unité. Il s'agit du démon de carte à puce PC/SC. Sa fonction est de communiquer avec les lecteurs de cartes à puce. De nombreux hôtes Linux, y compris les machines virtuelles, n'ont pas besoin de ce lecteur ni du service qui est chargé et qui consomme de la mémoire et des ressources CPU. Vous pouvez arrêter ce service et le désactiver, afin qu'il ne redémarre pas au prochain démarrage. Vérifiez d'abord son état :

[root@testvm1 ~]# systemctl status pcscd.service
● pcscd.service - PC/SC Smart Card Daemon
   Loaded: loaded (/usr/lib/systemd/system/pcscd.service; indirect; vendor preset: disabled)
   Active: active (running) since Fri 2019-05-10 11:28:42 EDT; 3 days ago
     Docs: man:pcscd(8)
 Main PID: 24706 (pcscd)
    Tasks: 6 (limit: 4694)
   Memory: 1.6M
   CGroup: /system.slice/pcscd.service
           └─24706 /usr/sbin/pcscd --foreground --auto-exit

May 10 11:28:42 testvm1 systemd[1]: Started PC/SC Smart Card Daemon.

Ces données illustrent les informations supplémentaires fournies par systemd par rapport à SystemV, qui indique uniquement si le service est en cours d'exécution ou non. Notez que spécifier le .service le type d'unité est facultatif. Maintenant, arrêtez et désactivez le service, puis revérifiez son état :

[root@testvm1 ~]# systemctl stop pcscd ; systemctl disable pcscd
Warning: Stopping pcscd.service, but it can still be activated by:
  pcscd.socket
Removed /etc/systemd/system/sockets.target.wants/pcscd.socket.
[root@testvm1 ~]# systemctl status pcscd
● pcscd.service - PC/SC Smart Card Daemon
   Loaded: loaded (/usr/lib/systemd/system/pcscd.service; indirect; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2019-05-13 15:23:15 EDT; 48s ago
     Docs: man:pcscd(8)
 Main PID: 24706 (code=exited, status=1/FAILURE)

May 10 11:28:42 testvm1 systemd[1]: Started PC/SC Smart Card Daemon.
May 13 15:23:15 testvm1 systemd[1]: Stopping PC/SC Smart Card Daemon...
May 13 15:23:15 testvm1 systemd[1]: pcscd.service: Main process exited, code=exited, status=1/FAIL>
May 13 15:23:15 testvm1 systemd[1]: pcscd.service: Failed with result 'exit-code'.
May 13 15:23:15 testvm1 systemd[1]: Stopped PC/SC Smart Card Daemon.

L'affichage court des entrées de journal pour la plupart des services évite d'avoir à rechercher dans divers fichiers journaux pour localiser ce type d'informations. Vérifiez l'état des cibles de niveau d'exécution du système. La spécification du type d'unité "cible" est obligatoire :

[root@testvm1 ~]# systemctl status multi-user.target
● multi-user.target - Multi-User System
   Loaded: loaded (/usr/lib/systemd/system/multi-user.target; static; vendor preset: disabled)
   Active: active since Thu 2019-05-09 13:27:22 EDT; 4 days ago
     Docs: man:systemd.special(7)

May 09 13:27:22 testvm1 systemd[1]: Reached target Multi-User System.
[root@testvm1 ~]# systemctl status graphical.target
● graphical.target - Graphical Interface
   Loaded: loaded (/usr/lib/systemd/system/graphical.target; indirect; vendor preset: disabled)
   Active: active since Thu 2019-05-09 13:27:22 EDT; 4 days ago
     Docs: man:systemd.special(7)

May 09 13:27:22 testvm1 systemd[1]: Reached target Graphical Interface.
[root@testvm1 ~]# systemctl status default.target
● graphical.target - Graphical Interface
   Loaded: loaded (/usr/lib/systemd/system/graphical.target; indirect; vendor preset: disabled)
   Active: active since Thu 2019-05-09 13:27:22 EDT; 4 days ago
     Docs: man:systemd.special(7)

May 09 13:27:22 testvm1 systemd[1]: Reached target Graphical Interface.

La cible par défaut est la cible graphique. Le statut de n'importe quelle unité peut être vérifié de cette manière.

Monte à l'ancienne

Une unité de montage définit tous les paramètres requis pour monter un système de fichiers sur un point de montage désigné. systemd peut gérer les unités de montage avec plus de flexibilité que celles utilisant /etc/fstab fichier de configuration du système de fichiers. Malgré cela, systemd utilise toujours le /etc/fstab fichier à des fins de configuration et de montage du système de fichiers. systemd utilise le systemd-fstab-generator outil pour créer des unités de montage transitoires à partir des données du fstab fichier.

Je vais créer un nouveau système de fichiers et une unité de montage systemd pour le monter. Si vous avez de l'espace disque disponible sur votre système de test, vous pouvez le faire avec moi.

Notez que les noms de groupe de volumes et de volumes logiques peuvent être différents sur votre système de test. Veillez à utiliser les noms pertinents pour votre système.

Vous devrez créer une partition ou un volume logique, puis y créer un système de fichiers EXT4. Ajoutez une étiquette au système de fichiers, TestFS , et créez un répertoire pour un point de montage /TestFS .

Pour essayer cela par vous-même, vérifiez d'abord que vous disposez d'espace libre sur le groupe de volumes. Voici à quoi cela ressemble sur ma machine virtuelle où j'ai de l'espace disponible sur le groupe de volumes pour créer un nouveau volume logique :

[root@testvm1 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  120G  0 disk
├─sda1          8:1    0    4G  0 part /boot
└─sda2          8:2    0  116G  0 part
  ├─VG01-root 253:0    0    5G  0 lvm  /
  ├─VG01-swap 253:1    0    8G  0 lvm  [SWAP]
  ├─VG01-usr  253:2    0   30G  0 lvm  /usr
  ├─VG01-home 253:3    0   20G  0 lvm  /home
  ├─VG01-var  253:4    0   20G  0 lvm  /var
  └─VG01-tmp  253:5    0   10G  0 lvm  /tmp
sr0            11:0    1 1024M  0 rom  
[root@testvm1 ~]# vgs
  VG   #PV #LV #SN Attr   VSize    VFree  
  VG01   1   6   0 wz--n- <116.00g <23.00g

Créez ensuite un nouveau volume sur VG01 nommé TestFS . Il n'a pas besoin d'être grand; 1 Go c'est bien. Créez ensuite un système de fichiers, ajoutez l'étiquette du système de fichiers et créez le point de montage :

[root@testvm1 ~]# lvcreate -L 1G -n TestFS VG01
  Logical volume "TestFS" created.
[root@testvm1 ~]# mkfs -t ext4 /dev/mapper/VG01-TestFS
mke2fs 1.45.3 (14-Jul-2019)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 8718fba9-419f-4915-ab2d-8edf811b5d23
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

[root@testvm1 ~]# e2label /dev/mapper/VG01-TestFS TestFS
[root@testvm1 ~]# mkdir /TestFS

Maintenant, montez le nouveau système de fichiers :

[root@testvm1 ~]# mount /TestFS/
mount: /TestFS/: can't find in /etc/fstab.

Cela ne fonctionnera pas car vous n'avez pas d'entrée dans /etc/fstab . Vous pouvez monter le nouveau système de fichiers même sans l'entrée dans /etc/fstab en utilisant à la fois le nom de l'appareil (tel qu'il apparaît dans /dev ) et le point de montage. Le montage de cette manière est plus simple qu'auparavant - il nécessitait auparavant le type de système de fichiers comme argument. La commande mount est désormais suffisamment intelligente pour détecter le type de système de fichiers et le monter en conséquence.

Essayez à nouveau :

[root@testvm1 ~]# mount /dev/mapper/VG01-TestFS /TestFS/
[root@testvm1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  120G  0 disk
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0  116G  0 part
  ├─VG01-root   253:0    0    5G  0 lvm  /
  ├─VG01-swap   253:1    0    8G  0 lvm  [SWAP]
  ├─VG01-usr    253:2    0   30G  0 lvm  /usr
  ├─VG01-home   253:3    0   20G  0 lvm  /home
  ├─VG01-var    253:4    0   20G  0 lvm  /var
  ├─VG01-tmp    253:5    0   10G  0 lvm  /tmp
  └─VG01-TestFS 253:6    0    1G  0 lvm  /TestFS
sr0              11:0    1 1024M  0 rom  
[root@testvm1 ~]#

Maintenant, le nouveau système de fichiers est monté au bon endroit. Répertoriez les fichiers d'unité de montage :

[root@testvm1 ~]# systemctl list-unit-files -t mount

Cette commande n'affiche pas de fichier pour /TestFS système de fichiers car aucun fichier n'existe pour celui-ci. La commande systemctl status TestFS.mount n'affiche pas non plus d'informations sur le nouveau système de fichiers. Vous pouvez l'essayer en utilisant des caractères génériques avec le statut systemctl commande :

[root@testvm1 ~]# systemctl status *mount
● usr.mount - /usr
   Loaded: loaded (/etc/fstab; generated)
   Active: active (mounted)
    Where: /usr
     What: /dev/mapper/VG01-usr
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)

<SNIP>
● TestFS.mount - /TestFS
   Loaded: loaded (/proc/self/mountinfo)
   Active: active (mounted) since Fri 2020-04-17 16:02:26 EDT; 1min 18s ago
    Where: /TestFS
     What: /dev/mapper/VG01-TestFS

● run-user-0.mount - /run/user/0
   Loaded: loaded (/proc/self/mountinfo)
   Active: active (mounted) since Thu 2020-04-16 08:52:29 EDT; 1 day 5h ago
    Where: /run/user/0
     What: tmpfs

● var.mount - /var
   Loaded: loaded (/etc/fstab; generated)
   Active: active (mounted) since Thu 2020-04-16 12:51:34 EDT; 1 day 1h ago
    Where: /var
     What: /dev/mapper/VG01-var
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
    Tasks: 0 (limit: 19166)
   Memory: 212.0K
      CPU: 5ms
   CGroup: /system.slice/var.mount

Cette commande fournit des informations très intéressantes sur les montages de votre système et votre nouveau système de fichiers apparaît. Le /var et /usr les systèmes de fichiers sont identifiés comme étant générés à partir de /etc/fstab , tandis que votre nouveau système de fichiers indique simplement qu'il est chargé et fournit l'emplacement du fichier d'informations dans /proc/self/mountinfo fichier.

Ensuite, automatisez ce montage. Tout d'abord, faites-le à l'ancienne en ajoutant une entrée dans /etc/fstab . Plus tard, je vous montrerai comment procéder de la nouvelle manière, ce qui vous apprendra à créer des unités et à les intégrer dans la séquence de démarrage.

Démontez /TestFS et ajoutez la ligne suivante au /etc/fstab fichier :

/dev/mapper/VG01-TestFS  /TestFS       ext4    defaults        1 2

Maintenant, montez le système de fichiers avec le montage plus simple commande et liste à nouveau les unités de montage :

[root@testvm1 ~]# mount /TestFS
[root@testvm1 ~]# systemctl status *mount
<SNIP>
● TestFS.mount - /TestFS
   Loaded: loaded (/proc/self/mountinfo)
   Active: active (mounted) since Fri 2020-04-17 16:26:44 EDT; 1min 14s ago
    Where: /TestFS
     What: /dev/mapper/VG01-TestFS
<SNIP>

Cela n'a pas modifié les informations de ce montage car le système de fichiers a été monté manuellement. Redémarrez et exécutez à nouveau la commande, et cette fois spécifiez TestFS.mount plutôt que d'utiliser le caractère générique. Les résultats de ce montage sont désormais cohérents avec son montage au démarrage :

[root@testvm1 ~]# systemctl status TestFS.mount
● TestFS.mount - /TestFS
   Loaded: loaded (/etc/fstab; generated)
   Active: active (mounted) since Fri 2020-04-17 16:30:21 EDT; 1min 38s ago
    Where: /TestFS
     What: /dev/mapper/VG01-TestFS
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
    Tasks: 0 (limit: 19166)
   Memory: 72.0K
      CPU: 6ms
   CGroup: /system.slice/TestFS.mount

Apr 17 16:30:21 testvm1 systemd[1]: Mounting /TestFS...
Apr 17 16:30:21 testvm1 systemd[1]: Mounted /TestFS.

Création d'une unité de montage

Mount units may be configured either with the traditional /etc/fstab file or with systemd units. Fedora uses the fstab file as it is created during the installation. However, systemd uses the systemd-fstab-generator program to translate the fstab file into systemd units for each entry in the fstab dossier. Now that you know you can use systemd .mount unit files for filesystem mounting, try it out by creating a mount unit for this filesystem.

First, unmount /TestFS . Edit the /etc/fstab file and delete or comment out the TestFS line. Now, create a new file with the name TestFS.mount in the /etc/systemd/system annuaire. Edit it to contain the configuration data below. The unit file name and the name of the mount point must be identical, or the mount will fail:

# This mount unit is for the TestFS filesystem
# By David Both
# Licensed under GPL V2
# This file should be located in the /etc/systemd/system directory

[Unit]
Description=TestFS Mount

[Mount]
What=/dev/mapper/VG01-TestFS
Where=/TestFS
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

The Description line in the [Unit] section is for us humans, and it provides the name that's shown when you list mount units with systemctl -t mount . The data in the [Mount] section of this file contains essentially the same data that would be found in the fstab fichier.

Now enable the mount unit:

[root@testvm1 etc]# systemctl enable TestFS.mount
Created symlink /etc/systemd/system/multi-user.target.wants/TestFS.mount → /etc/systemd/system/TestFS.mount.

This creates the symlink in the /etc/systemd/system directory, which will cause this mount unit to be mounted on all subsequent boots. The filesystem has not yet been mounted, so you must "start" it:

[root@testvm1 ~]# systemctl start TestFS.mount

Verify that the filesystem has been mounted:

[root@testvm1 ~]# systemctl status TestFS.mount
● TestFS.mount - TestFS Mount
   Loaded: loaded (/etc/systemd/system/TestFS.mount; enabled; vendor preset: disabled)
   Active: active (mounted) since Sat 2020-04-18 09:59:53 EDT; 14s ago
    Where: /TestFS
     What: /dev/mapper/VG01-TestFS
    Tasks: 0 (limit: 19166)
   Memory: 76.0K
      CPU: 3ms
   CGroup: /system.slice/TestFS.mount

Apr 18 09:59:53 testvm1 systemd[1]: Mounting TestFS Mount...
Apr 18 09:59:53 testvm1 systemd[1]: Mounted TestFS Mount.

This experiment has been specifically about creating a unit file for a mount, but it can be applied to other types of unit files as well. The details will be different, but the concepts are the same. Yes, I know it is still easier to add a line to the /etc/fstab file than it is to create a mount unit. But this is a good example of how to create a unit file because systemd does not have generators for every type of unit.

In summary

This article looked at systemd units in more detail and how to use the systemctl command to explore and manage units. It also showed how to stop and disable units and create a new systemd mount unit to mount a new filesystem and enable it to initiate during startup.

In the next article in this series, I will take you through a recent problem I had during startup and show you how I circumvented it using systemd.

Resources

There is a great deal of information about systemd available on the internet, but much is terse, obtuse, or even misleading. In addition to the resources mentioned in this article, the following webpages offer more detailed and reliable information about systemd startup.

  • The Fedora Project has a good, practical guide to systemd. It has pretty much everything you need to know in order to configure, manage, and maintain a Fedora computer using systemd.
  • The Fedora Project also has a good cheat sheet that cross-references the old SystemV commands to comparable systemd ones.
  • For detailed technical information about systemd and the reasons for creating it, check out Freedesktop.org's description of systemd.
  • Linux.com's "More systemd fun" offers more advanced systemd information and tips.

There is also a series of deeply technical articles for Linux sysadmins by Lennart Poettering, the designer and primary developer of systemd. These articles were written between April 2010 and September 2011, but they are just as relevant now as they were then. Much of everything else good that has been written about systemd and its ecosystem is based on these papers.

  • Rethinking PID 1
  • systemd for Administrators, Part I
  • systemd for Administrators, Part II
  • systemd for Administrators, Part III
  • systemd for Administrators, Part IV
  • systemd for Administrators, Part V
  • systemd for Administrators, Part VI
  • systemd for Administrators, Part VII
  • systemd for Administrators, Part VIII
  • systemd for Administrators, Part IX
  • systemd for Administrators, Part X
  • systemd for Administrators, Part XI

Linux
  1. Une introduction à l'utilisation de tcpdump sur la ligne de commande Linux

  2. Gérer le démarrage à l'aide de systemd

  3. Utilisation de la force sur la ligne de commande Linux

  4. Utilisation de Stratis pour gérer le stockage Linux à partir de la ligne de commande

  5. Comment créer une base de données dans MySQL à l'aide de la ligne de commande

Apprenez à connaître votre système (en utilisant la ligne de commande)

Commandes Systemctl pour gérer le service Systemd

Utilisation de la commande GREP sous Linux avec des exemples

Débutants Linux :gérer les fichiers à l'aide du terminal sur CentOS 8

Tutoriel sur l'utilisation de la commande Timeout sous Linux

Tutoriel sur l'utilisation de la dernière commande dans le terminal Linux