Thursday, September 22, 2016

CentOS - à la ligne de commande - 08 : GRUB et le démarrage

Savoir comment se déroule le démarrage d'un système d'exploitation ("OS") peut se révéler utile pour le dépannage ou l'optimisation des performances. Quant à moi, cela fait bien longtemps que je n'ai pas eu à m'occuper de cet aspect dans le monde de Windows mais je garde en tête les notions de base. En ce qui concerne Linux, et CentOS en particulier, je veux passer en revue le processus de démarrage et éventuellement (dans un billet de blogue à venir) des options comme l'équivalent du mode sans échec. Je me demande, par exemple, comment je m'y prendrais si CentOS refusait de démarrer suite à l'installation d'un nouveau pilote ou d'une mise à jour ?

***

Voici les étapes du démarrage telles que je les comprends (on pourrait présenter ce processus avec moins de détails ou encore plus).

BIOS/MBR

Cette première étape du démarrage se fait au niveau du BIOS (système élémentaire d'entrée et de sortie). Le BIOS constitue une sorte de lien entre le matériel et le logiciel. Il réside dans une puce de la carte mère (mémoire en lecture seule) et s'active avant même qu'un système d'exploitation soit chargé.

Quand j'appuie sur le bouton de démarrage du serveur, le BIOS lance le POST (auto-vérification d'allumage), une sorte de diagnostic, et détecte le matériel disponible avec lequel l'OS pourra fonctionner (sous réserve d'avoir les bons pilotes).

Si le diagnostic réussit, le BIOS va chercher un chargeur de démarrage ("bootloader") dans le MBR ("Master Boot Record") qui se trouve d'habitude dans le premier secteur du premier lecteur (disque) du serveur (il en occupe précisément les premiers 512 Ko du lecteur de démarrage ou "boot drive"). Désormais, c'est le chargeur de démarrage qui gère les opérations.

Note: en l'absence d'un OS, le démarrage peut se faire à partir d'un CD, DVD ou plus récemment, d'une clé USB. C'est typique d'ailleurs lors d'une nouvelle installation.


Chargeur de démarrage (niveau 1)

Je ne me souviens pas d'une distinction entre les chargeurs de démarrage de niveau 1 et de niveau 2 chez Windows mais une telle distinction, paraît-il, existe chez Linux. Le chargeur de démarrage de niveau 1 (présent dans le MBR) lance le chargeur de démarrage de niveau 2 qu'on trouve dans le répertoire /boot :



Chez Linux, le chargeur de démarrage s'appelle "GRUB" (GRand Unified Bootloader). CentOS 7 (et RHEL 7) utilise une nouvelle version de GRUB : GRUB version 2 ou GRUB2. Les versions précédentes utilisaient simplement "GRUB" qu'on appelle maintenent "legacy GRUB" ("GRUB hérité") qui semble rester présent d'ailleurs, comme on voit dans la capture d'écran ci-dessus.

En fait, le répertoire grub est vide. Seul le répertoire grub2 contient des fichiers dont le fichier grub.cfg :



Nous pouvons configurer des options pour GRUB en modifiant les paramètres dans ce fichier-ci :

/etc/default/grub

Pour que les modifications prennent effet, il faut régénérer le fichier grub.cfg avec la commande suivante :

grub2-mkconfig –o /boot/grub2/grub.cfg



Par exemple, j'ai ajouté les éléments suivants pour que le nom d'une interface réseau s'affiche d'une certaine manière:

biosdevname=0 net.ifnames=0

C'est bien ce fichier que j'ai édité (avec vi) :

/etc/default/grub



Et non pas celui-ci :

/boot/grub2/grub.cfg




Chargeur de démarrage (niveau 2)

Il charge le noyau dans la mémoire vive. Le noyau s'appelle vmlinuz et il semble qu'il y ait plusieurs instances qu'on entre-aperçoit dans la capture d'écran plus haut. En voici une meilleure prise :



Ces instances semblent correspondre aux options qu'on voit juste après le démarrage du serveur:




Le chargeur de démarrage monte l'image initramfs (un système de fichier de base qui se monte avant le "vrai" système de fichier).

Le noyau utilise initramfs pour charger certains modules pour IDE, SCSI ou RAID (qui doivent être chargés avant que le noyau puisse accéder au disque ?).

Une fois le noyau chargé (ainsi que ces autres modules), le chargeur de démarrage lui passe le relais.


Noyau

D'autres pourraient entrer plus encore dans le détail, mais pour ma part, j'ai compris que le noyau accomplit les deux tâches suivantes :
  • Le noyau monte la partition racine / en lecture seule.
  • Le noyau lance systemd (il s'agissait plutôt de /sbin/init dans les versions précédentes de CentOS, 5 et 6 par exemple).


Systemd

A son tour, systemd accomplit ces opérations :
  • systemd monte les partitions, l'environnement utilisateur et les services.
  • systemd présente l'invite de connexion à l'utilisateur:




***

Selon mes priorités, toujours changeantes, je voudrais, dans un billet à venir, examiner des options de GRUB et peut-être les démarrage de secours et d'urgence.

No comments:

Post a Comment