Tom Daluzeau
← Parcours Linux
Linux · leçon 3 / 6Ch. 1 · Architecture d'un serveur11 minTerminée

Le démarrage : de l'allumage à systemd

Tu sais réciter les cinq étapes du démarrage, dire ce que fait chacune, modifier GRUB et l'initramfs sans rien casser, et trouver quel maillon a lâché quand un serveur ne démarre plus.

Mis à jour le

Pourquoi on voit ça

Un serveur qui ne démarre plus, c’est une des pannes les plus stressantes : pas de SSH, juste un écran figé. Pour t’en sortir, tu dois savoir à quelle étape il s’est arrêté. Chaque étape a ses fichiers et ses commandes, donc trouver le maillon, c’est déjà savoir où réparer.

C’est aussi la suite logique des leçons précédentes : tu connais le noyau et les dossiers /sys, /etc et /boot. On les voit maintenant travailler ensemble.

La course de relais

Le démarrage est une course de relais à cinq coureurs. Chacun fait sa part, prépare le suivant et lui passe le témoin.

étape son travail ce que tu modifies BIOS/UEFI teste le matériel, lance GRUB le menu du firmware GRUB charge noyau + initramfs en RAM /etc/default/grub puis update-grub Noyau se décompresse, prend le matériel /boot/vmlinuz-… choisi dans le menu de GRUB initramfs charge les pilotes, monte le vrai / /etc/initramfs-tools/modules puis update-initramfs -u switch_root systemd · PID 1 lance les services (default.target) /etc/systemd/system les units de l'admin
Chaque coureur passe le témoin au suivant. Si l'un tombe, ceux d'après ne partent jamais.
Étape Son travail Elle passe le témoin à
BIOS/UEFI vérifie et initialise le matériel, trouve le chargeur d’amorçage GRUB
GRUB affiche le menu, charge le noyau et l’initramfs en RAM le noyau
Noyau prend le contrôle du matériel, ouvre l’initramfs l’initramfs
Initramfs charge les pilotes du disque, monte le vrai / systemd
systemd lance tous les services (le serveur est prêt)

Si un coureur tombe, la course s’arrête là. Les suivants ne partent jamais.

BIOS ou UEFI

Le BIOS et l’UEFI sont des micrologiciels (firmware) : de petits programmes stockés sur la carte mère. À l’allumage, ils testent le matériel puis cherchent un chargeur d’amorçage à lancer. L’UEFI est le remplaçant moderne du BIOS.

Pour savoir comment la machine a démarré, tu regardes si un dossier existe :

ls /sys/firmware/efi
  • Le dossier existe → démarrage en UEFI.
  • « Aucun fichier ou dossier de ce type » → démarrage en BIOS.

Pour retenir le chemin, lis-le mot par mot : /sys (le matériel vu par le noyau), firmware (le micrologiciel), efi.

Les deux ne rangent pas le chargeur au même endroit et n’offrent pas la même sécurité :

ls /sys/firmware/efi absent présent BIOS · l'ancien table de partitions MBR, disques de 2 To au plus chargeur d'amorçage 512 premiers octets du disque sécurité aucune UEFI · le moderne table de partitions GPT, pas de limite chargeur d'amorçage partition EFI, sur /boot/efi sécurité Secure Boot
Une seule commande pour savoir dans quel monde tu es.

GRUB, le chargeur d’amorçage

GRUB affiche le menu de démarrage, puis va chercher deux fichiers dans /boot et les charge en RAM : le noyau et l’initramfs. Ensuite il lance le noyau.

Deux gestes au clavier, juste après le BIOS/UEFI :

  • maintenir Maj (Shift) fait apparaître le menu, par exemple pour choisir un ancien noyau ;
  • la touche e sur une entrée du menu permet de la modifier, pour ce démarrage seulement : rien n’est enregistré.

Deux fichiers à ne pas confondre

Fichier Rôle Tu le modifies ?
/etc/default/grub tes réglages oui
/boot/grub/grub.cfg le fichier que GRUB lit au démarrage jamais à la main

grub.cfg est généré automatiquement. Si tu le modifies à la main, ton changement sera écrasé à la prochaine régénération (par exemple lors d’une mise à jour du noyau), et une faute de frappe peut empêcher le serveur de démarrer.

Changer un réglage

Exemple : le délai d’affichage du menu, en secondes. Dans /etc/default/grub :

