Provided by:
manpages-fr_1.67.0-1_all 
NOM
boot-scripts - Description générale du démarrage du système.
DESCRIPTION
La séquence de démarrage est variable en fonction du système mais peut
globalement être découpée selon les étapes suivantes : (i) amorçage
matériel, (ii) chargeur de démarrage, (iii) démarrage du noyau, (iv)
init et inittab, (v) scripts de démarrage. Nous allons décrire chacune
d’entre-elles plus en détail ci-dessous.
Amorçage matériel
Après la mise sous tension ou un reset matériel, un programme stocké en
mémoire morte (souvent une PROM) prend le contrôle. Sur les PC, on
appelle généralement ce programme le BIOS.
Ce programme effectue normalement un auto-test de la machine et accède
à la mémoire non volatile pour y lire quelques paramètres. Dans les
PC, cette mémoire est maintenue par une batterie de type CMOS. Ainsi
la plupart des gens l’appellent CMOS, alors qu’en dehors du monde des
PC, elle est généralement appelée nvram (non-volatile ram).
Les paramètres stockés dans la nvram varient d’un système à l’autre,
mais au minimum, le programme d’amorçage matériel devrait savoir quel
est le périphérique d’amorçage, ou à défaut quels périphériques il faut
essayer pour amorcer le système.
Ensuite, la phase de démarrage matériel accède au périphérique
d’amorçage, charge le chargeur de démarrage, qui est situé à une
position fixe sur le périphérique d’amorçage, et lui passe le contrôle.
Note : Nous n’abordons pas ici le démarrage à partir du réseau. Ceux
qui s’intéressent à ce sujet devraient rechercher du côté de
DHCP, TFTP, PXE, Etherboot, et nous rejoindre au démarrage du
noyau.
Chargeur de démarrage
Sur les PC, le chargeur de démarrage est situé sur le premier secteur
du périphérique d’amorçage - c’est le MBR (Master Boot Record).
Sur la plupart des systèmes, ce chargeur initial est très limité du
fait de diverses contraintes. Même sur des systèmes autres que le PC,
il existe des limitations concernant la taille et la complexité de ce
chargeur, mais la taille du MBR des PC est limitée - 512 octets y
compris la table de partition (64 octets) et un identifiant de disque
(2 octets) ne laissent que 446 octets pour le code - et rend quasiment
impossible le stockage d’un chargeur de démarrage complet.
Ainsi, sur la plupart des systèmes d’exploitation, le chargeur initial
appelle un chargeur de démarrage secondaire situé sur une partition du
disque.
Sous Linux, le chargeur de démarrage est normalement lilo(8) ou
grub(8). Chacun peut être installé soit en tant que chargeur
secondaire (si le MBR installé par DOS pointe vers eux), soit en tant
que chargeur en deux parties, car ils fournissent un MBR spécial
contenant un code d’amorçage pour charger la seconde partie du chargeur
à partir de la partition principale.
Le rôle principal du chargeur de démarrage est de localiser le noyau
sur le disque, le charger et l’exécuter. La plupart des chargeurs de
démarrage sont interactifs, pour permettre la spécification d’un noyau
alternatif (par exemple un noyau de sauvegarde dans le cas où la
dernière version compilée ne fonctionne pas) et le passage de
paramètres optionnels au noyau.
Démarrage du noyau
Quand le noyau est chargé, il initialise les périphériques (via leurs
pilotes), démarre le gestionnaire de swap (c’est un « processus
noyau », appelé kswapd sur les noyaux Linux modernes), et monte le
système de fichiers racine - appelé root filesystem - (/).
Quelques paramètres relatifs à cela peuvent être passés au noyau (par
exemple : on peut spécifier un autre système de fichiers racine que
celui par défaut). Pour plus d’informations sur les paramètres du noyau
Linux, voir bootparam(7).
C’est uniquement à cet instant que le noyau crée un premier (en espace
utilisateur) processus, qui porte le numéro 1. Ce processus exécute le
programme /sbin/init, en lui passant tout paramètre qui n’est pas déjÃ
géré par le noyau.
init et inittab
Quand init démarre, il lit /etc/inittab pour y trouver ses
instructions. Ce fichier définit ce qui doit s’exécuter dans les
différents modes de fonctionnement (run-levels).
Cela donne à l’administrateur système une méthode simple de gestion
dans laquelle chaque run-level est associé à un ensemble de services
(par exemple : S correspond à un mode maintenance (single-user), en
run-level 2, la plupart des services réseaux sont actifs, etc.).
L’administrateur peut changer le run-level courant par init(8) et
connaître le run-level courant par runlevel(8).
Toutefois, comme il n’est pas pratique de gérer les services
individuellement en éditant ce fichier, inittab se limite à l’appel
d’un ensemble de scripts qui démarrent/arrêtent les services.
Scripts de démarrage
Note : La description suivante s’applique aux systèmes basés sur
SYSV-R4, qui couvre actuellement la plupart des Unices
commerciaux (Solaris, HPUX, Irix, Tru64) ainsi que les
distributions majeures de Linux (RedHat, Debian, Mandrake, Suse,
Caldera). Quelques systèmes (Slackware Linux, Gentoo Linux,
FreeBSD, OpenBSD) utilisent un procédé quelque peu différent
pour les scripts de démarrage.
Pour chaque service géré (messagerie, nfs, cron, etc.) il y a un script
de démarrage simple stocké dans un répertoire spécifique (/etc/init.d
dans la majorité des versions de Linux). Chacun de ces scripts accepte
en unique argument le mot « start » -- dont l’effet est le lancement du
service, ou le mot « stop » -- pour arrêter le service. Le script peut
éventuellement accepter d’autres paramètres pratiques (par exemple :
« restart », enchaine un « stop » suivi d’un « start », « status »
donne l’état du service). Un appel du script sans argument permet
d’afficher tous ceux possibles.
Répertoires dâ€â€™ordonnancement
Pour permettre aux scripts spécifiques de démarrer/arrêter un run-level
spécifique et dans un ordre particulier, il y a des répertoires
dâ€â€™ordonnancement. Ce sont généralement /etc/rc[0-6S].d. Dans chacun de
ces répertoires, il y a des liens (généralement symboliques) vers les
scripts du répertoire /etc/init.d.
Un premier script (souvent /etc/rc) est appelé par inittab(5) et
appelle lui-même les scripts des services grâce aux liens des
répertoires d’ordonnancement. Tous les liens dont le nom commence par
« S » sont appelés avec l’argument « start » (et démarrent le service
concerné). Tous les liens dont le nom commence par « K » sont appelés
avec l’argument « stop » (et arrêtent le service concerné).
Pour définir l’odre de démarrage ou d’arrêt au sein d’un même run-
level, les noms des liens contiennent des numéros d’ordre. Aussi, pour
plus de clarté, ils se terminent par le nom du service auquel il se
réfère. Exemple : Le lien /etc/rc2.d/S80sendmail démarre le service
sendmail dans le run-level 2. Cela est fait après l’exécution de
/etc/rc2.d/S12syslog mais avant celle de /etc/rc2.d/S90xfs.
Si l’on lit le script /etc/rc, on constate ce qui suit :
En premier lieu, les scripts K* sont exécutés pour arrêter les
services non concernés par le run-level, suivis des scripts S*
pour démarrer ceux qui le deviennent. L’ordre est exactement
celui du caractère d’expansion « * », car l’appel successif des
différents scripts se fait par une boucle « for ». Pour
schématiser, rc exécute « for i in /etc/rc$runlevel.d/K*; do $i
stop ; done » puis ensuite « for i in /etc/rc.$runlevel.d/S*; do
$i start ; done ».
Pour gérer l’ordre de démarrage et les run-levels, on doit gérer ces
liens. Toutefois, sur beaucoup de versions de Linux, il existe des
outils qui facilitent cela. (exemple : chkconfig(8)).
Configuration de démarrage
Habituellement, les démons démarrés peuvent éventuellement recevoir des
options et arguments sur leur ligne de commande. Pour permettre aux
administrateurs systèmes de modifier ces paramètres sans éditer le
script, des fichiers de configuration sont utilisés. Ils sont stockés
dans un répertoire spécifique (/etc/sysconfig sur les systèmes RedHat
et Mandrake), et sont utilisés par les scripts de démarrage.
Sur les anciens Unices, ces fichiers contenaient les options de ligne
de commande pour les démons, mais sur les systèmes Linux modernes (et
aussi sur HPUX), ces fichiers contiennent uniquement des variables
shell. Les scripts de démarrage du répertoire /etc/init.d sourcent (par
la commande interne « . » du shell) les fichiers de configuration et
utilisent ensuite les variables.
FICHIERS
/etc/init.d/, /etc/rc[S0-6].d/. /etc/sysconfig/
VOIR AUSSI
inittab(5), bootparam(7), init(8), runlevel(8), shutdown(8)
TRADUCTION
Ce document est une traduction réalisée par François Micaux <fmicaux AT
actilis DOT net> le 20 juin 2003 et révisée par Alain Portal <aportal
AT univ-montp2 DOT fr> le 23 décembre 2005.
L’équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document
est toujours consultable via la commande : « LANG=en man 7 boot ».
N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas,
toute erreur dans cette page de manuel.