| Red Hat Linux 7.3: Guide de référence officiel Red Hat Linux | ||
|---|---|---|
| Précédent | Chapitre 3. Processus de démarrage, Init et arrêt | Suivant |
![]() | Remarque |
|---|---|
Cette section porte principalement sur le processus de démarrage x86. Le processus de démarrage de votre ordinateur peut varier légèrement en fonction de son architecture. Toutefois, le processus de démarrage par défaut de Red Hat Linux est identique pour toutes les architectures après que le noyau a été trouvé et chargé par l'ordinateur. Reportez-vous à la la section intitulée Différences du processus de démarrage d'autres architectures pour obtenir plus de renseignements au sujet de processus de démarrage non x86. |
Lorsque l'on démarre un ordinateur, le processeur recherche le BIOS (Basic Input/Output System) dans la mémoire morte (ROM) de la carte mère et l'exécute. Le programme du BIOS est écrit en lecture seulement dans la mémoire morte et peut toujours être utilisé. 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.
Le BIOS teste le système, recherche et vérifie les périphériques et recherche ensuite une unité qui sera utilisée pour amorcer le système. Normalement, il vérifie le lecteur de disquette (ou le lecteur de CD-ROM sur de nombreux ordinateurs plus récents) afin de trouver un support amorçable, s'il y en a un, puis se tourne vers le disque dur. L'ordre des unités utilisées pour le démarrage est généralement contrôlé par une configuration particulière du BIOS sur le système. Après avoir installé Red Hat Linux sur le disque dur de l'ordinateur, le BIOS cherche un bloc de démarrage maître (MBR) en commençant par le premier secteur du premier disque dur, charge son contenu dans la mémoire et lui donne le contrôle.
Ce chargeur de démarrage maître contient les instructions sur la façon de charger GRUB ou LILO (LInux LOader), en fonction du chargeur de démarrage installé. Le MBR charge le chargeur de démarrage, qui prend alors la relève (si le chargeur de démarrage est installé dans le MBR). Dans la configuration par défaut de Red Hat Linux, GRUB ou LILO utilise les paramètres dans le MBR pour afficher les options de démarrage et permet à l'utilisateur de spécifier quel système d'exploitation doit être lancé.
Cela entraîne la question suivante : "Comment le chargeur de démarrage fait-il dans le MBR pour savoir ce qu'il faut faire lorsque le MBR est lu ?". Les instructions pour LILO sont en fait déjà écrites à cet endroit par l'entremise de lilo et du fichier de configuration /etc/lilo.conf. Même les instructions pour GRUB sont écrites dans le fichier de configuration /boot/grub/grub.conf. Pour plus d'informations sur GRUB, consultez le Chapitre 4.
En général, vous n'avez pas à changer le bloc de démarrage maître sur votre disque dur à moins d'avoir besoin d'amorcer un système d'exploitation venant tout juste d'être installé ou de vouloir utiliser un nouveau noyau. Si vous devez créer un nouveau bloc de démarrage maître au moyen de LILO, mais utilisant une configuration différente, vous devrez modifier /etc/lilo.conf et exécuter lilo encore une fois.
![]() | Avertissement |
|---|---|
Si vous prévoyez de modifier /etc/lilo.conf, assurez-vous de faire une copie de sauvegarde du fichier avant d'y apporter des changements. De plus, assurez-vous d'avoir une disquette d'amorçage fonctionnelle à votre disposition, de sorte que vous puissiez démarrer le système et apporter des modifications au MBR s'il y a des problèmes. Lisez les pages de manuel concernant mkbootdisk pour en savoir plus sur la création d'une disquette d'amorçage. |
Le fichier /etc/lilo.conf est utilisé par lilo pour déterminer quel(s) système(s) d'exploitation utiliser ou avec quel noyau commencer, ainsi que pour savoir où l'installer (exemple : /dev/hda pour le premier disque dur IDE). Un fichier /etc/lilo.conf échantillon ressemble à ceci :
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message lba32 default=linux image=/boot/vmlinuz-2.4.0-0.43.6 label=linux initrd=/boot/initrd-2.4.0-0.43.6.img read-only root=/dev/hda5 other=/dev/hda1 label=dos |
Cet exemple montre un système qui est configuré pour amorcer deux systèmes d'exploitation : Red Hat Linux et DOS. Voici plus de détails sur certaines des lignes de ce fichier (votre fichier /etc/lilo.conf pourrait être légèrement différent) :
boot=/dev/hda indique à LILO de regarder sur le premier disque dur du premier contrôleur IDE.
map=/boot/map localise le fichier map. Pour une utilisation normale, ce nom ne devrait pas être modifié.
install=/boot/boot.b indique à LILO d'installer le fichier spécifié en tant que nouveau secteur de démarrage. Pour une utilisation normale, cela ne devrait pas être modifié. Si la ligne install manque, LILO prendra par défaut /boot/boot.b en tant que fichier à utiliser.
L'existence de prompt indique à LILO de
vous afficher tout ce qui est défini dans la ligne
message. Bien qu'il ne soit pas recommandé
d'éliminer la ligne prompt, si vous le faites,
vous pourrez tout de même obtenir une invite en appuyant sur la touche
timeout=50 définit combien de temps LILO doit attendre que l'utilisateur entre une commande avant d'amorcer la ligne d'entrée default. Cette période de temps est mesurée en dixièmes de seconde et est réglée sur 50 par défaut.
message=/boot/message se réfère à l'écran que LILO affiche pour vous laisser sélectionner le système d'exploitation ou le noyau à amorcer.
lba32 décrit la géométrie du disque dur à LILO. Une autre ligne commune que l'on retrouve à cet endroit est linear. Vous ne devriez pas changer cette ligne à moins d'être sûr de ce que vous faites. Autrement, vous pourriez mettre votre ordinateur dans un état où il lui est impossible d'être redémarré.
default=linux se réfère au système d'exploitation par défaut que LILO doit amorcer au moyen des options énumérées sous cette ligne. Le nom linux fait référence à la ligne label située sous chacune des options de démarrage.
image=/boot/vmlinuz-2.4.0-0.43.6 spécifie le noyau Linux à amorcer au moyen de cette option.
label=linux donne le nom de l'option du système d'exploitation sur l'écran LILO. Dans ce cas, il s'agit également du nom auquel fait référence la ligne default.
initrd=/boot/initrd-2.4.0-0.43.6.img se réfère à l'image disque RAM initial qui est utilisée lors du démarrage pour initialiser et lancer les périphériques qui font en sorte qu'il est possible d'amorcer le noyau. Le disque RAM initial est un ensemble de pilotes nécessaires au fonctionnement de l'unité de disque dur et tout ce qui sert à charger le noyau. Vous ne devriez jamais essayer de partager des disques RAM initiaux entre différents ordinateurs à moins que la configuration de leur matériel ne soit identique (et même dans ce cas, c'est une bien mauvaise idée).
read-only spécifie que la partition racine (voir la ligne root en-dessous) ne peut être modifiée ; elle ne peut qu'être lue.
root=/dev/hda5 indique à LILO quelle partition de disque utiliser en tant que partition root.
LILO affiche ensuite l'écran Red Hat Linux initial sur lequel apparaissent les systèmes
d'exploitation ou les noyaux qui, selon la configuration choisie, doivent
être amorcés. Si vous n'avez installé que Red Hat Linux et n'avez rien changé dans
/etc/lilo.conf, vous ne verrez que l'option
linux. Si vous installez le support du noyau SMP, vous verrez l'option linux-up. Si vous avez configuré LILO de façon à ce
qu'il amorce également d'autres systèmes d'exploitation, cet écran vous donnera
la possibilité de choisir quel système amorcer. Utilisez les flèches de direction
pour choisir le système d'exploitation désiré et appuyez sur
Si vous désirez avoir une invite pour donner des commandes à
LILO, appuyez sur
Si LILO amorce Linux, il charge d'abord le noyau dans la mémoire, un fichier vmlinuz (avec un numéro de version, tel que vmlinuz-2.4.0-xx par exemple) qui se trouve dans le répertoire /boot. Ensuite, le noyau donne le contrôle à init.
![]() | Avertissement |
|---|---|
Ne supprimez le répertoire /initrd/ sous aucun prétexte. Le retirer empêcherait votre système de démarrer, avec un message d'erreur panique noyau. |
Ainsi, le noyau étant chargé dans la mémoire et opérationnel, Linux est déjà amorcé, bien qu'à un niveau encore très bas. Cependant, comme aucune application n'utilise le noyau et que l'utilisateur ne peut donner d'informations utiles au système, on ne peut en faire grand chose. Le programme init résout ce problème en démarrant les divers services qui permettent au système de jouer son rôle.
Le noyau trouve /sbin/init et l'exécute ; init coordonne ensuite le reste du processus de démarrage.
Lorsque init est lancé, il devient l'élément parent ou grand-parent de tous les processus qui sont lancés automatiquement sur votre système Red Hat Linux. D'abord, il exécute le script /etc/rc.d/rc.sysinit, qui établit les chemins d'exécution par défaut, initialise le swap, vérifie les systèmes de fichiers, etc. Bref, rc.sysinit s'occupe de tout ce dont a besoin votre système lors de son initialisation. La plupart des systèmes utilisent une horloge, donc rc.sysinit utilise le fichier /etc/sysconfig/clock sur ceux-ci pour initialiser l'horloge. Si vous avez des processus de port série spéciaux à initialiser, rc.sysinit peut aussi exécuter rc.serial.
Ensuite, init exécute le script /etc/inittab, qui décrit comment le système doit être configuré dans chaque niveau d'exécution et définit le niveau d'exécution par défaut. (Voir la la section intitulée Niveaux d'exécution d'Init pour avoir plus de détails sur les niveaux d'exécution d'init.) Ce fichier établit notamment que /sbin/update doit être exécuté chaque fois qu'un niveau d'exécution commence. Le programme update sert à recopier périodiquement les tampons mémoire vers les disques.
Lorsque le niveau d'exécution change, init utilise les scripts dans /etc/rc.d/init.d pour faire démarrer ou arrêter différents services, tels que votre serveur Web, votre serveur DNS, etc. Premièrement, init définit la bibliothèque de fonctions source pour le système (/etc/rc.d/init.d/functions habituellement), qui explique comment démarrer ou arrêter un programme et comment trouver l'identification des paramètres d'un programme. Puis, init détermine le niveau d'exécution en cours ainsi que le niveau précédent.
Ensuite, init lance toutes les tâches de fond nécessaires pour que le système puisse s'exécuter en cherchant dans le répertoire rc approprié pour ce niveau d'exécution (/etc/rc.d/rc<X>.d, où <X> est numéroté de 0 à 6). init exécute chacun des scripts kill (leur nom de fichier commencent par un K) avec un paramètre stop. Par la suite, init exécute tous les scripts de démarrage (leur nom de fichier commencent par un S) dans le répertoire approprié du niveau d'exécution avec un start afin que tous les services et applications soient lancés correctement. En fait, vous pouvez exécuter ces scripts de façon manuelle après que le système a fini l'amorçage au moyen de commandes telles que /etc/rc.d/init.d/httpd stop ou service httpd stop si vous êtes l'utilisateur root. Cela arrêtera le serveur httpd.
Aucun des scripts qui lancent et arrêtent les services n'est réellement situé dans /etc/rc.d/rc<x>.d. Tous les fichiers dans /etc/rc.d/rc<x>.d sont des liens symboliques qui pointent vers les scripts, qui sont situés dans /etc/rc.d/init.d. Un lien symbolique n'est autre qu'un fichier qui pointe vers un autre fichier. Dans le cas présent, on en fait usage car ils peuvent être créés et éliminés sans avoir aucun effet sur les scripts eux-mêmes, qui arrêtent ou démarrent les services. Les liens symboliques sont numérotés et ont un ordre particulier afin qu'ils s'exécutent dans cet ordre. Il vous est possible de changer l'ordre dans lequel les services sont arrêtés ou démarrés en changeant le nom du lien symbolique se référant au script qui démarre ou arrête un service donné. Vous pouvez donner aux liens symboliques le même numéro qu'un autre lien si vous voulez que ce service démarre ou arrête juste avant ou juste après cet autre service.
Exemple : pour le niveau d'exécution 5, init cherche dans le répertoire /etc/rc.d/rc5.d et pourrait trouver ce qui suit (votre système et votre configuration peuvent varier) :
K01pppoe -> ../init.d/pppoe K05innd -> ../init.d/innd K10ntpd -> ../init.d/ntpd K15httpd -> ../init.d/httpd K15mysqld -> ../init.d/mysqld K15pvmd -> ../init.d/pvmd K16rarpd -> ../init.d/rarpd K20bootparamd -> ../init.d/bootparamd K20nfs -> ../init.d/nfs K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwalld -> ../init.d/rwalld K20rwhod -> ../init.d/rwhod K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30mcserv -> ../init.d/mcserv K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K50snmpd -> ../init.d/snmpd K54pxe -> ../init.d/pxe K55routed -> ../init.d/routed K60mars-nwe -> ../init.d/mars-nwe K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K75gated -> ../init.d/gated K80nscd -> ../init.d/nscd K84ypserv -> ../init.d/ypserv K90ups -> ../init.d/ups K96irda -> ../init.d/irda S05kudzu -> ../init.d/kudzu S06reconfig -> ../init.d/reconfig S08ipchains -> ../init.d/ipchains S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13portmap -> ../init.d/portmap S14nfslock -> ../init.d/nfslock S18autofs -> ../init.d/autofs S20random -> ../init.d/random S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S35identd -> ../init.d/identd S40atd -> ../init.d/atd S45pcmcia -> ../init.d/pcmcia S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S60lpd -> ../init.d/lpd S75keytable -> ../init.d/keytable S80isdn -> ../init.d/isdn S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90FreeWnn -> ../init.d/FreeWnn S90xfs -> ../init.d/xfs S95anacron -> ../init.d/anacron S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local |
Ces liens symboliques indiquent à init qu'il doit arrêter pppoe, innd, ntpd, httpd, mysqld, pvmd, rarpd, bootparamd, nfs, rstatd, rusersd, rwalld, rwhod, squid, amd, mcserv, yppasswdd, dhcpd, smb, vncserver, arpwatch, named, snmpd, pxe, routed, mars-nwe, ldap, kadmin, kprop, krb524, krb5kdc, gated, nscd, ypserv, ups et irda. Une fois tous ces processus arrêtés, init cherche dans le même répertoire et trouve des scripts de démarrage pour kudzu, reconfig, ipchains, portmap, nfslock, autofs, random, netfs, apmd, identd, atd, pcmcia, sshd, rawdevices, xinetd, lpd, keytable, isdn, sendmail, gpm, canna, crond, FreeWnn, xfs, anacron et rhnsd. La dernière chose que fait init est d'exécuter /etc/rc.d/rc.local afin de lancer tout script spécial configuré pour cet ordinateur hôte. A ce stade, le système est considéré comme opérationnel au niveau d'exécution 5.
Lorsqu'init a parcouru tous les niveaux d'exécution, le script /etc/inittab lance un processus getty pour chaque console virtuelle (invites de connexion) et pour chaque niveau d'exécution (les niveaux d'exécution 2 à 5 obtiennent les six consoles, alors que le niveau d'exécution 1, qui est un mode mono-utilisateur, n'en obtient qu'une ; les niveaux 0 et 6 n'obtiennent aucune console virtuelle). Fondamentalement, getty ouvre des lignes pour terminaux tty [1], règle leurs modes, imprime l'invite de login, prend le nom d'utilisateur, puis commence un processus de login pour l'utilisateur concerné. Cela permet aux utilisateurs de s'authentifier dans le système et de commencer à l'utiliser.
En outre, /etc/inittab indique à
init comment interpréter la combinaison des touches
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 si vous utilisez GNOME, kdm si vous utilisez KDE ou xdm si vous utilisez AnotherLevel) en fonction de ce qui est contenu dans le répertoire /etc/sysconfig/desktop.
A ce stade, le système devrait afficher une invite de connexion. Tout cela s'est produit en quelques secondes seulement.
init SysV est le processus init standard de l'univers Linux pour le contrôle de l'exécution de logiciels au démarrage car il est facile à utiliser, plus puissant et plus flexible que le programme init BDS traditionnel.
init SysV est aussi différent de init BDS du fait que ses fichiers de configuration sont dans /etc/rc.d au lieu d'être situés directement dans /etc. Dans /etc/rc.d, vous trouverez rc, rc.local, rc.sysinit et les répertoires suivants :
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d |
init SysV représente chacun des niveaux d'exécution d'init avec un répertoire séparé, au moyen de liens symboliques dans chaque répertoire, afin que init puisse arrêter ou démarrer les services au fur et à mesure que le système passe d'un niveau d'exécution à l'autre.
Pour résumer le tout, la chaîne des événements d'un démarrage init SysV se présente comme suit :
Le noyau recherche init dans le répertoire /sbin.
init exécute le script /etc/rc.d/rc.sysinit.
rc.sysinit prend en charge la plupart des processus du chargeur de démarrage et exécute ensuite rc.serial (s'il existe).
init exécute tous les scripts pour le niveau d'exécution par défaut.
init exécute /etc/rc.d/rc.local.
Le niveau d'exécution par défaut est défini dans /etc/inittab. Vous devriez avoir une ligne près du début qui ressemble à ceci :
id:3:initdefault: |
Dans cet exemple, le niveau d'exécution par défaut est 3, soit le chiffre qui suit le premier deux-points. Si vous désirez le changer, vous pouvez modifier manuellement /etc/inittab. Soyez très prudent lorsque vous apportez des changements au fichier inittab.
Si vous utilisez LILO comme chargeur de démarrage, vous pouvez réparer le fichier
inittab. Pour ce faire, redémarrez le système, accédez à l'invite
boot: à l'aide de
boot: linux single |
Si vous utilisez le chargeur de démarrage GRUB, vous pouvez réparer le fichier inittab en suivant la procédure ci-dessous
Dans l'écran graphique de GRUB, sélectionnez l'étiquette de démarrage
Red Hat Linux et appuyez sur
Descendez jusqu'à la ligne du noyau et appuyez sur
A l'invite, entrez single et appuyez sur
Vous retournerez à l'écran de GRUB contenant les informations sur le noyau. Appuyez sur la touche
![]() | Astuce |
|---|---|
Il est aussi possible de changer le niveau d'exécution au démarrage avec GRUB en utilisant la même méthode que ci-dessus, sauf en remplaçant single avec, par exemple, 3 ou 5. Le reste des étapes reste intégralement comme ci-dessus. |
Ceci devrait vous permettre de démarrer en mode mono-utilisateur afin de modifier à nouveau inittab et de rétablir les valeurs initiales.
Maintenant, nous aborderons la question des informations contenues dans les fichiers qui se trouvent dans /etc/sysconfig et qui définissent les paramètres utilisés par les différents services au moment de leur démarrage.
| [1] | Consultez la section intitulée /proc/tty dans Chapitre 2 pour des informations supplémentaires sur les périphériques tty. |
| Précédent | Sommaire | Suivant |
| Processus de démarrage, Init et arrêt | Niveau supérieur | Information Sysconfig |