Man Boot en français
BOOT(7) Manuel de l'administrateur Linux BOOT(7)
NOM
boot-scripts - Description generale du demarrage du systeme.
DESCRIPTION
La sequence de demarrage est variable en fonction du systeme mais peut
globalement etre decoupee selon les etapes suivantes : (i) amorcage
materiel, (ii) chargeur de demarrage, (iii) demarrage du noyau, (iv)
init et inittab, (v) scripts de demarrage. Nous allons decrire chacune
d'entre-elles plus en detail ci-dessous.
Amorcage materiel
Apres la mise sous tension ou un reset materiel, un programme stocke en
memoire morte (souvent une PROM) prend le controle. Sur les PC, on
appelle generalement ce programme le BIOS.
Ce programme effectue normalement un auto-test de la machine et accede
a la memoire non volatile pour y lire quelques parametres. Dans les
PC, cette memoire 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 generalement appelee nvram (non-volatile ram).
Les parametres stockes dans la nvram varient d'un systeme a l'autre,
mais au minimum, le programme d'amorcage materiel devrait savoir quel
est le peripherique d'amorcage, ou a defaut quels peripheriques il faut
essayer pour amorcer le systeme.
Ensuite, la phase de demarrage materiel accede au peripherique
d'amorcage, charge le chargeur de demarrage, qui est situe a une posi-
tion fixe sur le peripherique d'amorcage, et lui passe le controle.
Note : Nous n'abordons pas ici le demarrage a partir du reseau. Ceux
qui s'interessent a ce sujet devraient rechercher du cote de
DHCP, TFTP, PXE, Etherboot, et nous rejoindre au demarrage du
noyau.
Chargeur de demarrage
Sur les PC, le chargeur de demarrage est situe sur le premier secteur
du peripherique d'amorcage - c'est le MBR (Master Boot Record).
Sur la plupart des systemes, ce chargeur initial est tres limite du
fait de diverses contraintes. Meme sur des systemes autres que le PC,
il existe des limitations concernant la taille et la complexite de ce
chargeur, mais la taille du MBR des PC est limitee - 512 octets y com-
pris 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 demarrage complet.
Ainsi, sur la plupart des systemes d'exploitation, le chargeur initial
appelle un chargeur de demarrage secondaire situe sur une partition du
disque.
Sous Linux, le chargeur de demarrage est normalement lilo(8) ou
grub(8). Chacun peut etre installe soit en tant que chargeur sec-
ondaire (si le MBR installe par DOS pointe vers eux), soit en tant que
chargeur en deux parties, car ils fournissent un MBR special contenant
un code d'amorcage pour charger la seconde partie du chargeur a partir
de la partition principale.
Le role principal du chargeur de demarrage est de localiser le noyau
sur le disque, le charger et l'executer. La plupart des chargeurs de
demarrage sont interactifs, pour permettre la specification d'un noyau
alternatif (par exemple un noyau de sauvegarde dans le cas ou la
derniere version compilee ne fonctionne pas) et le passage de parame-
tres optionnels au noyau.
Demarrage du noyau
Quand le noyau est charge, il initialise les peripheriques (via leurs
pilotes), demarre le gestionnaire de swap (c'est un processus noyau ,
appele kswapd sur les noyaux Linux modernes), et monte le systeme de
fichiers racine - appele root filesystem - (/).
Quelques parametres relatifs a cela peuvent etre passes au noyau (par
exemple : on peut specifier un autre systeme de fichiers racine que
celui par defaut). Pour plus d'informations sur les parametres du noyau
Linux, voir bootparam(7).
C'est uniquement a cet instant que le noyau cree un premier (en espace
utilisateur) processus, qui porte le numero 1. Ce processus execute le
programme /sbin/init, en lui passant tout parametre qui n'est pas deja
gere par le noyau.
init et inittab
Quand init demarre, il lit /etc/inittab pour y trouver ses instruc-
tions. Ce fichier definit ce qui doit s'executer dans les differents
modes de fonctionnement (run-levels).
Cela donne a l'administrateur systeme une methode simple de gestion
dans laquelle chaque run-level est associe a un ensemble de services
(par exemple : S correspond a un mode maintenance (single-user), en
run-level 2, la plupart des services reseaux sont actifs, etc.).
L'administrateur peut changer le run-level courant par init(8) et con-
naitre le run-level courant par runlevel(8).
Toutefois, comme il n'est pas pratique de gerer les services individu-
ellement en editant ce fichier, inittab se limite a l'appel d'un ensem-
ble de scripts qui demarrent/arretent les services.
Scripts de demarrage
Note : La description suivante s'applique aux systemes bases sur Syteme
V-R4, qui couvre actuellement la plupart des Unices commerciaux
(Solaris, HP-UX, Irix, Tru64) ainsi que les distributions
majeures de Linux (RedHat, Debian, Mandrake, Suse, Caldera).
Quelques systemes (Slackware Linux, Gentoo Linux, FreeBSD,
OpenBSD) utilisent un procede quelque peu different pour les
scripts de demarrage.
Pour chaque service gere (messagerie, nfs, cron, etc.) il y a un script
de demarrage simple stocke dans un repertoire specifique (/etc/init.d
dans la majorite 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 arreter le service. Le script peut
eventuellement accepter d'autres parametres pratiques (par exemple :
restart , enchaine un stop suivi d'un start , status donne l'etat
du service). Un appel du script sans argument permet d'afficher tous
ceux possibles.
Repertoires d'ordonnancement
Pour permettre aux scripts specifiques de demarrer/arreter un run-level
specifique et dans un ordre particulier, il y a des repertoires
d'ordonnancement. Ce sont generalement /etc/rc[0-6S].d. Dans chacun de
ces repertoires, il y a des liens (generalement symboliques) vers les
scripts du repertoire /etc/init.d.
Un premier script (souvent /etc/rc) est appele par inittab(5) et
appelle lui-meme les scripts des services grce aux liens des reper-
toires d'ordonnancement. Tous les liens dont le nom commence par S
sont appeles avec l'argument start (et demarrent le service con-
cerne). Tous les liens dont le nom commence par K sont appeles avec
l'argument stop (et arretent le service concerne).
Pour definir l'odre de demarrage ou d'arret au sein d'un meme run-
level, les noms des liens contiennent des numeros d'ordre. Aussi, pour
plus de clarte, ils se terminent par le nom du service auquel il se
refere. Exemple : Le lien /etc/rc2.d/S80sendmail demarre le service
sendmail dans le run-level 2. Cela est fait apres l'execution 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 executes pour arreter les
services non concernes par le run-level, suivis des scripts S*
pour demarrer ceux qui le deviennent. L'ordre est exactement
celui du caractere d'expansion * , car l'appel successif des
differents scripts se fait par une boucle for . Pour schema-
tiser, rc execute 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 gerer l'ordre de demarrage et les run-levels, on doit gerer ces
liens. Toutefois, sur beaucoup de versions de Linux, il existe des
outils qui facilitent cela. (exemple : chkconfig(8)).
Configuration de demarrage
Habituellement, les demons demarres peuvent eventuellement recevoir des
options et arguments sur leur ligne de commande. Pour permettre aux
administrateurs systemes de modifier ces parametres sans editer le
script, des fichiers de configuration sont utilises. Ils sont stockes
dans un repertoire specifique (/etc/sysconfig sur les systemes RedHat
et Mandrake), et sont utilises par les scripts de demarrage.
Sur les anciens Unices, ces fichiers contenaient les options de ligne
de commande pour les demons, mais sur les systemes Linux modernes (et
aussi sur HP-UX), ces fichiers contiennent uniquement des variables
shell. Les scripts de demarrage du repertoire /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 realisee par Francois Micaux le 20 juin 2003, mise a jour par Alain Portal AT univ-montp2 DOT fr> le 23 decembre 2005 et revisee le 14 aot 2006.
L'equipe de traduction a fait le maximum pour realiser une adaptation
francaise de qualite. La version anglaise la plus a jour de ce document
est toujours consultable via la commande : LANG=C man 7 boot . N'hes-
itez pas a signaler a l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
LDP 25 juillet 2003 BOOT(7)
|