Red Hat Enterprise Linux 3: 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. 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 eux 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 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 les chargeurs 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 à la Section 1.2.2.1 pour obtenir un bref aperçu des chargeurs de démarrage autres que ceux utilisés pour x86.
Sous Red Hat Enterprise 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 ou qui préfèrent l'utiliser. Pour obtenir de plus amples informations sur la configuration et l'utilisation de GRUB ou de LILO, reportez-vous au Chapitre 2.
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 obtenir de plus amples informations sur la façon de modifier ce fichier, reportez-vous à la Section 2.7.
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 à niveau votre noyau, vous devez exécuter la commande /sbin/lilo -v -v pour écrire les informations appropriées sur le MBR. Pour obtenir de plus amples informations sur le sujet, consultez la Section 2.8.
![]() | 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 obtenir de plus amples informations sur Red Hat Network, rendez-vous à 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 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 Enterprise Linux (<version-noyau>-smp), qui est le noyau SMP et Red Hat Enterprise 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 Chapitre 2. Pour des informations sur la manière de changer le niveau d'exécution à l'invite de GRUB ou LILO, lisez la Section 2.10.
Ensuite, le chargeur de démarrage place l'image disque RAM initial appropriée, appelée initrd, en mémoire. Cette image 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. Sa suppression 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 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 Alpha utilise le chargeur de démarrage aboot, l'architecture Itanium utilise le chargeur de démarrage ELILO, IBM pSeries utilise YABOOT et les systèmes IBM s390 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 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 d'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 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 l'élément parent ou grand-parent de tous les processus qui sont lancés automatiquement sur votre système. 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 et s'occupe de tout ce qui doit être fait sur le système au moment de son initialisation. Par exemple, la plupart des systèmes utilisent 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. 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 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 K10radiusd -> ../init.d/radiusd K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K15postgresql -> ../init.d/postgresql K16rarpd -> ../init.d/rarpd K20iscsi -> ../init.d/iscsi K20netdump-server -> ../init.d/netdump-server K20nfs -> ../init.d/nfs K20tomcat -> ../init.d/tomcat K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K35winbind -> ../init.d/winbind K36lisa -> ../init.d/lisa 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 K50vsftpd -> ../init.d/vsftpd K54pxe -> ../init.d/pxe 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 K74ntpd -> ../init.d/ntpd 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 K92ipvsadm -> ../init.d/ipvsadm K95firstboot -> ../init.d/firstboot S00microcode_ctl -> ../init.d/microcode_ctl 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 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 S59hpoj -> ../init.d/hpoj S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90cups -> ../init.d/cups S90FreeWnn -> ../init.d/FreeWnn S90xfs -> ../init.d/xfs 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, et ce, sans affecter 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 démarrer et arrêter des services. Par exemple, la commande /etc/rc.d/init.d/httpd stop arrêtera 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 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 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 établit un processus /sbin/mingetty pour chaque console virtuelle (invites de connexion) assignée au 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 périphériques tty[5], règle leurs modes, affiche l'invite de connexion, prend 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é [6] — gdm, kdm ou xdm, en fonction de ce qui est contenu dans le fichier /etc/sysconfig/desktop.
À ce stade, le système devrait fonctionner à un niveau d'exécution 5 et devrait afficher un écran de connexion.
[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 d'administration système de Red Hat Enterprise 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 d'administration système de Red Hat Enterprise Linux. |
[3] | Pour plus d'informations sur les niveaux d'exécution SysV init, voir la Section 1.4. |
[4] | La commande update est utilisée pour nettoyer les tampons sales. |
[5] | Consultez la Section 5.3.11 pour des informations supplémentaires sur les périphériques tty. |
[6] | Consultez la Section 7.5.2 plus 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 |