Démarrage du système
Le démarrage du système implique quatre programmes
lancés successivement :
le BIOS(Basic Input Output System),
le chargeur de démarrage,
le noyau
le processus init.
BIOS
BIOS = Basic Input/Output
system : système élémentaire
d'entrée/sortie. C'est un
ensemble de fonctions contenu
dans la mémoire morte (ROM) de
la carte mère d'un ordinateur.
Exécute des opérations de
vérification de l'intégrité du
système.
Il charge les 512 premiers
octets, ces 512 octets constituent
MBR= Master Boot Record : la zone
amorce.
Le MBR est le premier secteur d’un
périphérique d’amorçage (disque dur,cd
,clé usb)
La taille de cette zone est de 512
octets au maximum. Elle contient :
◦ le programme d'amorçage se trouve dans
les 446 premier octets.
◦ la table des partitions (les 4 partitions
primaires) du disque dur sur les 64 octets
suivants.
◦ vérification de la validité du MBR dans les 2
derniers octets.
GRUB
Le chargeur de démarrage Grub
(Grand Unified Bootloader) est utilisé
sur la plupart des distributions Linux.
Lorsque l’ordinateur héberge plusieurs
systèmes (on parle alors de multi-
amorçage), il permet à l'utilisateur de
choisir quel système démarrer.
Il présente une interface qui permet à
l'utilisateur de choisir quel système
d'exploitation démarrer.
Simplement, GRUB charge et exécute
le noyau sélectionné et l'image initrd
(image d'un système minimal initialisé
au démarrage du système = Initial
Noyau
Le chargeur de démarrage
exécute le noyau. Ce
dernier continue le
démarrage de la machine,
il détecte et initialise les
périphériques, monte la
partition racine et exécute
le programme /sbin/init.
Processus init
Le processus init est le premier processus
utilisateur créé par le noyau lors du
démarrage du système. Il utilise les
niveaux d'exécution pour définir l'état du
système à un instant donné. Chaque
niveau d'exécution contient une liste de
services à arrêter ou à démarrer.
Lors du démarrage du système, le
processus init détermine, à partir du
fichier de configuration /etc/inittab, le
niveau d'exécution par défaut, et démarre
les applications et les services requis dans
ce niveau.
init identifie le niveau
d'exécution dans le fichier
/etc/inittab et l'utilise pour
charger les programmes associés
au niveau.
En général, une distribution Linux
fonctionne sur le niveau 5 ou 3.
Lors de l'arrêt du système, init
bascule vers le niveau
d’exécution numéro 0. Ce
niveau d'exécution est
configuré de telle sorte que
toutes les applications et tous
les services seront arrêtés.
Niveaux d’exécution
Lorsque votre système Linux
démarre, vous apercevez (en
appuyant sur la touche <ESC> afin
de voir la version « verbeuse » du
démarrage) divers services qui sont
chargés. Ce sont les programmes du
niveau d'exécution sur lequel votre
système fonctionne qui sont chargés
à partir du répertoire représentant le
niveau d'exécution du système.
Niveaux d’exécution
Un niveau d’exécution, ou
runlevel, est un état dans lequel
se trouve un système Unix/Linux.
Cet état est contrôlé par init.
Chaque état dispose de sa propre
configuration.
Pour chaque niveau d’exécution n, il existe
un répertoire rcn.d qui contient des liens
symboliques (raccourcis) vers les services
présents dans /etc/init.d à lancer ou
arrêter. Ce répertoire peut être à différents
endroits selon la distribution :
Red Hat : /etc/rc.d/rcn.d avec des liens
sur /etc/rcn.d
openSUSE : /etc/init.d/rcn.d sachant
que /etc/rc.d pointe sur /etc/init.d
Debian : /etc/rcn.d
Niveaux d’exécution
Il existe sept niveaux d'exécution possibles, allant
de 0 à 6. Chaque distribution les définit à sa
manière, mais certains niveaux d'exécution sont
les mêmes pour toutes les distributions. C'est le
cas des niveaux d'exécution 0, 1et 6.
Le niveau d'exécution 0 est utilisé pour l'arrêt du
système, le niveau d'exécution 1 est utilisé pour
le démarrage du système en mode mono-
utilisateur – ou mode dépannage – et le niveau
d'exécution 6 est utilisé lors du redémarrage du
système.
Niveaux d’exécution
Sur la distribution Debian et ses
dérivés les niveaux d'exécution
de 2 à 5 sont tous en mode multi-
utilisateurs. Et tous les services
requis sont généralement
configurés pour être démarrés
pour ces niveaux d'exécution.
Niveaux d’exécution
Numéro Désignation Description
Arrêt Passer dans ce niveau provoque un arrêt de
0 la machine.
Maintenance On a directement accès à un shell, mais
1 quasiment aucun service n'est lancé. Utile
mono utilisateur pour le dépannage en cas de problème
important.
Multi-utilisateurs Plusieurs utilisateurs peuvent se connecter
2 simple en mode texte. Mais les services sont
limités (souvent pas de réseau par
exemple).
Multi-utilisateurs Tous les services nécessaires sont démarrés
3 complet et plusieurs utilisateurs peuvent se
connecter en mode texte.
Mode utilisateur Généralement non utilisé, il peut être
4 librement utilisé.
Graphique Identique au mode 3, mais les utilisateurs
5 peuvent se connecter en mode graphique et
disposer d'un gestionnaire de fenêtre.
Redémarrage Passer dans ce niveau redémarre la
6 machine.
Le fichier inittab
Le fichier de configuration de init est /etc/inittab.
Ce fichier spécifie le niveau d'exécution par défaut
du système.
Il détaille également les autres niveaux d'exécution,
et où trouver la liste des services à démarrer ou
arrêter à chaque niveau d'exécution.
Le format d'une ligne du fichier /etc/inittab est :
Id:[niveaux]:action:commande
Id :chaîne alphanumérique d’un ou deux caractères.
identifie la ligne.Pas d’autres contraintes que d’éviter
deux lignes avec le même identifiant.
niveaux : la liste des niveaux d'exécution pour lesquels
l'action doit être réalisée ;
action : décrit l'action à réaliser
commande : spécifie la commande à exécuter.
Action Signification
Définit le niveau par défaut lors du boot et du lancement
initdefault
d’init.
Exécuté une seule et unique fois lors du démarrage du
sysinit
système.
Ne lancer le processus qu'au démarrage du système et ne
boot pas attendre qu'il se termine (le champ « niveaux » est
ignoré).
le programme est exécuté pendant le démarrage du
bootwait système, et init attend qu’il se termine. Le champ niveau
est ignoré ;
off. La ligne est ignorée, La commande du dernier champ ne
doit pas être exécutée.
Le programme est exécuté lorsque le niveau d'exécution
once
spécifié est appelé, ne pas attendre qu'il soit terminé.
Lancer le processus et attendre qu'il se termine avant de
Wait
passer à l'entrée suivante d'inittab
La commande est lancée pour les niveaux concernés. Si le
respawn
processus se termine, il est automatiquement relancé.
Le programme est exécuté quand la machine est sur le point
de s'éteindre. Ce cas se produit quand la machine est
powerwait branchée sur un onduleur et que la batterie est presque
déchargée ;
Idem, mais sans attente de la fin d’exécution de la
powerfail
commande.
powerokwait La commande est lancée lorsque le courant est rétabli.
le programme est exécuté lorsque init reçoit le signal
ctrlaltdel SIGINT. Cela signifie que quelqu'un sur la console système a
tapé la combinaison de touches [Ctrl]-[Alt]-[Supp].
EXEMPLE
Voici un exemple de fichier /etc/inittab sous la distribution Redhat :
# Le niveau d'exécution par défaut (le 2)
id:2:initdefault:
# Le premier script à démarrer
# signifie qu'init doit lancer le script /etc/rc.d/rc.sysinit lors de
l'initialisation du système, quel que soit le niveau d'exécution.(le
champ « niveaux » est ignoré)
si::sysinit:/etc/rc.d/rc.sysinit
# lancer le processus et attendre qu'il se termine avant de passer
à l'entrée
# suivante d'inittab. Ce type d'entrée sert principalement à lancer
les scripts
# d'initialisation pour chaque niveau
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
#Le processus sera exécuté lorsqu'init recevra le
signal SIGINT (généré par la combinaison de touches CTRL-ALT-
SUPPR). Elle sert généralement à arrêter et/ou redémarrer le
système. Exemple : ca::ctrlaltdel:/sbin/shutdown -t3 -h now
#lancer le processus et le relancer automatiquement lorsqu'il se
termine. Elle est utilisée pour la gestion des terminaux
1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
indique qu'à tous les niveaux multi-utilisateurs (2 à 5),
la commande mingetty être relancée sur les
terminaux tty1 à tty5 lorsqu'elle se terminera (afin de
pouvoir se logger, se délogger et se relogger). Pour le
niveau 1 (mono-utilisateur), seul le terminal tty1 sera
utilisable.
Gestion des niveaux
d’exécution
Le processus init utilise une série
de scripts stockés sous les
répertoires /etc/rcN.d où N est le
niveau d'exécution. Par exemple
le répertoire /etc/rc3.d contient
les services du niveau
d'exécution 3.
Gestion des niveaux
d’exécution
Affichage du niveau actuel
Le niveau d’exécution actuel est
visible avec la commande runlevel.
La première valeur retournée est
le niveau précédent le niveau
actuel. Un N signifie qu’il n’y a pas
de précédent niveau. La seconde
valeur est le niveau actuel.
# runlevel
N5
Changement de niveau d’exécution
Vous pouvez changer de niveau
à la volée après le démarrage
de la machine avec la
commande /sbin/init ou
/sbin/telinit, cette dernière
étant un simple lien symbolique
vers init. La commande suivante
passe au niveau 5.
# telinit 5
Gestion des services
Les niveaux d'exécution sont utilisés par
le système lors du démarrage pour savoir
quels services démarrer et quels services
arrêter.
Par exemple les fichiers dans le
répertoire /etc/rc3.d sont des liens
symboliques vers des scripts stockés dans
le répertoire /etc/init.d. Ces scripts
contiennent les procédures pour démarrer,
arrêter ou déterminer l’état de chaque
service :
lrwxrwxrwx. 1 root root 15 janv. 10 10:33 K15httpd ->
../init.d/httpd
lrwxrwxrwx. 1 root root 13 janv. 10 10:34 K20nfs ->
../init.d/nfs
lrwxrwxrwx. 1 root root 23 janv. 25 06:27 K32clamd.amavisd
->
../init.d/clamd.amavisd
lrwxrwxrwx. 1 root root 15 janv. 10 10:44 K50snmpd ->
../init.d/snmpd
lrwxrwxrwx. 1 root root 19 janv. 10 10:44 K50snmptrapd ->
../init.d/snmptrapd
lrwxrwxrwx. 1 root root 14 janv. 10 11:52 K74ntpd ->
../init.d/ntpd
lrwxrwxrwx. 1 root root 17 janv. 10 11:52 K75ntpdate ->
../init.d/ntpdate
lrwxrwxrwx. 1 root root 16 janv. 10 10:42 K84btseed ->
../init.d/btseed
lrwxrwxrwx. 1 root root 17 janv. 10 10:31 K90network ->
../init.d/network
lrwxrwxrwx. 1 root root 19 janv. 10 11:52 K95firstboot ->
../init.d/firstboot
lrwxrwxrwx. 1 root root 17 janv. 10 10:31 S12rsyslog ->
../init.d/rsyslog
lrwxrwxrwx. 1 root root 14 janv. 10 10:33 S25cups ->
../init.d/cups
lrwxrwxrwx. 1 root root 24 janv. 10 10:44 S27NetworkManager -
>
../init.d/NetworkManager
lrwxrwxrwx. 1 root root 14 janv. 10 10:34 S55sshd ->
../init.d/sshd
lrwxrwxrwx. 1 root root 17 janv. 11 15:35 S65dovecot ->
../init.d/dovecot
lrwxrwxrwx. 1 root root 22 janv. 25 14:59 S78spamassassin ->
../init.d/spamassassin
lrwxrwxrwx. 1 root root 17 janv. 25 09:20 S79amavisd ->
../init.d/amavisd
lrwxrwxrwx. 1 root root 17 janv. 11 10:15 S80postfix ->
../init.d/postfix
lrwxrwxrwx. 1 root root 15 janv. 10 10:32 S90crond ->
../init.d/crond
lrwxrwxrwx. 1 root root 13 janv. 10 10:40 S95atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 11 janv. 10 10:31 S99local -> ../rc.local
Gestion des services
Le préfixe du nom de chaque lien définit
son ordre de lancement ou son ordre
d’arrêt. Le nom est sous la forme suivante :
[SK]nnservice
S : start.
K : kill (stop).
nn : ordre numérique de démarrage ou
d’arrêt. (00=premier, 99=dernier).
service : nom du service.
init parcourt le
répertoire /etc/init.d, il
commence par arrêter les
processus préfixés par un K,
ensuite il démarre ceux
préfixés par un S. Il
démarre ou arrête ces
services en ordre, du
nombre n le plus petit vers
le nombre n le plus grand.
Dans notre exemple, on peut voir que le
service postfix démarre après le service
iptables. En effet d'après les noms des
fichiers liens symboliques, l'ordre du
service iptables, « 08 », est inférieur à
celui du service postfix (« 80 »).
Ce système de numérotation est utilisé
afin d'assurer que les services démarrent
dans un ordre correct. Le service iptables
doit démarrer avant postfix parce que le
pare-feu iptables protège le système
contre les intrusions.
Les services peuvent être lancés à
partir des scripts du répertoire
/etc/init.d. Ces scripts peuvent être
appelés avec différents arguments :
start : pour démarrer le service ;
stop : pour arrêter le service ;
restart : pour arrêter puis redémarrer
le service ;
reload : indique au service de relire
sa configuration.
status : indique si le service est en
cours d'exécution.
EXEMPLE
La séquence de commandes ci-
dessous démarre puis arrête le
service postfix.
# /etc/init.d/postfix start
Démarrage de postfix :
# /etc/init.d/postfix stop
Arrêt de postfix :
Gestion des services sous Debian et ses
dérivés
Sous Débian et ses dérivés on utilise la
commande update-rc.d pour maintenir les liens
symboliques vers les scripts de démarrage dans
les répertoires /etc/rcN.d
SYNTAXE
update-rc.d nom_service { start | stop }
numéro_sequence numéros_niveaux_execution .
La commande update-rc.d a comme arguments :
un numéro de séquence, utilisé par init pour
décider de l’ordre d’exécution des scripts ;
la liste des niveaux d'exécution applicables,
impérativement suivie par un point.
EXEMPLE
Pour configurer le service d'impression cups de
telle sorte qu'il démarre dans les niveaux
d'exécution 2, 3 4 et 5 avec un ordre de 80 et
s'arrête dans les niveaux d'exécution 1 et 6 avec
un ordre de 20 :
# update-rc.d cups start 80 2 3 4 5 . stop 20 1 6 .
Adding system startup for /etc/init.d/cups ...
/etc/rc1.d/K20cups -> ../init.d/cups
/etc/rc6.d/K20cups -> ../init.d/cups
/etc/rc2.d/S80cups -> ../init.d/cups
/etc/rc3.d/S80cups -> ../init.d/cups
/etc/rc4.d/S80cups -> ../init.d/cups
/etc/rc5.d/S80cups -> ../init.d/cups
Quand on appelle update-rc.d avec l’option remove les liens dans les
répertoires /etc/rcN.d qui pointent vers le script correspondant du
répertoire /etc/init.d seront supprimés.
Ce script doit auparavant avoir été lui-même supprimé. S’il est toujours
présent dans /etc/init.d, update-rc.d affiche un message d’erreur indiquant
qu’il faut utiliser l'option -f pour forcer la suppression du script, comme
l’illustre l’exemple suivant.
EXEMPLE
#update-rc.d atd remove
update-rc.d: /etc/init.d/atd exists during rc.d purge (use -f to
force)
# update-rc.d -f atd remove
Removing any system startup links for /etc/init.d/atd ...
/etc/rc1.d/K11atd
/etc/rc2.d/S89atd
/etc/rc3.d/S89atd
/etc/rc4.d/S89atd
/etc/rc5.d/S89atd
Gestion des services sous Red Hat/Fedora et
openSUSE
Sous Red Hat/Fedora et openSUSE la
commande chkconfig permet d’ajouter,
de supprimer, d’activer ou de désactiver
des scripts, par niveau d’exécution. Cette
commande est très pratique pour
configurer les services.
chkconfig [option] [service]
Voici la liste des options de chkconfig :
--list : liste de l’ensemble de la configuration.
--list service : la configuration d’un service
donné.
--add service : ajoute le service indiqué dans
la configuration system.
--del service : supprime le service de la
configuration System.
--level xxx service on/off : active ou désactive
le service pour les niveaux d’exécution indiqués.
chkconfig ne lance aucun service. Il ne fait que paramétrer les
niveaux d’exécution. Pour lancer un service, on utilisera le script
associé ou la commande service.
Récupération du système
Des problèmes de MBR ou de système
de fichiers de la partition racine
empêchent Linux de démarrer.
L'administrateur doit donc utiliser un
CD de dépannage permettant de
démarrer le système à partir d'un
noyau Linux sur ce CD, ensuite
procéder à la réparation des
problèmes de démarrage du
système.
Récupération du chargeur de démarrage
Grub
Si on n'obtient pas l'écran de Grub au
démarrage du système, il se peut que le MBR
(Master Boot Record) soit endommagé, il faut
donc réinstaller Grub sur le MBR du disque
d'amorçage
PROCEDURE
Démarrage du système à partir du premier
CD d'installation de la distribution. La
distribution CentOs 6.0 propose le menu
suivant permettant un démarrage en mode
dépannage (figure 1). Ce mode est aussi
disponible dans les autres distributions Linux.
Figure 1. Menu de démarrage en mode dépannage de la
distribution CentOS
Figure 2. Configuration de la langue
Figure 3. Configuration du type de clavier
Montage du système : le mode dépannage
cherche l'installation Linux et la monte sous le
répertoire /mnt/sysimage (figure 4) :
Changement de répertoire racine (chroot) : le
prompt « # » apparaît, on définit le répertoire
/mnt/sysimage comme la nouvelle racine « / » du
système :
chroot /mnt/sysimage
Installation du Grub sur le MBR avec les paramètres
définis dans le fichier de configuration grub.conf :
# /sbin/grub-install /dev/sda
Installation finished. No error reported.
This is the contents of the device map
/boot/grub/device.map.
Check if this is correct. If any of the
lines are incorrect, fix it and re-run the
script 'grub-install.'
# this device map was generated by anaconda
(hd0) /dev/sda
Lors du redémarrage du système on devra voir l'écran
du Grub permettant de sélectionner le système
d'exploitation à démarrer.
Dans le cas où la partition de démarrage est
endommagée, la commande grub-install ne fonctionne
pas car elle ne peut pas localiser le fichier de
configuration grub.conf. On doit donc utiliser le shell
Grub pour localiser la partition contenant l'installation
précédente du Grub puis le réinstaller sur le MBR :
Exécution de la commande grub, le prompt change
indiquant que le shell Grub est lancé :
# grub
GNU GRUB version 0.97 (640K lower / 3072K upper
memory)
[ Minimal BASH-like line editing is supported.
For the first word, TAB
lists possible command completions. Anywhere
else TAB lists the possible completions of a
device/filename.]
grub >
Recherche de la partition contenant
l'installation du Grub :
grub> find /grub/stage1
find grub/stage1
(hd0,0)
◦ Le résultat de la commande précédente
indique que l'installation du Grub est sur
la première partition du premier disque
dur.
Réinstallation
du Grub sur le MBR :
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... No
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists...
yes
Running "embed /grub/e2fs_stage1_5 (hd0)"...
26 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0)
(hd0)1+26 p (hd0,0)/grub/stage2
/grub/grub.conf"... Succeeded
Done.
Récupération de la partition racine
Si le système de fichiers de la partition racine n'est
pas démonté correctement, la commande fsck est
lancée automatiquement lors de redémarrage du
système afin de vérifier et corriger les systèmes de
fichiers.
On peut aussi vérifier le système de fichiers
manuellement avec le mode de dépannage lancé à
partir du premier CD d'installation de la
distribution.
Il est recommandé d'exécuter la commande fsck
sur un système de fichiers démonté. Comme on ne
peut pas démonter le système de fichiers racine
d'un système en cours d'exécution, la solution est
de remonter la partition racine en lecture seule :
# mount -o remount,ro /
Ensuite vérifier et corriger le système de fichiers de
la partition racine :
# fsck /
Installation du GRUB
La configuration de GRUB réside dans
/etc/grub/grub.conf ou
/boot/grub/menu.lst (le premier est un lien
sur l’autre).
GRUB peut s’installer sur un MBR (Master
Boot Record, les 512 premiers octets d’un
disque) ou un PBR (Partition BootRecord, les
512 premiers octets d’une partition).
Pour installer ou réinstaller GRUB en cas de
MBR corrompu, par exemple sur /dev/sda
utilisez la commande grub-install
# /sbin/grub-install /dev/sda
Structure des fichiers de
configuration
Ilest basé sur un fichier texte de
configuration et il n’y a pas besoin
de réinstaller GRUB à chaque
modification.
Voici un exemple de configuration
partant du principe que la
première partition du premier
disque est /boot, et que la
seconde contient une installation
de Windows.