[SOS] Notions basic sur boot...

Bombela bombela at free.fr
Mar 13 Fév 20:19:09 CET 2007


Je vais t'expliquer le plus précisément possible.
C'est très simple :)

Le premier secteur d'une unitée de stockage est toujours réservé à un 
Master Boot Record.
Dans le cas d'un PC x86(_64) et d'un disque dur avec format de partition 
MSDOS, ce MBR contient :

Un peux de code, une structure d'information pour 4 partition maximum, 
et un nombre magique (0x55AA) qui est en principe vérifié par le Bios de 
ta machine, de sorte qu'elle ne charge pas quelques chose de vide.

Si on utilise le format de partition compatible MSDOS, c'est pour la 
seule raison d'être compatible avec Microsoft...

Le BIOS, lui, ne ce souci que d'un chose, charger le MBR à l'adresse 
mémoire 0x7C0 (1984, la date du lancement du PC par IBM ^^).

Le MBR, est donc un BootSector (Secteur de démarrage) plus 4 définition 
de partition. (Position sur le disque, taille... etc).

De plus, le BootSector lui, contient des informations, comme des 
informations de type de partition...
Une disquette ou un cd/dvd par exemple, possède un BootSector.

Tu sera ravis d'apprendre que chaque partition, possède un BootSector !
Qui permet d'avoir du code, et une description de la partition.

Bon, tu vas me dire, le MBR est les BootSectors sur 512 octets (Taille 
d'un secteur de disque dur), c'est pas gros.
Réponse : Le premier cylindre du disque dur est vide... Ce qui fait 63 
secteur sur un disque conventionnel.
La chose se répète de la même manière pour chaque partition ! Ça fait 
donc presque 8ko d'utilisable.

Notons bien que le bios lui, ne charge que le MBR, et donc seulement 512 
octets.

Dans le fonctionnement du DOS, le MBR, qui est executé après avoir été 
chargé par le BIOS, s'occupe de lire la table des partitions, qui se 
trouve donc en mémoire, puisqu'elle fait partit du MBR.
Le but est de trouver la partition "Active". Celle qui possède cet 
attribut dans la table, sera la partition à "Démarrer". Le MBR, charge 
le BootSector de cette partition. Il le charge d'ailleur à l'adresse 0x7C0.

Bien sur, le petit code du MBR ne s'écrasera pas lui même, il aura 
copier sont code un peux plus haut en mémoire.

Après avoir chargé le BootSector de la partition "Active", le MBR 
l'execute. C'est à dire qu'on entendra plus jamais parlé du MBR, le 
processeur continuant sur le BootSector.

Et que fait le BootSector de la partition ? Et bien dans le cas de 
Windows par exemple, il va se débrouiller pour charger le système 
d'exploitation. (Je pourrais encore en raconter, mais c'est suffisant 
pour comprendre ^^).

Je ne parlais pas beaucoup de LILO, je ne l'utilise pas, et ne le 
connais pas. LILO, est étalé sur plusieurs secteurs au début du disque, 
juste après le MBR. Le MBR, installé par LILO, s'occupe de charger le 
nombres de secteurs voulut (Dans la limite des 62 possibles). Il y a 
assez de place pour pouvoir contenir des noms et paramètres associé. 
Pour windows, LILO chargement le BootSector de la partition 
correspondante, pour linux, c'est différent. Il n'y pas de BootSector 
linux (enfin si mais bon... il charge linux 1 ^^).
Dans le cas de linux, LILO parcoure la partition, et charge le noyau 
directement ainsi qu'un système de fichier virtuel si demandé (Initrd).

Tu comprend donc que pour LILO, la notion de partition 'Active' n'as 
aucun sens.
Tu remarque aussi, que tu peux tout ta fait mettre un LILO dans un 
BootSector, et t'amuser à chaîner des LILO :)

Bien, maintenant, passons à GRUB (Grand Unified Boot). GRUB est un mini OS.
Il possède sont MBR (Stage 1), qui va charger du code dans les 62 
secteurs suivant, tout comme LILO.
Pour GRUB, c'est le Stage 1.5. La ressemblance avec LILO s'arrête là.
Dans ce code chargé, se trouve le numéro de disque et le numéro d'une 
partition, contenant un dossier particulier à GRUB. (Souvant /boot/grub).

Dedans, ce trouve un petit noyau, que GRUB vas charger. C'est le stage 2.
Toujours dans ce même dossier, nous pouvons trouver un fichier de 
configuration de grub (Souvant menu.lst).
Grub charge dynamiquement sa configuration dans ce fichier.

Grub peux aussi fonctionner en interactif, et il est possible d'entrer 
de commande de boot à la volée, de mettre un mot de passe, un image...

Ensuite, c'est un peux comme pour LILO, GRUB peux charge un BootSector, 
un noyeau linux, un inird... Mais aussi des modules, ceci étant 
notamment utilisé par le Hurd.

Notons que le noyau linux supporte le standard GRUB. Ce qui veut dire 
que grub trouvera dans les 8 premiers ko du noyau, des informations de 
chargement comme l'adresse mémoire, la position où placer la pile etc. 
Alors que dans LILO, il faudra entrer les adresses manuellement...

Ah, et juste une dernière chose, on peux très bien faire sont propre 
MBR, qui ne charge pas de partition 'Active' ou même qui ne fasse rien 
du tout... ou encore, des choses vilaines. (J'ai eu une fois l'occasion 
de punir un camarade de classe en cours d'informatique O:-) ).

Quelque possibilités :

MBR_DOS -> BootSector -> OS
MBR_GRUB -> BootSector -> OS
MBR_GRUB -> BootSector_GRUB -> BootSector_GRUB ...

À noter que le Loader de Windows, depuis les version 2000, est capable 
de charger au choix plusieurs BootSector. Il est ainsi possible de faire :
MBR_DOS -> BootSector > LoaderMS -> BootSector_GRUB

Bon, t'aura compris, quasiment toute les combinaison sont possible.

J'espère avoir été assez clair ;)
Si tu veux plus de précisions, je reste à ta disposition.

@+

Bombela





Plus d'informations sur la liste de diffusion Sos