Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Démarrage de Linux, services, noyau et périphériques
Extrait - Linux Préparation à la certification LPIC-1 (examens LPI 101 et LPI 102) - [7e édition]
Extraits du livre
Linux Préparation à la certification LPIC-1 (examens LPI 101 et LPI 102) - [7e édition] Revenir à la page d'achat du livre

Démarrage de Linux, services, noyau et périphériques

Prérequis et objectifs

1. Prérequis

Disposer du mot de passe root.

Savoir manipuler le shell.

Disposer d’un éditeur de texte.

Disposer d’un ou de plusieurs périphériques amovibles.

2. Objectifs

À la fin de ce chapitre, vous serez en mesure :

De comprendre le processus de démarrage.

De connaître le rôle du BIOS et de l’UEFI.

De paramétrer le chargeur de démarrage GRUB.

De comprendre le chargement du noyau et du disque virtuel initrd.

De contrôler le fonctionnement du processus init et le rôle de /etc/inittab.

De gérer les services et les niveaux d’exécution System V et upstart.

De gérer le système d’initialisation et les services systemd.

De consulter les logs du système.

De gérer le noyau et ses modules.

De modifier les paramètres dynamiques du noyau.

De comprendre les fichiers périphériques.

De lister les ressources matérielles de sa machine.

De comprendre le support de l’USB et des périphériques amovibles.

De connaître le principe des règles udev.

Processus de démarrage

Le démarrage du système a pour but de charger le noyau Linux, de monter les systèmes de fichiers nécessaires puis de démarrer les différents services pour permettre aux applications d’accéder aux ressources de la machine et de répondre aux demandes des utilisateurs.

La mise en route de la machine ou le redémarrage complet du système enclenche un processus enchaînant plusieurs phases décrites dans ce chapitre.

1. Le BIOS et l’UEFI

Ces deux interfaces alternatives ont pour fonction de localiser et de charger en mémoire le gestionnaire d’amorçage de Linux.

a. BIOS

Le BIOS (Basic Input Output System) est une interface logicielle de bas niveau entre le matériel et le logiciel. Il fournit l’ensemble des instructions de base utilisées par le système d’exploitation et les pilotes de périphériques.

Le BIOS est stocké dans une mémoire EEPROM (Electrical Erasable Programmable Read-Only Memory) de l’ordinateur. Quand l’ordinateur est électriquement allumé, ou lors d’un redémarrage, un signal appelé powergood est envoyé au microprocesseur. Celui-ci déclenche alors l’exécution du BIOS.

Le BIOS effectue un autotest (POST) puis recherche les périphériques. Les informations sur le matériel sont stockées de manière permanente dans une petite mémoire CMOS alimentée par une batterie. À la fin du processus, le périphérique de démarrage est sélectionné.

Le BIOS lit et exécute le premier secteur physique du média de démarrage. Il s’agit généralement des 512 premiers octets du premier disque dur (le MBR) ou de la partition active (le PBR) si aucun code n’est présent dans le MBR.

b. UEFI

Le successeur du BIOS se nomme UEFI (Unified Extensible Firmware Interface), succédant lui-même à EFI. La grande majorité des PC et cartes mères vendues depuis le début des années 2010 disposent de UEFI par défaut. Linux est compatible UEFI.

UEFI est un composant logiciel faisant l’interface entre le micrologiciel (firmware) du matériel et le système d’exploitation. Il garantit l’indépendance...

init System V

Le mode de démarrage du système init System V (SysVinit), d’origine Unix, a été le plus souvent remplacé par systemd dans les distributions récentes. Cependant, ce mode de démarrage du système fait partie des compétences nécessaires à la certification LPIC-1. D’autre part, il est possible d’avoir à administrer des serveurs de production fonctionnant encore avec ce mode de démarrage.

1. Rôle d’init

Le programme init, premier démarré et dernier stoppé au sein du système, est celui qui lance toutes les autres tâches. Le rôle d’init est de démarrer et d’arrêter tous les services. C’est également lui qui va exécuter les diverses tâches initiales nécessaires au bon fonctionnement de Linux via l’exécution de plusieurs commandes et scripts.

Une fois le système démarré et les services lancés, init reste actif pour gérer les changements d’état des processus qu’il contrôle et des niveaux d’exécution.

Le processus init est le parent de tous les processus et possède toujours le PID 1. Il est démarré par le noyau, qui porte le PID « virtuel » 0.

Sa configuration est présente dans le fichier /etc/inittab. Si ce fichier est absent ou corrompu, il faut démarrer en mode single (S, s, 1, Single) et le réparer, ou démarrer depuis un support externe ou un disque de secours.

2. Niveaux d’exécution

