Red Hat Linux 9: Guide de référence de Red Hat Linux | ||
---|---|---|
Prev | Chapter 1. Processus de démarrage, Init et arrêt | Next |
Le début du processus de démarrage varie en fonction de la plate-forme matérielle utilisée. Toutefois, une fois le noyau trouvé et chargé par le chargeur de démarrage, le processus de démarrage par défaut est identique pour toutes les architectures. Ce chapitre se concentre sur l'architecture x86.
Lorsque l'on démarre un ordinateur x86, le processeur recherche le programme BIOS, de l'anglais Basic Input/Output System, dans la mémoire morte (ROM) de la carte mère et l'exécute. Le BIOS est le plus bas niveau d'interface pour les périphériques et contrôle la première étape du processus de démarrage. Pour cette raison, le programme du BIOS est écrit en lecture seulement dans la mémoire morte et peut toujours être utilisé.
D'autres plates-formes utilisent différents programmes pour réaliser des tâches de bas niveau plus ou moins équivalentes à celles effectuées par le BIOS sur un système x86. Par exemple, les ordinateurs Itanium utilisent le Shell Extensible Firmware Interface (ou EFI), tandis que les systèmes Alpha utilisent la console SRM.
Une fois chargé, le BIOS teste le système, recherche et vérifie les périphériques et trouve ensuite un périphérique valide qui sera utilisé pour amorcer le système. Normalement, il vérifie d'abord les lecteurs de disquettes et les lecteurs CD-ROM afin de trouver un support amorçable - s'il y en a un - puis se tourne vers les disques durs. L'ordre des unités recherchées lors du démarrage peut généralement être contrôlé par un paramètre du BIOS; il cherche sur le dispositif IDE maître sur le bus IDE principal. Le BIOS charge ensuite en mémoire tout programme résidant dans le premier secteur de ce dispositif, appelé le Master Boot Record ou MBR. Le MBR ne fait que 512 octets et contient des instructions de codes pour démarrer la machine - appelée chargeur de démarrage - ainsi que la table de partitions. Une fois que le BIOS trouve et charge en mémoire le programme du chargeur de démarrage, il lui cède le contrôle du processus de démarrage.
Cette section examine le processus de démarrage pour la plate-forme x86. Le processus de démarrage de votre ordinateur peut varier légèrement en fonction de son architecture. Reportez-vous à Section 1.2.2.1 Chargeurs de démarrage pour d'autres architectures pour un bref aperçu des chargeurs de démarrage non x86.
Sous Red Hat Linux, deux chargeurs de démarrage sont disponibles: GRUB ou LILO. GRUB est le chargeur de démarrage par défaut, mais LILO est disponible pour ceux qui en ont besoin pour leur configuration matérielle, ou qui préfèrent l'utiliser. Pour de plus amples informations sur la configuration et l'utilisation de GRUB ou de LILO, reportez-vous au Chapter 2 Chargeurs de démarrage.
Les deux chargeurs de démarrage pour la plate-forme x86 sont divisés au minimum en deux étapes. La première est un petit binaire de code machine. Son seul rôle est de localiser le chargeur de démarrage Étape 2 et d'en charger la première partie en mémoire.
GRUB est le chargeur de démarrage le plus récent qui a l'avantage de pouvoir lire les partitions ext2 et ext3 [1]et de charger son fichier de configuration — /boot/grub/grub.conf— au moment du démarrage. Pour de plus amples informations sur la façon de modifier ce fichier, reportez-vous à Section 2.7 Fichier de configuration du menu de GRUB.
Avec LILO, le chargeur de démarrage Étape 2 utilise des informations sur le MBR pour déterminer les options de démarrage dont dispose l'utilisateur. Cela signifie que chaque fois qu'un changement de configuration est réalisé ou que vous mettez manuellement à jour votre noyau, vous devez exécuter la commande /sbin/lilo -v -v pour écrire les informations appropriées sur le MBR. Pour plus de détails à ce propos, consultez Section 2.8 LILO.
![]() | Astuce |
---|---|
Si vous mettez à niveau le noyau en utilisant l'application Agent de mise à jour Red Hat, le fichier de configuration du chargeur d'amorçage sera mis à jour automatiquement. Pour plus d'informations sur Red Hat Network, rendez-vous à l'adresse suivante: https://rhn.redhat.com. |
Une fois que le chargeur de démarrage Étape 2 en mémoire, il affiche l'écran graphique
initial Red Hat Linux indiquant à l'utilisateur les différents systèmes d'exploitation ou noyaux
qu'il doit charger en fonction de sa configuration. Sur cet écran, l'utilisateur peut, à
l'aide des touches flèches, choisir le système d'exploitation ou le noyau qu'il souhaite
charger et valider ce choix en pressant la touche
![]() | Remarque |
---|---|
Si vous avez installé la prise en charge de noyau 'Symmetric Multi-Processor' (SMP), plusieurs options seront proposées la première fois que vous démarrerez votre système. Sous LILO, vous verrez linux, qui est le noyau SMP et linux-up, qui est pour des processeurs simples. Sous GRUB, vous verrez Red Hat Linux (<version-noyau>-smp), qui est le noyau SMP et Red Hat Linux (<version-noyau>), qui est pour des processeurs simples. Si vous rencontrez des problèmes en utilisant le noyau SMP, sélectionnez le noyau non-stop au redémarrage. |
Une fois que le chargeur de démarrage Étape 2 a déterminé le noyau à démarrer, il localise le binaire de noyau correspondant dans le répertoire /boot/. Le binaire du noyau est baptisé d'après le format— fichier /boot/vmlinuz-<version-noyau> (où <version-noyau> correspond à la version du noyau spécifiée dans les paramètres du chargeur de démarrage).
Pour obtenir des informations concernant l'utilisation du chargeur de démarrage pour transmettre des arguments de la ligne de commande au noyau, lisez le Chapter 2 Chargeurs de démarrage. Pour des informations sur la manière de changer le niveau d'exécution à l'invite de GRUB ou LILO, lisez Section 2.10 Changement de niveau d'exécution au démarrage.
Ensuite, le chargeur de démarrage place l'image disque RAM initial appropriée, appelée initrd, en mémoire. L'initrd est utilisée par le noyau pour charger les pilotes nécessaires au démarrage du système. Ceci s'avère particulièrement important si vous avez des disques durs SCSI ou si vous utilisez le système de fichiers ext3. [2].
![]() | Avertissement |
---|---|
Ne supprimez le répertoire /initrd/ du système de fichiers sous aucun prétexte. Le retirer provoquerait un échec de votre système, avec un message d'erreur panique du noyau au moment du démarrage. |
Une fois que le noyau et l'image initrd sont chargés en mémoire, le chargeur de démarrage cède le contrôle du processus de démarrage au noyau.
Pour obtenir un aperçu détaillé des chargeurs de démarrage GRUB et LILO, reportez-vous au Chapter 2 Chargeurs de démarrage.
Une fois que le noyau se charge et qu'il passe les commandes à init, les mêmes événements se produisent sur toutes les architectures. La différence essentielle entre le processus de démarrage de chaque architecture réside dans le choix de l'application utilisée pour trouver et charger le noyau.
Par exemple, l'architecture Alpha utilise le chargeur de démarrage aboot, tandis que l'architecture Itanium utilise le chargeur de démarrage ELILO.
Consultez le Guide d'installation de Red Hat Linux spécifique à ces plates-formes, pour obtenir de plus amples informations sur la manière de configurer leurs chargeurs de démarrage.
Lors du chargement du noyau, ce dernier initialise et configure immédiatement la mémoire de l'ordinateur. Ensuite, il configure les divers matériels attachés au système, y compris tous les processeurs et sous-systèmes E/S, ainsi que les périphériques de stockage. Il recherche ensuite l'image initrd compressée dans un emplacement prédéterminé dans la mémoire, la décompresse, la monte et charge tous les pilotes nécessaires. Ensuite, il initialise les dispositifs virtuels liés aux systèmes de fichiers, tels que LVM ou RAID logiciel, avant de démonter l'image disque initrd et de libérer par là-même toute la mémoire qu'elle occupait.
Le noyau crée alors un dispositif root, monte la partition root en lecture seule et libère la mémoire non utilisée.
À ce stade, le noyau est chargé en mémoire et est désormais opérationnel. Toutefois, en l'absence de toute application offrant à l'utilisateur la possibilité de donner des informations utiles au système, on ne peut en faire grand chose.
Afin de configurer l'environnement utilisateur, le noyau exécute de progamme /sbin/init.
Le programme /sbin/init (aussi appelé init) coordonne le reste du processus de démarrage et configure l'environnement de l'utilisateur.
Lorsque la commande init est lancée, elle devient l'élément parent ou grand-parent de tous les processus qui sont lancés automatiquement sur votre système Red Hat Linux. Tout d'abord, elle exécute le script /etc/rc.d/rc.sysinit, qui établit votre chemin d'accès d'environnement, démarre swap, vérifie les systèmes de fichiers, etc et s'occupe de tout ce qui doit être fait sur le système au moment de son initialisation. Par exemple, la plupart de systèmes utilise une horloge, donc rc.sysinit lit le fichier de configuration /etc/sysconfig/clock sur ceux-ci pour initialiser l'horloge. Autre exemple: si vous avez des processus de port série spéciaux qui doivent être initialisés, rc.sysinit exécutera le fichier /etc/rc.serial.
La commande init exécute ensuite le script /etc/inittab, qui décrit comment le système doit être configuré dans chaque niveau d'exécution SysV init. [3]Entre autres choses, le fichier /etc/inittab règle le niveau d'exécution par défaut et établit que /sbin/update doit s'exécuter chaque fois qu'il démarre un niveau d'exécution donné[4].
Ensuite, la commande init configure la bibliothèque de fonctions sources, /etc/rc.d/init.d/functions, pour le système. Ceci indique comment démarrer ou arrêter un programme et comment déterminer le PID d'un programme.
Le programme init démarre tous les processus d'arrière-plan en recherchant dans le répertoire rc approprié le niveau d'exécution spécifié comme niveau par défaut dans /etc/inittab. Les répertoires rc sont numérotés de façon à correspondre au niveau d'exécution qu'ils représentent. Par exemple, /etc/rc.d/rc5.d/ est le répertoire correspondant au niveau d'exécution 5.
En démarrant au niveau d'exécution 5, le programme init examine le répertoire /etc/rc.d/rc5.d/ afin de déterminer les processus à arrêter et à démarrer.
Ci-dessous figure un exemple de listing pour un répertoire /etc/rc.d/rc5.d/:
K05innd->../init.d/innd K05saslauthd->../init.d/saslauthd K10psacct->../init.d/psacct K12cWnn->../init.d/cWnn K12FreeWnn->../init.d/FreeWnn K12kWnn->../init.d/kWnn K12mysqld->../init.d/mysqld K12tWnn->../init.d/tWnn K15httpd->../init.d/httpd K15postgresql->../init.d/postgresql K16rarpd->../init.d/rarpd K20bootparamd->../init.d/bootparamd K20iscsi->../init.d/iscsi K20netdump-server->../init.d/netdump-server K20nfs->../init.d/nfs K20rstatd->../init.d/rstatd K20rusersd->../init.d/rusersd K20rwalld->../init.d/rwalld K20rwhod->../init.d/rwhod K24irda->../init.d/irda K25squid->../init.d/squid K28amd->../init.d/amd K34dhcrelay->../init.d/dhcrelay K34yppasswdd->../init.d/yppasswdd K35atalk->../init.d/atalk K35dhcpd->../init.d/dhcpd K35smb->../init.d/smb K35vncserver->../init.d/vncserver K35winbind->../init.d/winbind K40mars-nwe->../init.d/mars-nwe K45arpwatch->../init.d/arpwatch K45named->../init.d/named K45smartd->../init.d/smartd K46radvd->../init.d/radvd K50netdump->../init.d/netdump K50snmpd->../init.d/snmpd K50snmptrapd->../init.d/snmptrapd K50tux->../init.d/tux K54pxe->../init.d/pxe K55routed->../init.d/routed K61ldap->../init.d/ldap K65identd->../init.d/identd K65kadmin->../init.d/kadmin K65kprop->../init.d/kprop K65krb524->../init.d/krb524 K65krb5kdc->../init.d/krb5kdc K70aep1000->../init.d/aep1000 K70bcm5820->../init.d/bcm5820 K74ntpd->../init.d/ntpd K74ups->../init.d/ups K74ypserv->../init.d/ypserv K74ypxfrd->../init.d/ypxfrd K84bgpd->../init.d/bgpd K84ospf6d->../init.d/ospf6d K84ospfd->../init.d/ospfd K84ripd->../init.d/ripd K84ripngd->../init.d/ripngd K85zebra->../init.d/zebra K90isicom->../init.d/isicom K92ipvsadm->../init.d/ipvsadm K95firstboot->../init.d/firstboot S00microcode_ctl->../init.d/microcode_ctl S05kudzu->../init.d/kudzu S08ip6tables->../init.d/ip6tables S08ipchains->../init.d/ipchains S08iptables->../init.d/iptables S09isdn->../init.d/isdn S10network->../init.d/network S12syslog->../init.d/syslog S13portmap->../init.d/portmap S14nfslock->../init.d/nfslock S17keytable->../init.d/keytable S20random->../init.d/random S24pcmcia->../init.d/pcmcia S25netfs->../init.d/netfs S26apmd->../init.d/apmd S28autofs->../init.d/autofs S44acpid->../init.d/acpid S55sshd->../init.d/sshd S56rawdevices->../init.d/rawdevices S56xinetd->../init.d/xinetd S80sendmail->../init.d/sendmail S80spamassassin->../init.d/spamassassin S84privoxy->../init.d/privoxy S85gpm->../init.d/gpm S90canna->../init.d/canna S90crond->../init.d/crond S90cups->../init.d/cups S90xfs->../init.d/xfs S95anacron->../init.d/anacron S95atd->../init.d/atd S97rhnsd->../init.d/rhnsd S99local->../rc.local S99mdmonitor->../init.d/mdmonitor |
Comme le montre ce listing, aucun des scripts qui lancent et arrêtent vraiment les services n'est réellement situé dans le répertoire /etc/rc.d/rc5.d/. Tous les fichiers dans /etc/rc.d/rc5.d/ sont en fait des liens symboliques qui pointent vers les scripts situés dans le répertoire /etc/rc.d/init.d/. Des liens symboliques sont utilisés dans chacun des répertoires rc afin que les niveaux d'exécution puissent être reconfigurés en créant, modifiant et supprimant les liens symboliques, sans que cela affecte les scripts auxquels ils font référence.
Le nom de chaque lien symbolique commence par K ou S. Les liens K correspondent à des processus arrêtés à ce niveau d'exécution, tandis que les liens S correspondent à des processus démarrés.
La commande init arrête tout d'abord tous les liens symboliques K du répertoire en émettant la commande /etc/rc.d/init.d/<commande> stop, <commande> correspondant au processus à arrêter. Elle démarre ensuite tous les liens symboliques S en émettant la commande /etc/rc.d/init.d/<commande> start.
![]() | Astuce |
---|---|
Une fois que le système a terminé son démarrage, il est possible d'établir une connexion en tant que super-utilisateur et d'exécuter ces mêmes scripts pour arrêter et démarrer des services. Par exemple, la commande /etc/rc.d/init.d/httpd stop arrêtera le serveur Web Apache. |
Chacun des liens symboliques est numéroté de façon à établir l'ordre de démarrage. L'ordre dans lequel les services sont démarrés ou arrêtés peut être modifié en changeant ce numéro. Plus le numéro est bas, plus avancée sera la place dans l'ordre de démarrage. Les liens symboliques disposant du même numéro sont démarrés par ordre alphabétique.
![]() | Remarque |
---|---|
Une des dernières choses que le programme init exécute est le fichier /etc/rc.d/rc.local. Ce dernier est utilise pour la personnalisation du système. Reportez-vous à Section 1.3 Exécution de programmes supplémentaire au démarrage pour de plus amples informations sur l'utilisation du fichier rc.local. |
Une fois que la commande init a progressé dans le répertoire rc approprié pour le niveau d'exécution, le script /etc/inittab établit un processus /sbin/mingetty pour chaque console virtuelle (invites de login) assignée à ce niveau d'exécution. Les niveaux d'exécution 2 à 5 obtiennent tous six consoles virtuelles, tandis que le niveau d'exécution 1 (mode mono-utilisateur) n'obtient qu'une console et que les niveaux d'exécution 0 et 6 n'en obtiennent aucune. Le processus /sbin/mingetty ouvre des lignes de communication vers les dispositifs tty [5], règle leurs modes, imprime l'invite de login, prend le nom d'utilisateur, puis commence le processus de login pour l'utilisateur concerné.
Au niveau d'exécution 5, /etc/inittab exécute un script appelé /etc/X11/prefdm. Le script prefdm exécute le gestionnaire d'affichage X préféré — gdm, kdm, ou xdm, en fonction de ce qui est contenu dans le fichier /etc/sysconfig/desktop.
À ce stade, le système devrait fonctionne à un niveau d'exécution 5 et devrait afficher une invite de connexion à l'écran.
[1] | GRUB lit les systèmes de fichiers ext3 en tant que ext2, sans tenir compte du fichier journal. Reportez-vous au chapitre intitulé Le système de fichiers ext3 du Guide de personnalisation de Red Hat Linux pour de plus amples informations sur le système de fichiers ext3. |
[2] | Pour obtenir des informations concernant la création d'un initrd, consultez le chapitre intitulé Le système de fichiers ext3 du Guide de personnalisation de Red Hat Linux. |
[3] | Pour plus d'informations sur SysV init, voir Section 1.4 Niveaux d'exécution de SysV Init. |
[4] | La commande update est utilisée pour nettoyer les tampons sales. |
[5] | Consultez Section 5.3.11 /proc/tty/ pour des informations supplémentaires sur les périphériques tty. |