Sunteți pe pagina 1din 15

Systèmes Répartis UNIX Démarrage du système

Sommaire

Démarrage du système ..........................................................................................................................................2


1. Chronologie du lancement..................................................................................................................................2
1.1. Procédure de boot........................................................................................................................................2
1.2. LILO (LInux LOader)................................................................................................................................4
1.2.1. Installation..............................................................................................................................................4
1.2.2. Désinstallation........................................................................................................................................4
2. Le rôle d’init........................................................................................................................................................4
2.1. Notion de run-level :....................................................................................................................................5
2.2. Recherche du mode initial :........................................................................................................................7
2.3. Schématisation de l’algorithme suivi par init :........................................................................................7
2.4. Format d'une entrée dans /etc/inittab......................................................................................................8
2.5. Résumé schématique...................................................................................................................................9
2.6. Passage en niveau d'exécution X :...........................................................................................................10
2.7. Initialisation et lancement des processus getty :....................................................................................11
3. ARRET DU SYSTEME ....................................................................................................................................12
3.1. Arrêt programmé : shutdown .................................................................................................................12
3.2. Arrêts immédiats.......................................................................................................................................13
Annexe 1 : Quand la table inittab est-elle scrutée par init ?............................................................................14
Annexe 2 : Fichier de configuration de LILO....................................................................................................15

11/10/09 ESAT 1
Systèmes Répartis UNIX Démarrage du système

Démarrage du système
La procédure de mise en route du système est la même pour tous les systèmes UNIX. Mais il
ya bien sûr quelques différences quant aux possibilités de saisie ou aux possibilités de
configuration.

1. Chronologie du lancement
En général, les étapes qui sont parcourues lors du démarrage des systèmes UNIX sont
semblables. Les voici :

• Après la mise sous tension de la machine, le boot bloc du premier système de fichiers
UNIX est chargé à partir de la ROM (Read Only Memory)
• Le programme de boot charge ensuite directement ou non le système d’exploitation. Le
noyau de ce système d’exploitation est normalement placé dans le fichier /unix du
système de fichiers activé. Ceci fait, les tables de gestion (Tables des fichiers, tables des
inodes, tables de gestion de mémoires, etc.) ainsi que les zones de mémoires tampon sont
initialisées.
• Lorsque le noyau du système d’exploitation a le contrôle du matériel, la configuration des
processus et des fonctions peut commencer. Cette opération est pilotée par le fichier
/etc/inittab , dont les instructions définissent les commandes et les processus à lancer. Les
entrées sont regroupées de manière logique, en niveaux d’exécution. Soit un niveau est
prédéfini, soit ce sera à l’administrateur de le sélectionner au moment du démarrage.
• Une distinction nette est faite entre le mode mono-utilisateur (en anglais single user) et le
mode multi-utilisateurs (en anglais multi user mode). Ce n'est qu’en mode multi-
utilisateurs que les liaisons des terminaux sont libérées pour les utilisateurs. Certains
autres processus de gestion, par exemple la gestion des impressions ou le mécanisme cron,
ne sont disponibles que dans ce mode.
• Une des prérogatives de l’administrateur du système est de pouvoir configurer les travaux
à effectuer au démarrage du système. Il s’agira le plus souvent de scripts de Shell. dans
certains cas, cela supposera également des adjonctions ou des modifications dans le fichier
/etc/inittab

1.1. Procédure de boot

S’il n’y a pas de programme de chargement du noyau, le programme de boot effectue un saut
à ‘l@ de début du noyau lui transférant ainsi l’exécution . Celui-ci va alors :

identifier le type de processeur et de co-processeur


calculer le taille mémoire
initialiser les structure de données internes, les tampons et les caches mémoires
repérer et activer les contrôleurs de périphériques
préparer l’environnement du processus 0
monter le SDF sur lequel le noyau (/)a été lu.
(Cela est nécessaire pour initialiser le catalogue de travail du processus 0)

• Une fois son environnement construit, la table des processus étant créée et initialisée, le
noyau va s’exécuter en tant que processus 0
• Il va se duplique en exécutant la primitive fork(). On obtient alors un nouveau processus
de numéro 1, qui va sortir du mode d’exécution « noyau » et passer en mode « utilisateur »

11/10/09 ESAT 2
Systèmes Répartis UNIX Démarrage du système