Un niveau d’exécution, ou runlevel, correspond à un état de fonctionnement de Linux (y compris l’arrêt). Chaque niveau d’exécution est contrôlé par init et dispose de sa propre configuration (soit par etc/inittab, soit par des scripts appelés initscripts). Un niveau d’exécution peut par exemple être utilisé pour lancer Linux en mode mono-utilisateur, un autre en multi-utilisateur, avec ou sans réseau, avec ou sans mode graphique.

Tous les niveaux d’exécution sont configurables par l’administrateur. Ils sont généralement définis comme ceci sur les distributions de type Red Hat et OpenSUSE:

Niveau

Effet

0

Arrêt : stoppe le système d’exploitation...

systemd

systemd (system daemon) est, comme init System V ou upstart, un système d’initialisation, mais il est plus récent et spécifiquement conçu pour Linux. Comme l’init classique, il est le premier processus démarré par le noyau une fois l’initialisation de celui-ci terminée.

Parmi les successeurs d’init System V, systemd est le plus utilisé. Toutes les distributions majeures (Red Hat, SuSE, Ubuntu, Debian) l’utilisent.

systemd est issu d’une réflexion profonde sur le lancement du système et des services. Son auteur, Lennart Poettering (à qui on doit aussi les programmes PulseAudio et Avahi) a notamment comparé les programmes de démarrage Linux et celui d’autres systèmes, en particulier MacOS, en matière de rapidité et de nombre de processus nécessaires.

systemd propose donc d’accélérer le démarrage des services, en les basant sur des événements et avec un fonctionnement asynchrone, mais aussi de connaître et de gérer l’état exact de chaque processus constituant un service, en contrôlant ceux-ci grâce à une interface en ligne de commande ou graphique, mais aussi en remplaçant les scripts shell par un programme compilé.

systemd utilise des mécanismes performants faisant appel à des fonctions (API) uniquement présentes dans le noyau Linux, non conformes POSIX, et donc non portable vers d’autres systèmes de type Unix.

1. Unités cibles et services

Dans systemd, la notion de niveau d’exécution n’est conservée que dans un but de compatibilité avec init System V. L’état souhaité du système après l’exécution des services se nomme l’unité cible (target unit).

Le composant de base de systemd est l’unité ou unit. Il en existe plusieurs : services, sockets, périphériques, cibles, etc. Une cible est essentiellement le point de synchronisation entre unités à atteindre. Les unités cibles correspondent aux anciens niveaux d’exécution, mais sont beaucoup plus souples et configurables.

Une cible peut en regrouper d’autres. On peut activer et définir plusieurs cibles en même temps. Par exemple...

upstart

upstart est un successeur du service init, initialement développé pour Ubuntu, fonctionnant de manière asynchrone et basé sur les événements. Il a été utilisé dans les anciennes versions de certaines distributions (Ubuntu jusqu’à la version 14.04, Debian jusqu’à la version 6, Red Hat Enterprise Linux 6…). Il est utilisé par Google Chrome OS (et Chromium OS).

upstart contrôle l’ensemble des services, gère leur démarrage et leur arrêt mais surveille aussi leur fonctionnement. Il est compatible avec init System V : cependant les services upstart ne fonctionnent pas avec System V.

Avec upstart, les services peuvent être démarrés de manière asynchrone et peuvent donc être parallélisés, et non lancés séquentiellement comme avec init. Il est donc possible de définir les dépendances entre les services et d’optimiser leurs arrêts et démarrages. Étant basé sur des événements, upstart pourra par exemple démarrer les services Bluetooth uniquement si une clé USB de ce genre est insérée, et non inutilement et systématiquement au démarrage de la machine.

La certification LPIC-1 demande de connaître les caractéristiques générales d’upstart....

Consulter les traces du système

Différents outils permettent de suivre l’activité du système et des applications, via des fichiers d’enregistrement d’événements (fichiers journaux ou logs). L’administrateur doit pouvoir consulter régulièrement ces fichiers pour détecter d’éventuels problèmes et contrôler l’adéquation des ressources matérielles face à l’évolution des besoins.

1. dmesg

La commande dmesg permet de récupérer les messages du noyau émis au démarrage de la machine, puis les messages émis par la suite. Le tampon utilisé par dmesg est circulaire. Au bout d’un certain nombre de messages, les premiers disparaissent.

Cette commande permet de vérifier la présence d’éventuelles erreurs, au démarrage ou par la suite. En effet, après le démarrage, des messages continuent d’être enregistrés, notamment lors de la connexion à chaud de périphériques, au chargement de certains modules, lors d’une corruption du système de fichiers, etc.

Exemple

