Red Hat Enterprise Linux 4: Guide de référence | ||
---|---|---|
Précédent | Chapitre 1. Processus de démarrage, Init et arrêt | Suivant |
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 principalement sur l'architecture x86.
Lors du démarrage d'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. C'est la raison pour laquelle le BIOS est enregistré en lecture-seule dans la mémoire morte et peut ainsi être utilisé à tout moment.
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 basés sur Itanium utilisent le Shell EFI (de l'anglais Extensible Firmware Interface).
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 présents afin de trouver un support amorçable ; s'il n'en trouve aucun, il cherche sur les disques durs du système. Dans la plupart des cas, l'ordre des unités recherchées lors du démarrage peut être contrôlé par un paramètre du BIOS ; il cherche sur le périphérique IDE maître sur le bus IDE principal. Le BIOS charge ensuite en mémoire tout programme résidant sur le premier secteur de ce périphérique appelé bloc de démarrage maître ou MBR(de l'anglais Master Boot Record). Le MBR a une taille de 512 octets seulement et contient des instructions de codes machine, appelée chargeur de démarrage, qui sont nécessaires pour démarrer l'ordinateur ainsi que la table des 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 chargeur de démarrage par défaut pour la plate-forme x86, à savoir GRUB. Selon l'architecture du système, le processus de démarrage peut varier légèrement. Reportez-vous à la Section 1.2.2.1 pour obtenir un bref aperçu des chargeurs de démarrage autres que ceux utilisés pour x86. Pour obtenir de plus amples informations sur la configuration et l'utilisation de GRUB, consultez le Chapitre 2.
Un chargeur de démarrage pour la plate-forme x86 fonctionne au minimum en deux étapes. La première est un petit binaire de code machine sur le MBR. Son seul rôle est de localiser le chargeur de démarrage pour l'Étape 2 et d'en charger la première partie en mémoire.
GRUB 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 obtenir de plus amples informations sur la façon de modifier ce fichier, reportez-vous à la Section 2.7.
![]() | Astuce |
---|---|
Si vous mettez à niveau le noyau en utilisant l'application Agent de mise à jour Red Hat, le fichier de configuration du chargeur de démarrage sera mis à jour automatiquement. De plus amples informations sur Red Hat Network se trouvent en ligne à l'adresse suivante : https://rhn.redhat.com/. |
Une fois que le chargeur de démarrage Étape 2 est en mémoire, il affiche l'écran graphique 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échées, choisir le système d'exploitation ou le noyau qu'il souhaite charger et valider ce choix en appuyant sur la touche
![]() | Remarque |
---|---|
Si la prise en charge par le noyau de Symmetric Multi-Processor (SMP) est installée, plusieurs options seront proposées lors du premier démarrage de votre système. Dans une telle situation, GRUB affiche Red Hat Enterprise Linux (<kernel-version>-smp), qui est le noyau SMP et Red Hat Enterprise Linux (<kernel-version>), qui est pour des processeurs simples (où <kernel-version> correspond à la version du noyau). Si vous rencontrez des problèmes en utilisant le noyau SMP, sélectionnez le noyau non-SMP au redémarrage. |
Une fois que le chargeur de démarrage Étape 2 a déterminé le noyau à lancer, 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-<kernel-version> (où <kernel-version> correspond à la version du noyau spécifiée dans les paramètres du chargeur de démarrage).
Pour obtenir des instructions sur la manière d'utiliser le chargeur de démarrage pour transmettre au noyau des arguments en ligne de commande, reportez-vous au Chapitre 2. Pour des informations sur la manière de changer le niveau d'exécution à l'invite du chargeur de démarrage, reportez-vous à la Section 2.8.
Le chargeur de démarrage place alors plusieurs images initramfs appropriées (ou une seule) en mémoire. Ensuite, par l'intermédiaire de cpio, le noyau décompresse ces images présentes dans la mémoire et les met sur /boot/, un système de fichiers virtuel basé sur la RAM. Les images initramfs sont utilisées par le noyau pour charger les pilotes et modules nécessaires au démarrage du système. Ce processus s'avère particulièrement important si votre système dispose de disques durs SCSI ou s'il utilise le système de fichiers ext3.
Une fois que le noyau et une ou plusieurs images initramfs sont chargées en mémoire, le chargeur de démarrage cède le contrôle du processus de démarrage au noyau.
Pour obtenir une présentation plus détaillé du chargeur de démarrage GRUB, reportez-vous au Chapitre 2.
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 Itanium utilise le chargeur de démarrage ELILO, l'architecture eServer pSeries d'IBM utilise YABOOT et les systèmes IBM s390 et eServer zSeries utilisent le chargeur de démarrage z/IPL.
Consultez le Guide d'installation de Red Hat Enterprise 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 non seulement initialise et configure immédiatement la mémoire de l'ordinateur, mais il configure également les divers composants matériels reliés au système, y compris tous les processeurs, les sous-systèmes d'E/S ainsi que les périphériques de stockage. Il recherche ensuite la ou les image(s) initrd compressée(s) dans un emplacement prédéterminé de la mémoire, effectue la décompression directement sur /sysroot/ et finalement charge tous les pilotes nécessaires. Ensuite, il initialise les dispositifs virtuels associés aux systèmes de fichiers, tels que LVM ou RAID logiciel, avant d'achever les processus initramfs et de libérer toute la mémoire que l'image du disque 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 pas faire grand chose avec ce système.
Afin de configurer l'environnement utilisateur, le noyau exécute le 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 le parent ou grand-parent de tous les processus qui sont lancés automatiquement sur le système. Tout d'abord, elle exécute le script /etc/rc.d/rc.sysinit qui définit le chemin d'accès de l'environnement, démarre swap, contrôle les systèmes de fichiers et exécute toutes les autres étapes nécessaires à l'initialisation du système. Par exemple, la plupart des systèmes utilisant une horloge, rc.sysinit lit le fichier de configuration /etc/sysconfig/clock pour initialiser l'horloge matérielle. Autre exemple : s'il existe des processus de port série spéciaux qui doivent être initialisés, rc.sysinit exécute le fichier /etc/rc.serial.
Ensuite la commande init exécute le script /etc/inittab qui décrit la manière selon laquelle le système devrait être configuré à chaque niveau d'exécution, SysV init runlevel. Les niveaux d'exécution sont des états ou modes définis par les services énumérés dans le répertoires /etc/rc.d/rc<x>.d/ de SysV, où <x> correspond au numéro du niveau d'exécution. Pour obtenir de plus amples informations sur les niveaux d'exécution (ou SysV init runlevels), reportez-vous à la Section 1.4.
Ensuite, la commande init configure la bibliothèque de fonctions sources, /etc/rc.d/init.d/functions, pour le système. Celle-ci indique comment démarrer ou arrêter un programme et comment déterminer le PID d'un programme.
Le programme init démarre l'ensemble des processus d'arrière-plan en consultant le répertoire rc approprié au niveau d'exécution spécifié comme valeur 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 K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local |
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, et ce, sans affecter les scripts auxquels ils font référence.
Le nom de chaque lien symbolique commence soit par K, soit par 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 à ce niveau d'exécution.
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/<command> stop, <command> correspondant au processus à arrêter. Elle démarre ensuite tous les liens symboliques S en émettant la commande /etc/rc.d/init.d/<command> 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 démarrer et arrêter des services. Par exemple, la commande /etc/rc.d/init.d/httpd stop arrêtera le Serveur HTTP 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 le démarrage se produira tôt. 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 utilisé pour la personnalisation du système. Reportez-vous à la Section 1.3 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 crée un processus /sbin/mingetty pour chaque console virtuelle (invites de connexion) assignée au niveau d'exécution. Les niveaux d'exécution de 2 à 5 ont tous six consoles virtuelles, tandis que le niveau d'exécution 1 (mode mono-utilisateur) n'a lui qu'une seule console virtuelle et que les niveaux d'exécution 0 et 6 n'en ont eux aucune. Le processus /sbin/mingetty ouvre des chemins de communication vers les périphériques tty[2], définit leurs modes, affiche l'invite de connexion, accepte le nom et le mot de passe de l'utilisateur, puis commence le processus de connexion.
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é [3] — gdm, kdm ou xdm, en fonction de ce qui est contenu dans le fichier /etc/sysconfig/desktop.
Une fois l'ensemble du processus terminé, le système fonctionne à un niveau d'exécution 5 et affiche un écran de connexion.
[1] | GRUB lit les systèmes de fichiers ext3 en tant que ext2, en abandonnant le fichier journal. Reportez-vous au chapitre intitulé Le système de fichiers ext3 du Guide d'administration système de Red Hat Enterprise Linux pour de plus amples informations sur le système de fichiers ext3. |
[2] | Consultez la Section 5.3.11 pour obtenir des informations supplémentaires sur les périphériques tty. |
[3] | Consultez la Section 7.5.2 pour obtenir davantage d'informations sur les gestionnaires d'affichage. |
Précédent | Sommaire | Suivant |
Processus de démarrage, Init et arrêt | Niveau supérieur | Exécution de programmes supplémentaires au démarrage |