GRUB_TIMEOUT=5

Tu changes la valeur, puis tu régénères :

update-grub

update-grub relit /etc/default/grub et réécrit proprement /boot/grub/grub.cfg. Si tu l’oublies, rien ne change au prochain démarrage.

Le noyau

Le fichier du noyau est dans /boot et s’appelle vmlinuz-<version> (le z indique qu’il est compressé). La version en cours se lit avec :

uname -r

Une fois lancé, le noyau s’installe en mémoire, détecte le processeur, la RAM et le matériel de base. Il lui reste à monter la racine /, le vrai système de fichiers, celui qui est sur le disque. Et là, il y a un problème.

L’initramfs, la petite valise

Pour lire le disque, le noyau a besoin de pilotes : pour le contrôleur de disque, pour le RAID, pour LVM, pour le chiffrement. Or ces pilotes sont rangés… sur le disque. Il faudrait lire le disque pour apprendre à lire le disque.

La solution, c’est l’initramfs : un petit système de fichiers temporaire, chargé en RAM par GRUB en même temps que le noyau. C’est la petite valise qu’on garde avec soi en voyage : elle contient juste le nécessaire pour atteindre la maison, où se trouve tout le reste.

Son travail, dans l’ordre :

  1. charger les pilotes nécessaires ;
  2. trouver et monter le vrai / ;
  3. basculer dessus avec switch_root : la racine temporaire en RAM est abandonnée, le vrai / prend sa place ;
  4. lancer systemd.
Sans initramfs Noyau Disque RAID, LVM ou chiffré les pilotes sont sur ce disque Avec initramfs Noyau initramfs en RAM : les pilotes vrai / sur le disque systemd switch_root /sbin/init
La valise apporte les pilotes, ouvre la maison, puis on la range : la racine en RAM est abandonnée.

Ajouter un pilote à l’initramfs

Cas typique : tu migres une VM vers un autre hyperviseur. Le contrôleur de disque change, l’initramfs n’a pas le bon pilote, et la machine ne démarre plus. Il faut ajouter le module.

Tu écris son nom, sans l’extension .ko, dans /etc/initramfs-tools/modules :

virtio_scsi

Puis tu régénères l’initramfs :

update-initramfs -u

-u comme update : la commande met à jour l’initramfs existant.

La même logique partout

Ce que tu veux changer Fichier à modifier (dans /etc) Commande qui régénère Résultat (dans /boot)
GRUB /etc/default/grub update-grub /boot/grub/grub.cfg
Initramfs /etc/initramfs-tools/modules update-initramfs -u /boot/initrd.img-…

Tu modifies dans /etc, une commande update-… fabrique le fichier dans /boot. Tu ne touches jamais directement à /boot.

systemd, le PID 1

Dernier relais : après switch_root, l’initramfs lance /sbin/init, qui est un lien vers systemd. C’est le tout premier processus, il porte donc le PID 1. Tous les autres processus descendent de lui.

Son rôle : démarrer les services du serveur (réseau, SSH, serveur web…) et les surveiller pendant toute la vie de la machine. Comment on le pilote, c’est le sujet de la leçon suivante.

Trouver le maillon en panne

La méthode : repère la dernière étape qui a réussi. Le coupable est le coureur suivant.

Ce que tu vois Maillon en cause
Rien ne se lance, message du type « no bootable device » BIOS/UEFI : il ne trouve pas de chargeur
Pas de menu, une invite grub rescue> GRUB
Le noyau démarre, puis une invite (initramfs) l’initramfs : il ne trouve pas le vrai /
Le système démarre, mais un service ne se lance pas systemd

À retenir

  • La chaîne : BIOS/UEFI → GRUB → noyau → initramfs → systemd. Une course de relais.
  • /sys/firmware/efi existe → UEFI. Sinon → BIOS.
  • GRUB charge le noyau et l’initramfs en RAM. On modifie /etc/default/grub, jamais /boot/grub/grub.cfg, puis update-grub.
  • L’initramfs est la petite valise en RAM : les pilotes pour atteindre le vrai disque. Il finit par switch_root vers le vrai /.
  • Ajouter un module : /etc/initramfs-tools/modules, puis update-initramfs -u.
  • systemd est le PID 1 : le premier processus, celui qui lance tous les services.

Entraînement

12 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.

Cartes · 14

Réviser les cartes ici

Espace : retourner