dmesg 
[    0.000000] microcode: microcode updated early to revision 0x2f, date = 2019-02-17 
[    0.000000] Linux version 5.14.0-162.23.1.el9_1.x86_64 (mockbuild@x86-vm-07.build.
eng.bos.redhat.com) (gcc (GCC) 11.3.1 20220421 (Red Hat 11.3.1-2), GNU ld version 
2.35.2-24.el9) #1 SMP PREEMPT_DYNAMIC Thu Mar 23 20:08:28 EDT 2023 
[    0.000000] The list of certified hardware and cloud instances for Red Hat Enterprise 
Linux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com. 
[    0.000000]...

Le noyau et ses modules

Le noyau est le cœur du système d’exploitation. Au sens strict, Linux est le noyau du système d’exploitation, créé à l’origine par Linus Torvalds. Le système d’exploitation Linux au sens large est composé du noyau et d’un ensemble d’outils permettant son exploitation par des applications : les outils GNU. Linux devrait donc plutôt être appelé GNU/Linux : GNU pour les outils, Linux pour le noyau.

Le noyau Linux est de type monolithique : ses fonctionnalités et composants sont regroupés dans un programme unique. Cependant il est complété par un ensemble d’extensions indépendantes, appelées modules, chargeables ou déchargeables dynamiquement.

Le noyau

Le noyau (kernel) est stocké dans un fichier du répertoire /boot. Son nom, par convention, est de la forme vmlinuz-X.Y.Z-VersText.

Exemple

# ls /boot/vmlinuz* 
vmlinuz-5.14.0-162.23.1.el9_1.x86_64 

On obtient la version du noyau courant avec la commande uname -r.

Exemple

uname -r 
5.14.0-162.23.1.el9_1.x86_64 

Les lettres ont une signification particulière.

  • X : version majeure du noyau. La version 3 est sortie durant l’été 2011, la version 4 en avril 2015, la version 5 en mars 2019, la version 6 en octobre 2022.

  • Y : chaque incrément représente une évolution importante du noyau.

  • Z : version mineure du noyau. Quand un lot de modifications par rapport à une version précédente nécessite la diffusion d’un nouveau noyau, on incrémente ce chiffre.

  • Vers : version propre à la distribution.

  • Text : texte fournissant des précisions sur le noyau.

1. uname

La commande uname (unix name) permet d’obtenir de nombreuses informations concernant la version en cours de Linux.

Syntaxe

Option

Description

-m (machine)

Type matériel de la machine.

-n (nodename)

Nom d’hôte de la machine.

-r (release)

Version (numéro) du noyau.

-s (system name)

Nom du système d’exploitation. Par défaut.

-p (processor)

Type de processeur.

-i

Plate-forme matérielle.

-v (version)

Version du système.

-a (all)

Toutes les informations.

Exemple

# uname -a 
Linux srvrh 5.14.0-162.23.1.el9_1.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Mar 
23 20:08:28 EDT 2023 x86_64 x86_64 x86_64 GNU/Linux...

Les fichiers associés aux périphériques

Les périphériques sont gérés à l’aide de pilotes logiciels, souvent sous forme de modules complémentaires du noyau.

Les périphériques sont associés à des fichiers de type spécial, qui ne sont pas des fichiers disque mais des moyens de communication avec les pilotes correspondants. Les processus peuvent accéder aux périphériques par l’intermédiaire de ces fichiers, en lecture et en écriture. Le processus ouvre le fichier spécial du périphérique (appel système open()), puis lit (appel système read()) ou écrit (appel système write()) des données de ou vers le périphérique. Ces opérations de lecture/écriture sont ensuite interprétées par le pilote du périphérique.

images/chap5_006.png

Linux accède aux périphériques via des fichiers spéciaux

1. Fichiers spéciaux

Les fichiers spéciaux associés aux périphériques sont par convention placés dans le répertoire /dev. Le premier caractère affiché par la commande ls -l FicSpec identifie le type du fichier spécial FicSpec :

  • c : périphérique en mode caractère.

  • b : périphérique en mode bloc .

Ces modes différencient le type d’échange de données entre le module de gestion de fichiers et le pilote du périphérique.

En mode caractère, il n’y a pas d’utilisation des buffers du système et la communication s’effectue octet par octet.

En mode bloc, le système accède au périphérique via des buffers du système. L’échange de données s’effectue donc plus rapidement pour les périphériques comme les disques.

Les deux autres attributs essentiels d’un fichier périphérique sont la paire d’informations que vous trouvez à la place de la taille du fichier, le numéro majeur et le numéro mineur :

  • Le numéro majeur identifie le pilote gérant ce type de périphérique.

  • Le numéro mineur est une information fournie au pilote, généralement l’identifiant du périphérique mais il peut...

Validations des acquis : questions/réponses

1. Questions

Si l’état de vos connaissances sur ce chapitre vous semble suffisant, répondez aux questions ci-après.

