Chapitre 8. Amorçage et configuration d'un système Linux

Table des matières

8.1. Le processus d'amorçage de Linux
8.2. Le processus init
8.3. Configuration système via /etc/sysconfig

Résumé

L'amorçage d'un système Linux implique de nombreux composants. Ce chapitre décrit les principes sous-jacents et présente en détail les composants impliqués. Le concept de niveau d'exécution et la configuration du système SUSE avec sysconfig sont également abordés dans ce chapitre.


8.1. Le processus d'amorçage de Linux

Le processus d'amorçage de Linux se compose de plusieurs étapes, chacune représentée par un autre composant. La liste suivante résume brièvement le processus d'amorçage et présente tous les principaux composants impliqués.

  1. BIOS.  Une fois l'ordinateur allumé, le BIOS initialise l'écran et le clavier, puis teste la mémoire principale. La machine n'accède jusque-là à aucun support de stockage de masse. Ensuite, les informations sur la date et l'heure actuelles ainsi que sur les périphériques les plus importants sont chargées à partir des valeurs CMOS. Lorsque le premier disque dur et sa géométrie sont reconnus, le contrôle du système passe du BIOS au chargeur d'amorçage.

  2. Chargeur d'amorçage.  Le premier secteur de données de 512 octets du premier disque dur est chargé dans la mémoire principale et le chargeur d'amorçage qui réside au début de ce secteur prend la relève. Les commandes exécutées par le chargeur d'amorçage déterminent la partie restante du processus d'amorçage. Par conséquent, les 512 premiers octets du premier disque dur sont appelés MBR (Master Boot Record - secteur d'amorçage principal). Le chargeur d'amorçage passe ensuite le contrôle au système d'exploitation, en l'occurrence le kernel Linux. Pour plus d'informations sur GRUB, le chargeur d'amorçage Linux, reportez-vous au Chapitre 9, Chargeur d'amorçage.

  3. Kernel et initramfs.  Pour transmettre le contrôle du système, le chargeur d'amorçage charge le kernel et le système de fichiers initial basé sur la RAM (initramfs) dans la mémoire. Le contenu du système ramfs initial peut être utilisé par le kernel directement. Ce système contient un petit fichier exécutable appelé init qui traite le montage du système de fichiers racine réel. Dans les versions précédentes de SUSE Linux, ces tâches étaient traitées par initrd et linuxrc, respectivement. Pour plus d'informations sur initramfs, reportez-vous à la Section 8.1.1, « initramfs ».

  4. init sur initramfs.  Ce programme effectue toutes les actions nécessaires au montage du système de fichiers racine adéquat, notamment la mise en place des fonctionnalités du kernel pour le système de fichiers nécessaire et des pilotes de périphérique pour les contrôleurs de stockage de masse avec udev. Une fois le système de fichiers racine détecté, il est contrôlé afin de détecter les erreurs, puis monté. Si cette opération aboutit, le système initramfs est nettoyé et le programme init du système de fichiers racine est exécuté. Pour plus d'informations sur init, reportez-vous à la Section 8.1.2, « init sur initramfs ». Pour plus d'informations sur udev, reportez-vous au Chapitre 12, Gestion dynamique du périphérique  du kernel avec udev.

  5. init.  init prend en charge l'amorçage effectif du système par plusieurs niveaux qui fournissent des fonctionnalités différentes. Il est décrit à la Section 8.2, « Le processus init ».

8.1.1. initramfs

initramfs est une petite archive cpio que le kernel peut charger sur un disque virtuel. Il fournit un environnement Linux minimal qui permet d'exécuter des programmes avant le montage du système de fichiers racine réel. Cet environnement Linux minimal est chargé en mémoire par les routines du BIOS et n'a pas de configuration matérielle spécifique autre que suffisamment de mémoire. initramfs doit toujours fournir un fichier exécutable nommé init qui doit exécuter le programme d'initialisation proprement dit sur le système de fichiers racine afin de lancer le processus d'amorçage.

Avant que le système de fichiers racine réel puisse être monté et que le système d'exploitation puisse démarrer, le kernel a besoin des pilotes correspondants pour accéder au périphérique sur lequel est situé le système de fichiers racine. Il peut s'agir de pilotes spéciaux pour certains types de disques durs ou de pilotes réseau permettant d'accéder à un système de fichiers réseau. Les modules nécessaires au système de fichiers racine peuvent être chargés par init sur initramfs. Une fois les modules chargés, udev fournit à initramfs les périphériques nécessaires. initramfs est disponible tout au long du processus d'amorçage. Tous les événements de périphérique générés au cours de l'amorçage peuvent ainsi être traités.

Si vous devez changer le matériel (disques durs) sur un système installé et que ce matériel nécessite des pilotes différents dans le kernel au moment de l'amorçage, vous devez mettre à jour initramfs. Cette opération s'effectue comme avec son prédécesseur, initrd, en appelant mkinitrd. L'appel de mkinitrd sans argument crée initramfs. L'appel de mkinitrd -R crée initrd. Dans SUSE Linux, les modules à charger sont spécifiés par la variable INITRD_MODULES dans /etc/sysconfig/kernel. Après l'installation, cette variable adopte automatiquement la valeur correcte. Les modules sont chargés exactement dans l'ordre dans lequel ils apparaissent dans INITRD_MODULES. Cet aspect est très important, notamment en présence de plusieurs pilotes SCSI car sinon, les noms des disques durs seraient modifiés. En d'autres termes, il suffirait de charger uniquement les pilotes nécessaires pour accéder à ce système de fichiers racine. Cependant, tous les pilotes SCSI nécessaires à l'installation sont chargés au moyen d'initramfs ou d'initrd car un chargement ultérieur risquerait de poser problème.

[Important]mise à jour d'initramfs ou d'initrd

Le chargeur d'amorçage charge initramfs ou initrd de la même manière que le kernel. Il est inutile de réinstaller GRUB après la mise à jour d'initramfs ou d'initrd car GRUB recherche le fichier correct dans le répertoire lors de l'amorçage.

8.1.2. init sur initramfs

L'objectif principal d'init sur initramfs est de préparer le montage du système de fichiers racine réel ainsi que son accès. En fonction de la configuration actuelle de votre système, init est responsable des tâches suivantes.

Chargement des modules du kernel

En fonction de votre configuration matérielle, des pilotes spéciaux peuvent être nécessaires pour accéder aux composants matériels de votre ordinateur (le composant le plus important étant votre disque dur). Pour accéder au système de fichiers racine final, le kernel doit charger les pilotes corrects du système de fichiers.

Alimentation en fichiers de bloc spéciaux

Pour chaque module chargé, le kernel génère des événements de périphérique. udev gère ces événements et génère les fichiers de périphérique spéciaux requis sur un système de fichiers RAM dans /dev. Sans ces fichiers spéciaux, le système de fichiers ne serait pas accessible.

Gestion des configurations RAID et LVM

Si vous avez configuré votre système pour que le système de fichiers racine soit contenu sous RAID ou LVM, init configure LVM ou RAID pour permettre l'accès ultérieur au système de fichiers racine. Pour plus d'informations sur RAID, reportez-vous à la Section 2.2, « Configuration de Soft RAID ». Pour plus d'informations sur LVM, reportez-vous à la Section 2.1, « Configuration de LVM ».

Gestion de la configuration réseau

Si vous avez configuré votre système pour qu'il utilise un système de fichiers racine monté sur un réseau (monté via NFS), init doit s'assurer que les pilotes réseau correspondants sont chargés et qu'ils sont configurés pour autoriser l'accès au système de fichiers racine.

Lorsque init est appelé au cours de l'amorçage initial dans le cadre du processus d'installation, ses tâches diffèrent de celles mentionnées précédemment :

Recherche du support d'installation

Lorsque vous démarrez le processus d'installation, votre machine charge un kernel d'installation et un initrd spécial avec le programme d'installation de YaST à partir du support d'installation. Le programme d'installation de YaST, qui est exécuté dans un système de fichiers RAM, doit disposer d'informations sur l'emplacement réel du support d'installation pour y accéder et installer le système d'exploitation.

Reconnaissance matérielle et chargement des modules de kernel correspondants

Comme l'indique la Section 8.1.1, « initramfs », le processus d'amorçage démarre avec un ensemble réduit de pilotes qui peuvent être utilisés avec la plupart des configurations matérielles. init démarre un processus de recherche matérielle qui détermine l'ensemble des pilotes adaptés à votre configuration matérielle. Ces valeurs sont ensuite inscrites dans INITRD_MODULES soit dans le répertoire /etc/sysconfig/kernel afin de permettre aux processus d'amorçage ultérieurs d'utiliser un initrd personnalisé, soit dans un fichier /etc/sysconfig/hardware/hwconfig-* si le périphérique n'est pas requis au cours du processus d'amorçage. Au cours du processus d'installation, init charge cet ensemble de modules.

Chargement du système d'installation et système de secours

Dès que le matériel a été correctement reconnu, que les pilotes correspondants ont été chargés et qu'udev a créé les fichiers de périphérique spéciaux, init démarre le système d'installation qui contient le programme d'installation de YaST proprement dit ou le système de secours.

Démarrage de YaST

Pour finir, init démarre YaST, qui lance l'installation des paquetages et la configuration du système.