• le processus 1 procède alors au recouvrement de son code exécutable par le code contenu
dans /etc/init, ceci grâce à l’appel système exec(). L e rôle de ce processus va être central
dans la gestion et la régulations des démons.
• le processus init va créer de la même manière (fork()) le processus de demande de pages,
d’index 2, appelé vhand sous system V.3 (pageout sous V.4) et (pagedaemon sous BSD),
puis deviendra le processus de gestion de mémoire sched sous SYSTEM V.3 et SYSTEM
V.4 (swapper sous BSD et HP-UX)

Table des processus NOYAU pid=0


mode noyau

0
fork()

pid=1
NOYAU mode utilisateur

proc[ ]
exec /etc/init

init

lancement de init
=
pid=2 vhand (v3) fin de la procédure
pageout (v4) de boot
pagedaemon (BSD)
kflushd (linux)

sched (sys V) pid=4


swapper (BSD)
fsflush (V4)
kswapd (linux)
pid=3 kupdate (linux)

init : gestion et régulation des démons (mode utilisateur)


vhand : processus de demande de pages
sched : processus de gestion mémoire

liste des 4 processus crées par init


root 1 0 0 10:00 ? 00:00:05 init [5]
root 2 1 0 10:00 ? 00:00:00 [kflushd]
root 3 1 0 10:00 ? 00:00:00 [kupdate]
root 4 1 0 10:00 ? 00:00:00 [kswapd]
root 5 1 0 10:00 ? 00:00:00 [mdrecoveryd]

11/10/09 ESAT 3
Systèmes Répartis UNIX Démarrage du système

1.2. LILO (LInux LOader)

Il comprend :
• un Map Installer : contient les @ du (es) noyau(x) nécessaires au boot
• des fichiers (/boot/map, /etc/lilo.conf, /boot/boot.b)
• un Boot Loader, qui est appelé par le BIOS et qui charge le noyau ou les
secteurs de boot des autres OS

1.2.1. Installation

Le MBR scanne la table des partitions, recherche celle


qui est marquée "active" et charge le Bloc de Boot de
cette partition.
On peut installer LILO sur :
• le Bloc de Boot d'une disquette Linux
• le MBR du premier disque dur
• le Bloc de Boot d'une partition primaire Linux du premier disque dur
• le Bloc de Boot d'une partition étendue du premier disque dur

On ne peut pas installer LILO sur :


• le Bloc de Boot d'une disquette ou d'une partition non-Linux
• une partition Linux Swap
• le Bloc de Boot d'une partition logique d'une partition étendue
• sur un deuxième disque dur
• une partition qui se situe après le 1024ème cylindre

1.2.2. Désinstallation

/sbin/lilo -u
ou
blocksize
fdsik /MBR
ou
dd if=/boot/boot.030x of=/dev/hda bs=446 count=1

lilo y a sauvegardé le en fait, le fichier fait 512 octets


secteur d'amorcage original mais seuls les 446 premiers sont le bloc de
boot, le reste correspond à la table des
partitions, qu'il ne faut pas écraser !!!

2. Le rôle d’init
L’activation d’init va être centrée sur le fichier /etc/inittab, c’est en fonction de son contenu
qu’init activera ou non certains démons.

11/10/09 ESAT 4
Systèmes Répartis UNIX Démarrage du système

Le processus init exploite cette table pour créer des processus en mode multi utilisateurs.
Dans de nombreux cas, lorsqu’un processus fils meurt, init scrute la table et généralement
recréé le fils.
Il y a un processus par entrée de /etc/inittab (exception : entrées de type off ou initdefault)

2.1. Notion de run-level :

Le processus init va associer au système un niveau d’exécution (run-level).


La commande who -r ou runlevel permet de connaître le niveau actuel d'exécution d’init
Le niveau d’exécution sera modifié par une des commandes :

init [ -t sec ] niveau


ou
telinit [ -t sec ] niveau

Ceci va correspondre à l’envoi d’un signal au processus init pour lui notifier une demande de
changement de niveau

11/10/09 ESAT 5
Systèmes Répartis UNIX Démarrage du système

Correspondance entre les niveaux d’exécution et les signaux :

Niveau Signal Action


Q SIGHUP Réexamen d’inittab
0 SIGINT Fait " descendre " le système. A la fin de l'opération il est
possible de rebooter ou d'éteindre la machine. L'opération ne
peut être réalisée qu'à partir de la console.

1 SIGQUIT Passe en mode Mono-utilisateur


Met le système à l'état mono-utilisateur (à partir de la console).
• Tous les systèmes de fichiers, hormis le système racine,
sont démontés
Tous les processus utilisateurs sont tués ( sauf ceux sur la
console).

