Outils pour utilisateurs

Outils du site


util:boot

Comment démarre Linux, le processus du boot

Le processus de démarrage du système gnu-Linux consiste en un certain nombre d'étapes (ou d'enchainements) tels que :
* Lecture du BIOS
* Lecture du MBR ou Master Boot Record
* Lancement du chargeur Grub ou Lilo
* Chargement du noyau Linux en mémoire avec chargement de certains drivers via initrd
* Lancement du processus init

(schéma réalisé d'après les formations IBM : http://www.ibm.com/developerworks/linux/library/l-linuxboot/ )

Détails du processus de boot et explications

Le BIOS

Le BIOS - Basic Input Output System (système d'entrée sortie de base) est essentiel à tout PC, il se trouve généralement dans une mémoire morte ou ROM qui est directement implantée sur la carte mère du PC. Il est associé à une mémoire sauvegardée par une petite pile bouton sur la carte mère (le “setup” qui est la sauvegarde de la configuration).

Si votre PC ne démarre pas (ou ne boot pas) c'est à cause du BIOS et de sa configuration (le setup). On peut accéder au setup et le modifier en pressant une touche dès la mise sous tension du PC. Selon les fabricants, cette touche est Suppr, F2, F10 … (la touche à utiliser est très brièvement affichée au tout début du démarrage).

Mais quelle est donc sa fonction ?

Le BIOS teste le matériel et y applique les réglages mémorisés dans le setup, tout en s'assurant qu'il n'existe pas de dis-fonctionnement matériel et que tout est présent dans la machine, mémoire CPU principalement. Ensuite il regarde la présence des périphériques nécessaires au boot : lecteur de disquette, cd rom, dvd rom, clef usb, mais surtout disque dur. Si vous avez installé un système d'exploitation Linux ou Windows, le BIOS est normalement configuré pour activer le MBR de celui ci, les étapes du démarrage peuvent alors commencer….

Le MBR ( Boot Primaire )

Le Master Boot Record ou MBR (parfois aussi appelé “Zone amorce”) est le nom donné au premier secteur adressable d'un disque dur (cylindre 0, tête 0 et secteur 1, ou secteur 0 en adressage logique) dans le cadre d'un partitionnement Intel. Sa taille est de 512 octets. Le MBR contient la table des partitions (les 4 partitions primaires) du disque dur. Il contient également une routine d'amorçage dont le but est de charger le système d'exploitation (ou le boot loader/chargeur d'amorçage s'il existe) présent sur la partition active.

Mais quelle est donc sa fonction ?

Il s'agit du boot primaire , la taille du MBR étant limitée à 512 octets, ce petit programme n'a pour fonction que de lancer le boot secondaire qui occupe un plus gros espace ailleurs sur le disque.

Pour en savoir plus mbr

Le Boot Secondaire

Il a pour fonction d'activer le système d'exploitation . c'est à dire d'activer le noyau. Les boot primaire et secondaire constituent ce qu'on appelle le chargeur ou loader tel que Lilo ou plus fréquemment Grub.

Grub ou Lilo ( Boot Primaire + Boot Secondaire )

Grub (acronyme de GRand Unified Bootloader) est un programme de multiboot, libre, au même titre que LILO (Linux loader), qui permet de choisir au démarrage de son ordinateur entre plusieurs systèmes d'exploitations.

Ses avantages sont notamment la gestion d'autres systèmes que Linux et Windows (utile pour Hurd, Solaris, FreeBSD et OpenBSD), Il lit la configuration au boot donc il n'y a pas besoin de réinstaller GRUB dans le secteur de boot après un changement de configuration, contrairement à LILO. Une ligne de commande permet de changer sa configuration au boot. De plus grub peut démarrer sans disque dur.

pour en savoir plus grub

Le Noyau Linux

Initrd

Initrd (INITial RamDisk) est une image d'un noyau minimal initialisé au démarrage du système.

Ce fichier utilise le système de fichier cramFS (système de fichier compressé au format gzip et archivé via cpio),.Une fois cette image chargée en mémoire vive, elle permet d'avoir un système minimal qui charge le système de fichier principal ou bien des systèmes sans disque (“diskless”).

Mais quelle est donc sa fonction ?

Les noyaux des distributions sont compilés en utilisant au maximum les modules. Un module est un morceau de noyau qui va être chargé à la demande.

Ce qui signifie que le noyau ne contient quasiment aucun driver mais que ceux-ci sont chargés à la demande lors du boot. Cela permet d'avoir des noyaux complets, avec le support du maximum de matériel, ce qui améliore la portabilité du système mais les modules non nécessaires ne sont pas chargés.

Le problème est que certains modules sont nécessaires au premier stade du démarrage du système, comme par exemple des drivers SCSI ou la gestion des système de fichiers NTFS, Ext3 etc. L'image initrd sert pour palier à ce problème. Elle est chargée par grub ou lilo puis remplacée par le noyau standart durant la phase de démarrage mono-utilisateur.

Bien entendu, si vous compilez votre noyau vous-même, vous y compilerez en dur tout ce dont vous avez besoin et uniquement ce dont vous avez besoin. Vous n'aurez alors pas besoin d'utiliser une initdr.

Initrd est utilisé par exemple sur Debian et Ubuntu.

Le processus init

Jusque là, le noyau utilise la mémoire librement. Après avoir chargé les modules, la tâche principale du noyau est de lancer le procesus init. Ensuite, c'est init qui va tout diriger. Son rôle est de gérer tous les processus, y compris les tâches du noyau.

Les processus portent un numéro d'identification, le pid, ces numéros sont attribués dans l'ordre, init porte donc le numéro 1. Comme les répertoires, les processus sont organisés en arbre, dont init est la racine. Le noyau, quant à lui, sera représenté par le processus kthread, qui porte le numéro 2.

Inittab

Init lit ensuite son fichier de configuration: /etc/inittab C'est là qu'il va trouver les instructions pour la suite des opération. Notamment les différents niveaux d'exécution, les termianux virtuels.

Les niveaux d'execution

Les niveaux d'exécution dépendent des diverses distribution et si vous êtes aventureux de votre propre configuration. Pour correspondre aux normes POSIX, il y a six niveaux d'execution, le niveau 0 correspond à l'arrêt du système tandis que le 6 correspond au redémarrage. Entre les deux, on a un niveau mono-utilisateur - 1 ou S - et un niveau multi-utilisateur.

C'est durant la phase mono-utilisateur qu'init va créer le processus kthread

À chaque niveau d'execution correspondent des scripts rc

Exemple sous Debian

  • 0 =⇒ halt
  • 1 =⇒ single-user
  • 2-5 =⇒ multi-user
  • 6 =⇒ reboot

Le script rc principal est /etc/init.d/rc Celui-ci va chercher les scripts adéquat: /etc/rc?.d (ou ? correspond au niveau d'éxecution). Un script /etc/rc.local permet d'ajouter ses propres scripts à la fin du level multi-user. Celui-ci est lancé par le script /etc/init.d/rc.local

Niveaux d'executions spécifiques

Les niveaux d'éxecution ne sont donc pas les même sur toutes les distributions, sauf le 0, le 1 et le 6. Certaines distributions, comme la Slackware, attribuent un niveau d'execution (le 4) au serveur graphique.

A contrario, sous debian le gestionnaire de session est automatiquement lancé à la fin du level multi-user, par défaut. Si vous n'aimez pas ce comportement, il suffit de le désactiver avec la commande suivante :

update-rc.d gdm3 remove

Liens externe

util/boot.txt · Dernière modification: 2014/05/09 18:58 (modification externe)