15/11/2024

Commandes et Système

CentOS 7 : Le nouveau mode mono-utilisateur

I. Présentation

Fini le temps où il suffisait d’ajouter "1" en fin de ligne de la commande GRUB de démarrage du système GNU/Linux. Et oui, les choses se sont légèrement compliquées, la faute à l’arrivée de Grub 2.0. Vous l’aurez compris, dans ce billet je vais vous présenter la méthode permettant de booter vos chers serveurs Linux CentOS7 en mode utilisateur simple aussi appelé "Single User".

Mais, avant de commencer, faisons un petit rappel de ce qu’est Grub et des différents modes de démarrage du système d’exploitation GNU/Linux et du noyau linux. Le démarreur GRUB (abrégé de GRand Unified Bootloader) est un programme d’amorçage et qui trouve son utilité lors de la phase de démarrage des serveurs :

Une fois que le noyau Linux (aussi appelé kernel), est démarré, celui-ci charge alors le programme /sbin/init et l’exécute. Comme ce programme est le premier  à être exécuté sur le système d’exploitation, son numéro d’identification (ou PID) porte le n°1. C’est le code initrd qui fournit le système minimal pouvant ensuite charger le système principal ou d’autres systèmes sans disque (également appelé diskless). Cela permet de disposer alors des modules minimaux du noyau pour fournir aux différents périphériques du système  principal, leur environnement de fonctionnement optimum.

La dernière étape lors du démarrage d’une machine consiste à consulter le niveau d’exécution via la commande :

# systemctl get-default
graphical.target

On dispose alors des niveaux suivants :

  • Niveau 0 : arrêt de la machine
  • Niveau 1 : mode mono-utilisateur (single user)
  • Niveau 2 : mode multi-utilisateurs (sans application)
  • Niveau 3 : mode multi-utilisateurs (avec applications ð aussi appelé multi-user)
  • Niveau 4 : mode inutilisé pouvant servir à X11
  • Niveau 5 : mode graphique (aussi appelé graphical)
  • Niveau 6 : mode démarrage de la machine

La commande systemctl utilisée avec l’option set-default permet également de fixer le niveau de démarrage souhaité. On rappelle également que ce niveau par défaut, détermine les scripts exécutés lors de la phase de démarrage. Au niveau d’un système GNU/Linux, les niveaux les plus utilisés sont :

  • Niveau 3 pour le mode multi-utilisateurs, sans Window Manager
  • Niveau 5 pour le mode multi-utilisateurs avec interface graphique

II. Le runlevel

Comme on vient de le voir, lorsque le système GNU/Linux démarre, on s’aperçoit qu’il existe plusieurs services qui sont simultanément chargés sur le système. Il s’agit des programmes du niveau d’exécution qui sont chargés à partir du répertoire représentant le niveau d’exécution du système. Soit :

  • Runlevel 0 :     /etc/rc.d/rc0.d/
  • Runlevel 1 :     /etc/rc.d/rc1.d/
  • Runlevel 2 :     /etc/rc.d/rc2.d/
  • Runlevel 3 :     /etc/rc.d/rc3.d/
  • Runlevel 4 :     /etc/rc.d/rc4.d/
  • Runlevel 5 :     /etc/rc.d/rc5.d/
  • Runlevel 6 :     /etc/rc.d/rc6.d/

Dans ces répertoires, on retrouve (théoriquement), les noms des programmes commençant par S (pour Startup) ou K (pour Kill). Les premiers sont exécutés lors de la phase de démarrage du serveur et les autres, lors de la phase d’arrêt. Les chiffres portés par les programmes (qu’il s’agisse des programmes d’arrêt ou de démarrage) servent d’indication de l’ordre d’exécution de chaque script.

Exemple : pour le niveau 5 :

On voit ici, que lors de l’arrêt le script K50netconsole sera exécuté alors que durant la phase de démarrage, les scripts Sxx seront initialisés dans l’ordre de leur numéro d’identification :

  • S03vmware-tools
  • S10network
  • S20electronServer

III. Le mode mono-utilisateur

Pour en revenir à notre niveau de démarrage mono-utilisateur, que l’on appelle mode single user, sur un système CentOS 7 il faut au moment du démarrage de la machine prendre la main sur l’image du noyau, en utilisant la séquence de touches [ TAB ] et ‘e’ pour éditer les fonctions de GRUB :

Il faut alors déplacer le curseur  pour se positionner sur la ligne linux ou linux16 décrit dans la capture suivante et remplacer ‘ro’ par ‘rw init=/sysroot/bin/sh’ :

Une fois que cela est fait, il faut alors exécuter la séquence de touches [ CTRL ] + ‘x’ pour pouvoir enregistrer temporairement la modification, et effectuer le démarrage en mode mono-utilisateur. On entre alors dans un mode console, en ligne de commandes avec le privilège root, sans avoir à saisir de mot de passe (sauf si on en a mis un sur le bootloader GRUB) :

ATTENTION : le système est protégé par un montage en chroot. Il faut donc exécuter la commande suivante pour pouvoir utiliser le système d’exploitation sous-jacent :

# chroot /sysroot

IV. Conclusion

Dès lors que l’on s’est positionné dans le chroot, on peut alors utiliser les commandes habituelles de vérification de table de montage /etc/fstab, de modification du mot de passe root, via la commande passwd, ou toute autre correction sur le système, suite à un problème.

Voilà, j’espère que ce petit tutoriel vous servira le moins souvent, car démarrer un serveur en mode mono-utilisateur est toujours synonyme de problème. Mais, cela peut vous faire gagner du temps de savoir comment faire, surtout qu’en général, dans ce genre de cas, on se trouve déjà en stress, ce n’est pas la peine d’en rajouter !

author avatar
Philippe PIERRE
A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.