2 SIGILL Met le système en mode multi-utilisateurs. Les démons et les


processus getty sont lancés.
Le PC est en mode client (il se trouve protégé, personne ne peut
se connecter à distance)

3 SIGTRAP Donne accès aux services réseaux.


Lance les démons nécessaires aux montages distants
Le PC devient serveur

4 SIGIOT Multi-utilisateurs

5 SIGEMT Mode monitor : lance l'environnement permettant de tester le


système.

6 SIGFPE Arrête UNIX et le fait rebooter au niveau d'exécution initial.

S, s SIGBUS Mode maintenance : comme 1 mais le terminal qui a invoqué


cette commande devient la console système.

a SIGSEGV Pseudo-niveau

b SIGSYS Pseudo-niveau

c SIGPIPE Pseudo-niveau

Les pseudo-niveaux a,b,c acceptés par telinit permettent de faire exécuter des commandes
particulières sans modifier le run-level.

Lorsque init reçoit une demande de changement de niveau, il envoie tout d’abord un signal
SIGTERM à tous les processus dont le niveau d’activation ne correspond pas au nouveau
niveau, après 5 secondes un signal SIGKILL leur est envoyé.

11/10/09 ESAT 6
Systèmes Répartis UNIX Démarrage du système

2.2. Recherche du mode initial :

1) /etc/inittab n’existe pas :


• mode mono utilisateur sur la console virtuelle /dev/syscon.
• la commande /bin/su est lancée pour passer en super utilisateur.
• Il n’y a aucune possibilité de passer en multi-utilisateurs tant que inittab n’est
pas créé.

2) /etc/inittab existe
• entrée initdefault présente :
run-level indiqué dans le champ 2 (le plus élevé si run-level multiples)
• entrée initdefault absente :
exécution des entrées d’inittab de type sysinit.
demande de run-level sur la console système virtuelle.

2.3. Schématisation de l’algorithme suivi par init :

1°) Lors de la première exécution lire / etc / inittab, si passage direct au niveau multi-
utilisateur aller en 4°
2°) Si pas possible de savoir, question sur la console opérateur, si réponse = multi-utilisateur
aller en 4°
3°) Si on reste au niveau mono-utilisateur alors exécution de /bin/su, attente de la fin de
l’exécution de la session, retour en 2°
4°) Scruter / etc / inittab et exécuter toutes les commandes qui correspondent au passage à ce
niveau multi-utilisateur
5°) Attendre en lisant périodiquement / etc / inittab afin de relancer ou stopper les
commandes (getty...) en fonction des modifications de son contenu. En cas de changement de
niveau aller en 3°

11/10/09 ESAT 7
Systèmes Répartis UNIX Démarrage du système

2.4. Format d'une entrée dans /etc/inittab

identificateur de run level action condition de processus # Commentaire


l’entrée : : lancement :

champ 1 champ 2 champ 3 champ 4

Le format du fichier est le suivant : id : états : action : process

id : Identificateur de l'entrée, sans signification particulière ( < 4 caractères )

états : Le processus associé est activé lorsque le système passe dans ce niveau d'exécution.

Exemple : 2 : le processus est lancé au niveau d'exécution 2 ;


: 12 : le processus est lancé aux niveaux 1 et 2 ;
:: le processus est lancé à tous les niveaux ;

action : Mot clé conditionnant le lancement du processus associé.

- respawn init relance automatiquement le processus si celui-ci meurt ;


- wait le processus est créé à chaque scrutation de init ;
- once init n'attend pas la fin de l'exécution du processus pour poursuivre la
lecture du fichier. N'est pas recréé lorsqu'il meurt ;
- boot le processus n'est lancé qu'au démarrage et n'est pas recréé lorsqu'il meurt.
init n'attend pas la fin de son exécution ;
- bootwait le processus est lancé lorsque init passe pour la première fois en mode
multi-utilisateurs. init attend la fin de son exécution ;
- powerfail le processus n'est lancé que lorsque init reçoit le signal SIGPWR
( coupure secteur );
- powerwait idem, mais dans ce cas init attend la fin de l'exécution ;
- off init ignore cette entrée si le processus n'existe pas. Sinon il lui envoie les
signaux SIGTERM puis SIGKILL pour le tuer ;
- initdefault cette entrée est la première lue par init à son démarrage. Elle permet de
spécifier le niveau d'exécution initial ;
- sysinit ces processus sont lancés, au démarrage, avant qu'init essaie d'accéder à la
console. Servent à initialiser celle-ci.
- ondemand équivalent à respawn (réservé aux run level 0-6)
pour les run level a b c
- powerokwait exécuté si init reçoit SIGPWR
- ctrlaltdel exécuté si init reçoit SIGINT
- kbrequest possibilité de définir un signal pour une combinaison de touche