BIOS et UEFI

1 Où se situe physiquement le BIOS ?

2 Qui détermine l’ordre de détection des disques et donc du démarrage ?

3 Un disque de 3 To n’affiche que 2 To de disponibles. Pourquoi (deux réponses possibles) ?

  • A - Vous devez repartitionner le disque au format GPT.

  • B - Le disque est en panne. Vous devez le changer.

  • C - Le BIOS ne supporte pas les disques de plus de 2 To. Vous devez avoir un UEFI.

  • D - Vous devez repartitionner le disque avec fdisk.

GRUB

4 Quel est le rôle de GRUB (ou GRUB2) ?

  • A - Démarrer Linux.

  • B - Démarrer un système d’exploitation.

  • C - Proposer un mode sans échec.

  • D - Afficher un menu de démarrage graphique.

5 Devez-vous réinstaller GRUB (ou GRUB2) après chaque modification ?

6 Où se situe le fichier de configuration de GRUB ?

7 Votre répertoire /boot contenant le noyau et le fichier initrd se situe dans la partition racine reconnue comme la troisième partition du deuxième disque détecté par le BIOS (hdb3 par exemple). Quel est le chemin du noyau au sein du fichier de configuration de GRUB ?

  • A - (hd1,3)/kernel

  • B - (hd0,3)/kernel

  • C - (hd2,3)/boot/kernel

  • D - (hd1,2)/boot/kernel

8 Au démarrage de l’ordinateur, vous n’avez pas le temps de choisir une entrée du menu de démarrage. Comment augmenter la durée d’attente ?

9 Quelle valeur donner à « default » pour démarrer par défaut sur le troisième titre (entrée) ?

10 Quelle commande devez-vous taper pour installer GRUB dans le MBR du second disque IDE ?

11 Est-il possible de modifier les entrées des menus directement depuis le menu de démarrage GRUB ?

Init et systemd

12 Parmi ces choix, quel est le nom du premier processus lancé par le noyau ?

  • A - bash

  • B - initrd

  • C - init

  • D - kload

13 Quel est le rôle de init ?

14 À quoi servent les niveaux d’exécution ?

15 Donner le chemin complet du fichier de configuration de init.

16 La ligne id:5:initdefault a été remplacée par default:3:initdefault:. Que se passe-t-il ?

  • A - « default » étant inconnu, init ne démarre plus et le noyau...

Travaux pratiques

1. GRUB, GRUB2 et le processus de boot

But : en cas de perte du mot de passe administrateur, démarrer Linux en mode secours et fixer un nouveau mot de passe.

1.

Démarrez votre ordinateur et arrêtez-vous au menu de GRUB. Si vous êtes en mode graphique appuyez sur [Echap]. Sur l’entrée par défaut, appuyez sur la touche e pour éditer les informations de démarrage de ce choix de menu.

2.

Avec les touches fléchées, rendez-vous sur la ligne commençant par « kernel » et appuyez sur la touche e pour l’éditer. Avec GRUB2, placez-vous à la fin de la ligne commençant par « linux ».

3.

Au bout de cette ligne rajoutez init=/bin/sh et appuyez sur [Entrée]. Appuyez enfin sur b pour démarrer. Avec GRUB2, n’appuyez pas sur [Entrée] mais sur [Ctrl] x.

4.

Au bout de quelques secondes, un prompt apparaît. Passez en clavier français si possible (qwerty par défaut).

5.

Remontez le système de fichiers racine en écriture.

6.

Lancez la commande passwd et changez le mot de passe de l’administrateur root.

7.

Redémarrez et vérifiez que le nouveau mot de passe fonctionne.

Solutions possibles

But : en cas de perte du mot de passe administrateur, démarrer Linux en mode secours et fixer un nouveau mot de passe.

1.

Démarrez votre ordinateur et arrêtez-vous au menu de GRUB. Si vous êtes en mode graphique appuyez sur [Echap]. Sur l’entrée par défaut, appuyez sur la touche e pour éditer les informations de démarrage de ce choix de menu.

2.

Avec les touches fléchées, rendez-vous sur la ligne commençant par « kernel » et appuyez sur la touche e pour l’éditer. Avec GRUB2, placez-vous à la fin de la ligne commençant par « linux ».

3.

Au bout de cette ligne rajoutez init=/bin/sh et appuyez sur [Entrée]. Appuyez enfin sur b pour démarrer. Avec GRUB2, n’appuyez pas sur [Entrée] mais sur [Ctrl] x.

4.

Au bout de quelques secondes, un prompt apparaît. Passez en clavier français si possible (qwerty par défaut) :

# loadkeys fr 

5.

Remontez le système de fichiers racine en écriture :

# mount -o remount,rw / 

6.

Lancez la commande...