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 du système d'exploitation, (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 autotest 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.
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, consultez
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). 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
System V release 4, ce qui couvre actuellement la plupart
des systèmes UNIX commerciaux (Solaris, HP-UX, Irix, Tru64) ainsi
que les distributions majeures de Linux (Red Hat, Debian, Mandriva, SUSE,
Ubuntu). Certains systèmes (Slackware Linux, FreeBSD, OpenBSD)
utilisent un procédé quelque peu différent pour les
scripts de démarrage.
Pour chaque service géré (messagerie, serveur 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 »,
enchaîne 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
dans 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'ordre 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.
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 Red Hat et
Mandrake), et sont utilisés par les scripts de démarrage.
Sur les anciens systèmes UNIX, ces fichiers contenaient les options de
ligne de commande pour les démons, mais sur les systèmes Linux
modernes (et aussi sur HP-UX), 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)
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
François Micaux (2003), Alain Portal <
http://manpagesfr.free.fr/>
(2006). Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».