process : C'est le processus ou shell-script qui doit être lancé. Le reste de la ligne est
composé des arguments de la commande.

Le fin de la ligne peut contenir des commentaires, précédés par ' # '.

11/10/09 ESAT 8
Systèmes Répartis UNIX Démarrage du système

2.5. Résumé schématique

DEMARRAGE

boot

chargement du
noyau

init
contrôles divers

/etc/inittab
/etc/rc.d/rcX

fonctionnement mono- fonctionnement multi-


utilisateur utilisateurs

init 1 init 2 init 3 init 5 init 6

init 0

EXTINCTION

11/10/09 ESAT 9
Systèmes Répartis UNIX Démarrage du système

2.6. Passage en niveau d'exécution X :

Pour ne pas surcharger le fichier / etc / inittab, l'ensemble des actions à réaliser lors du
passage dans un mode d'exécution donné, est regroupé dans un fichier-script dont le
nom est généralement de la forme rcX.d, où X est le numéro du niveau d'exécution
souhaité.

Ces fichiers ont tous l'action ' wait ' dans le fichier / etc / inittab.

 Ces fichiers sont éditables et modifiables à volonté par l'administrateur. Il faudra


cependant veiller à commenter les différentes actions réalisées.

Ces scripts contiennent les instructions nécessaires au démarrage des opérations


suivantes :

- Montage / démontage des systèmes de fichiers ;


- Lancement de démons divers;
- Lancement de spools.
-
Les différents programmes d'initialisation invoqués dans un fichier rcX.d sont
regroupés dans des répertoires / etc / rc.d / rcX.d. Les binaires correspondants ont tous
un nom de fichier de la forme suivante :

SXXnom pour une procédure mise en route ( start )


KXXnom pour une procédure d'arrêt ( kill )

XX est un nombre compris entre 00 et 99. nom est le nom de la procédure à exécuter.

 Ces programmes sont en fait des fichiers liés ( ils sont créés à l'aide de la
commande ln ) aux programmes, aux noms identiques, situés dans le répertoire
/ etc / rc.d / init.d.

11/10/09 ESAT 10
Systèmes Répartis UNIX Démarrage du système

2.7. Initialisation et lancement des processus getty :

Au niveau 2, les différents processus getty sont lancés, avec l'action ' respawn '. Le
processus getty de la console est, quant à lui, lancé à chaque changement de niveau.

Passage en niveau 2 ("multi-utilisateurs")

Premières initialisations :

- entrées "sysinit de / etc / inittab

- exécution du script / etc / rc.d / rc2 (entrée wait)


Le répertoire / etc/ rc.d / rc2.d est utilisé pour exécuter toutes les
procédures K* avec l'argument "stop" puis les procédures S* avec
l'argument "start". Ces procédures sont des liens sur des procédures
génériques dans / etc / rc.d / init.d.

- activation des terminaux


(programme "getty" avec des entrées "respawn") : l'utilisation des
processus getty peut être remplacée par celle des moniteurs "ttymon".

11/10/09 ESAT 11
Systèmes Répartis UNIX Démarrage du système

3. ARRET DU SYSTEME

3.1. Arrêt programmé : shutdown

Du fait de la présence systématique de tampons système associés aux différents fichiers ( et


en particulier aux fichiers de périphériques ), on ne peut être assuré, à un moment donné, que
les données ont été réellement sauvegardées sur disque.

Pour arrêter le système il faut donc utiliser la commande shutdown.

Cette commande :
• Vérifie l'identité du demandeur ( il faut que cela soit l'administrateur ) ;
• Prévient les utilisateurs connectés ;
• Arrête les processus actifs ;
• Démonte tous les systèmes de fichiers, excepté celui du disque maître ;
• Exécute la commande init 0.

La syntaxe de la commande varie légèrement selon la version d’UNIX. Voici quelques


exemples tirés des versions SINIX (SIEMENS), AIX (IBM, Bull) et LINUX.

Syntaxe SINIX :
/usr/sbin/shutdown [-y] [-ggrace_period] [-iinit_state]

-y Répond « yes » à toutes les questions


-g Période de grâce
-i Niveau d’exécution

Exemple : shutdown –y –g0 –i6 "ARRET IMMEDIAT"

Syntaxe AIX :
shutdown [ -c ] [ -d ] [ -F ] [ -h ] [ -i ] [ -k ] [ -m ]
[ -r ] [ -t mmddHHMM [ yy ] ] [ -v ] [ +Time [ Message ] ]

-F arrêt d’urgence dès que cela est possible (emergency)


–r reboot (init 6)

Exemple : shutdown –m +2

-m mode maintenance en mode mono-utilisateur


+2 délai en minutes

11/10/09 ESAT 12
Systèmes Répartis UNIX Démarrage du système

Syntaxe LINUX :
/sbin/shutdown [-t sec] [-arkhncfF] time [warning-message]

–r réamorçage ou reboot (init 6)


-a regarde dans le fichier /etc/shutdown.allow si le user peut lancer la commande
-k pas de descente du système lancé mais uniquement un message général
d’avertissement.

L'option « –t sec » n'est utilisé que sur certains systèmes possédant des niveaux d’exécution
définies de 7 à 9.

Exemples :
shutdown now "MODE MONO UTILISATEUR"
shutdown –r now "ARRET PUIS REBOOT IMMEDIAT"
shutdown –h +2 "ARRET DANS 2 MINUTES"
shutdown –h 10:30 "ARRET A 10H 30 MN"

3.2. Arrêts immédiats

L'administrateur peut utiliser les utilitaires /sbin/halt ou /sbin/reboot pour réaliser un arrêt
brutal du système.

• halt effectue un init 0


• reboot effectue un init 6

11/10/09 ESAT 13
Systèmes Répartis UNIX Démarrage du système

Annexe 1 : Quand la table inittab est-elle scrutée par init ?

- Chargement du système.
- Commande opérateur init ou telinit
argument : 0-6, s, S avec changement de run-level
argument : q, Q, a, b, c sans changement de run-level
- commande opérateur init ou telinit argument q ou Q après changement
intervenu dan la table.
- Mort d’un des fils d’init.
- Apparition du signal défaut secteur. (Onduleur)

11/10/09 ESAT 14
Systèmes Répartis UNIX Démarrage du système

Annexe 2 : Fichier de configuration de LILO

Exemple de fichier /etc/lilo.conf

boot=/dev/hda HD non-SCSI si LILO dans le MBR, sinon partition


(si dans BS)
map=/boot/map fichier crée par LILO,descriptif des partitions
[ ! don't touch ]
install=/boot/boot.b fichier contenant le code d'amorçage à copier sur
le Boot sector
vga=normal mode d'affichage texte utilisé par la console (80
x 25)
default=winnt non obligatoire, si non présent, prend la 1ère
valeur rencontrée
keytable=/boot/fr-latin1.klt
lba32
prompt attend une réponse si <tab> enfoncée
timeout=100 va avec prompt si pas de réponse au bout de ...
alors -> default
message=/boot/message ! si on le change il faut recréer le fichier map !

restricted si linux single accès protégé


password=xxxxxxx le mot de passe est en clair : passer lilo.conf en
600

image=/boot/vmlinuz nom de l'image du noyau


label=linux nom du système repris dans le menu d'amorçage
root=/dev/hda5 emplacement de la partition racine
read-only montage en read-only, permet le FSCK
[ param noyau ]

image=/boot/rescue/vmlinuz
label=failsafe
root=/dev/hda5
append=" failsafe" infos supplémentaires passées au noyau
read-only

other=/dev/hda1 emplacement de la partition


label=winnt
table=/dev/hda emplacement de la table des partitions

other=/dev/fd0
label=floppy
unsafe ne vérifie pas la table des partitions
n'accède pas au boot sector ?

LILO est un gestionnaire d'amorçage. Il peut se trouver sur le Master Boot


Record du disque dur (si chargeur principal) ou sur le Boot Sector d'une
partition Linux (chargeur secondaire)

supprimer LILO

fdsik /MBR blocksize


ou
dd if=/boot/boot.030x of=/dev/hda bs=446 count=1

lilo y a sauvegardé le en fait, le fichier fait 512 octets


secteur d'amorcage original mais seuls les 446 premiers sont le bloc de
11/10/09 boot, le ESAT
reste correspond à la table des 15
partitions, qu'il ne faut pas écraser !!!

S-ar putea să vă placă și