Comprendre le boot loader

Salut a tous. :wink:
Recemment je me suis amusé à installer pleins de systèmes différents. En fait à chaque fois le problème de boot loader ne se posait pas car les systèmes étaient à chaque fois capables d’écrire grub.conf correctement pour que celui ci détècte normalement les autres systèmes et puisse booter dessus.
Donc en fait à chaque fois que j’installais un autre système je le laissait écraser le MBR avec le nouveau grub et ça fonctionnait bien comme ça.

Toutefois avec par exemple ma Slackware qui utilise encore Lilo, ça ne fonctionne pas bien. Ce que j’aimerais faire et par exemple booter sur un grub dans le MBR et avoir une ligne qui me permette d’acceder à Lilo installer sur le premier secteur de la partition de la Slackware. Je pourrais faire autre chose mais c’est pour comprendre.

Car en fait je ne comprends pas bien exactement comment le système boot. En effet en premier lieu le bios cherche le MBR puis l’exécute. Sauf que si j’ai bien compris on peut indiquer à grub de s’installer non pas dans le MBR mais dans le premier secteur de la partition et de la rendre bootable. Voilà où ça coince pour moi.

Permière question : Imaginons que le MBR ne contienne rien du tout, aucun système n’a été installé.
J’installe alors un système et demande à grub de s’installer dans la partition et non dans le MBR et je rend cette partion bootable.
Que se passe t’il alors concrètement, à savoir qu’est ce qui est mis dans le MBR ? Car il doit forcément y avoir quelque chose qui se met dedans pour que le système sache qu’il doit aller chercher grub dans la partition ?!
Ou alors y a t’il moyen de passer outre le MBR pour arriver directement sur le grub de la partition ?

Deuxième question : Que se passe t’il si le MBR possède déja un boot loader et qu’on installe alors grub dans une partition et qu’on la rend bootable. Qui va s’éxecuter, le MBR ? La partition ? Ou alors est ce que le MBR va être endommagé ?

Troisième question : Si je veux installer grub dans le MBR. Que dois je lui indiquer pour qu’il aille ensuite exécuter non pas un système mais un autre boot loader, un autre grub par exemple.

exple que j’aimerais faire par exemple : Un premier grub est installé sur le MBR, c’est donc lui (si j’ai pigé le truc) qui est booté en premier. Celui ci lirait ensuite un autre grub sur la première partition du disque dur, qui lui même irait à son tour executer un autre grub sur la deuxième partition, qui executrait le grub du MBR. Ca ferait une boucle en somme. Est ce que quelqu’un ici a assez de connaissance sur les boot loader pour savoir comment je pourrais faire ce genre de “connerie”?

Enfin, à terme, j’aimerais avoir suffisamment compris le système (complètement flou pour moi pour l’instant) pour écrire un super grub qui serait toujours dans le MBR (ou la partition bootable si y a moyen de passer directement dessus). Ce super grub lirait son fichier dans une petite partition où il n’y aurait que ce fichier, rien d’autre. Ensuite tous les systèmes que j’installerais, je mettrais leur propre grub sur leur propre partition de boot. Au final je n’aurais jamais à m’embeter de savoir si je vais écraser tel grub etc… J’aurais juste à modifier mon grub principal pour lui indiquer d’aller chercher tous les autres grubs(ou lilo ou autre)
Est-ce possible de faire un truc pareil ?

.

Hello
Juste une doc
doc.ubuntu-fr.org/grub

++
Cyrille

merci à vous deux pour les docs je vais étudier tout ça.

Mais juste une question avant toute chose, savez vous pourquoi lorsque grub est installé sur le secteur d’amorcage d’une partition, et bien si on rend la partition bootable avec gparted par exemple, il se lance quand même.
J’aimerais bien savoir qu’est ce qui fait que ça marche, et j’ai pas trouvé d’info concrête là dessus, tout le monde le fait parce que ça marche mais personne de ce à qui j’ai parlé n’a vraiment compris comment ça marche.

J’ai vu aussi que l’amorceur présent dans le MBR doit tenir dans 446 octets des 512. Les octets restants contiennent une table de partitions avec des infos dessus et sur le disque. Peut être qu’il y a un mini programme, ou le bios aussi, qui est capable de lire cette table pour aller directement sur le premier secteur de la partition bootable, ce qui expliquerait tout.

.

Salut :wink:
Prenons le cas de windows et de debian.

Je commence par installer windows. Le MBR contient donc le bootloader de Windows.
Ensuite j’installe Debian et son grub dans la partition / de Debian.
C’est toujours Windows qui va démarrer, sauf, si je rend la partition / de Debian bootable à la place de la partition de Windows.

C’est ça que je comprends pas. Car dans le MBR c’est toujours le NTLDR de Windows. Donc ça veut dire selon toi que celui ci est capable je ne sais comment de passer le relais à la partition marquée bootable ?
En fait ce que j’aimerais savoir c’est grosso modo que ce passe t’il quand on rend une partition bootable avec gparted par exemple.

Parce que pour moi, le système démarre l’amorceur qui est dans le MBR point. Ensuite, c’est selon ce qui est marqué dans son fichier de conf qu’il boot sur tel ou tel partition. Alors peut être que mettre la partition Debian bootable, ça met une indication dans l’amorceur de Windows pour lui indiquer d’aller chercher le grub de Debian ?? :confused:

Edit :
Si j’ai bien compris ce que tu écrit, je n’ai jamais entendu parler de ce témoin d’amorce. Peut être que c’est ce truc là qui me manque.
Mais en supposant que le bootloader installé dans le MBR est capable de savoir quelle est la partition bootable et laisse le relais à celle ci au lieu de s’éxecuter, il y quelque chose qui cloche toujours selon moi.
En reprenant l’exemple ci dessus, le bootloader en MBR est celui de Windows. Celui ci boot uniquement sur Windows.
Le fait de rendre la partition où est installé grub bootable (dans notre cas la partition racine de debian) va faire qu’au lieu de voir le démarrage de Windows, je vais avoir l’affichage de grub. A ce moment là, tu veux dire qu’en réalité le bootloader de windows s’est réellement exécuté un court instant avant de laisser la main à grub ?

Ma théorie d’après ce que j’ai compris : Donc d’après ce que j’ai dit avant, j’en déduirais que le bootloader de windows sait tout d’abord quelle est la partition de son système à lui. Si cette partition est bootable, alors il s’éxecute normalement (il lira alors certainement son fichier de conf et s’éxecutera).
Si la partition bootable est une autre partition (cela doit surement être indiqué dans la table de partition à coté du bootloader dans le MBR non ?) alors le bootloader ne s’éxecute pas entièrement. Une fois que celui ci a vu que la partition bootable n’était pas la sienne (cf celle de son windows) alors il passe le relais à la partition bootable. En fait il lit alors le premier secteur où est installé grub, et celui ci prend alors le relais.
Est ce que cette théorie est réellement ce qu’il se passe ? :slightly_smiling:

.

re, j’ai édité mon message juste avant et ce que tu viens de dire confirme ce que je soupconnais, la partition bootable est indiquée dans le MBR comme je le pensais d’après toi. Cela s’appelle donc le témoin d’amorce comme tu viens de me l’apprendre.

Alors, pense tu que ma théorie est plausible ? Peut être que toi aussi tu pense que ça fonctionne comme je le pense. :slightly_smiling:

Salut,

Le témoin d’amorçage ne sert strictement à rien dans le processus GRUB.

IL est meme possible de déclarer plusieurs partitions primaire d’un meme disque comme amorçable :smiley: (le fdisk de Linux fait cela très bien.)

il me semble que c’est le bios qui recherche le témoin d’amorce et qui passe le relais au bootloader

misaine, je pense que tu as raison. J’étais justement en train d’y penser. En effet, après avoir fait un test, si il n’y a rien dans le MBR, mais qu’on a installé un système avec grub installé dans cette partition, alors si la partition est amorçable, grub se lance au démarrage.
Ce qui veut donc dire que c’est bien le bios qui lirait la table des partitions.

Cela voudrait donc dire qu’au final, le bios ne lit jamais le MBR en premier ? Chose que je pensais, mais apperemment ce n’est pas le cas.

Mais pour en revenir à mon exemple précédent. Si le bootloader de windows est installé dans le MBR et que la partition amorcable est celle de Debian.
Alors ce qu’il se passe au démarrage selon moi, c’est : le bios lit la table des partitions, voit que la partition amorçable est celle de Debian (sda2 par exemple). A ce propos, si plusieurs partitions sont dites amorçables, c’est à dire qu’il y a plusieurs témoin d’amorce, peut être que le bios choisit la première partition dans la liste ?!
Bon, donc le bios lit la table des partitions, lit le grub de la partition de debian, et exécute grub. Et dans ce cas là, le MBR où est installé le bootloader de Windows a bien été complètement zappé.

Maintenant, si la partition amorçable est sda1, où est installé Windows. A ce moment là, le bios lit tout d’abord la table des partitions, voit que c’est sda1 qui est amorçable.
A ce moment là, différentes possibilités. Entre autre, soit le bios décide bêtement de lire le premier secteur de sda1, et comme il voit qu’il n’y a rien, lit le MBR.
Autre possibilité, dans la table des partitions serait écrit pour chaque partition si un bootloader est présent, et si oui si il est dans le MBR ou pas. A ce moment là, le bios peut savoir s’il doit lire le MBR ou pas.
Ou alors 3ème possibilité, le bootloader de Windows est installé et dans le MBR mais aussi par défaut dans la partition de windows.

Pour me faire une idée de la chose et vérifier cela, il faudrais que je supprime la table des partition, tout en gardant le MBR avec le bootloader installé.
Mais comment faire ?
La commande dd if=/dev/zero of=/dev/sda bs=446 count=1 permet de formater les 446 premiers octets du MBR, en fait cela permet de supprimer le bootloader tout en gardant intact la table des partitions.
Moi je voudrais faire le contraire, il y a moyen d’indiquer à partir de quel octet formater ? :slightly_smiling:

il ne peut y avoir qu’un seul temoin d’amorçage . d’ailleur gparted l’indique en message d’erreur si on essaye d’en mettre plusieurs
d’autre outils (en ligne de commande) le prouvent aussi
forum.ubuntu-fr.org/viewtopic.php?pid=642793

.

Re,

[quote]/dev/hdb1 [size=200]*[/size] 1 2433 19543041 83 Linux
/dev/hdb2 [size=200]*[/size] 2434 7299 39086145 7 HPFS/NTFS
[/quote]

La preuve :smiley:

[quote=“tellmewhy”]Bonsoir Ptilutin, :slightly_smiling:

Es-tu sûr d’avoir écrasé les 446 premiers octets du MBR du disque sur lequel tu démarrais ?
N’as-tu pas plusieurs disques durs ?

Si j’écrase les 446 premiers octets du MBR, peu importe que j’aie un témoin d’amorce,
même avec Grub d’installé sur le secteur de boot de ma partition, je ne démarre pas.[/quote]

sûr et certain.
J’ai fait la commande que j’ai dit : dd if=/dev/zero of=/dev/hda bs=446 count=1
Et la preuve c’est qu’avant de faire ça j’ai formaté mon disque entier avec fdisk sauf le MBR qui ne pouvait etre effacé de cette façon et quand je démarrais j’avais un message d’erreur de grub.
Après avoir fait ma manip plus d’erreur de grub au démarrage, il a été supprimé. Ensuite j’ai installé une debian minimale sur une partition (sda1) et ait installé grub dans le premier secteur de sda1.
En mettant la partition non bootable, c’est comme si j’avais rien installé, donc pareil que après avoir effacé le MBR.
Après avoir mis la partition bootable, j’ai grub qui s’affiche. :smiley:

Maintenant je vais faire le test en mettant un bootloader dans le MBR, puis en effacant la table des partitions.
Au fait, comment on fait pour indiquer à grub non pas une partition de disque dur mais un lecteur de cd, à la commande :
grub > root (hd0,0) -> j’aimerais indiquer un lecteur de cd à la place
Car là sur mon disque de sauvegarde linux j’arrive pas à installer grub. En gros le setup (hd0) devrait fonctionner mais ça marche pas.

En plus je viens de faire une connerie à l’instant, j’ai viré le grub de sda1 mais en même temps j’ai viré aussi toutes les informations sur le système de fichier. Je suis reparti pour une nouvelle installation du coup. :smiley:

Sinon si je n’arrive pas à réinstaller grub sur le MBR de cette façon je vais faire, vu que je n’ai pas trouvé de commande concrète :

dd if=/dev/sda1 of=/tmp/grub bs=446 count=1

puis

dd if=/dev/zero of=/dev/sda bs=512 count=1

puis

dd if=/tmp/grub of=/dev/sda bs=446 count=1

et enfin

dd if=/dev/zero of=/dev/sda1 bs=446 count=1

On verra bien si ça marche :wink:

.

Hello, :slightly_smiling:
J’ai finit aujourd’hui mes petites expériences sur grub. Je suis content car j’ai réussi à faire ce que je voulais, à savoir un super grub !

Tout d’abord j’ai vérifié qu’en supprimant la table des partitions, mais en gardant grub dans le MBR, celui-ci ne puisse démarrer.
Au final, même aucun message de grub ne s’affichait pas, ce qui pourrait laisser penser que le bios ne pouvait même pas y accéder (alors qu’il était bel et bien présent)
Chose étrange d’ailleurs, car j’aurais pu penser que le bios aurait pu lire directement sans le table de partition la premier secteur du disque dur. Cela dit je me suis basé sur les messages que j’obtenais au boot pour dire cela. Ainsi je m’attendais à avoir une erreur de grub au démarrage, mais même si je n’ai pas d’erreur de grub, cela ne veut pas forcément dire que le bios n’a pas pu lire le MBR directement.
D’ailleurs je pense au contraire que le bios est en vérité capable de lire directement le MBR, ça me semble normal.

En tout ça ce dont je suis certain maintenant c’est que le bios lit d’abord la table des partition avant d’éxecuter ce qu’il y a dans le MBR.
Pour rigoler ensuite je me suis amusé à faire un chaînage entre différents grub appartenant chacun à une partition boot differente.

enfin finalement j’ai fait mon super grub qui est à mon gout le meilleur moyen de gérer du multi boot lorsque il y a plus de 2 système installés et lorsque l’on fait plein d’installation réinstallation.

Pour cela j’ai crée une mini partition. J’ai mis cette partition au début du disque devant toutes les autres et elle n’est reliée à aucun système. Cela dit cette partition peut être n’importe où sur le disque.
Cette partition contient uniquement un dossier /boot/grub/ contenant les fichiers nécessaires pour grub.
Ensuite j’ai installé grub dans le secteur d’amorçage de cette partition. Ainsi mon MBR sera toujours vide, ce qui est bien.
En effet, cela est bien car je n’aurais maintenant jamais à me poser la question si mon MBR sera écrasé ou non lors de l’installation d’un système. La partition qui bootera au démarrage sera toujours la première partition du disque et ce super grub contiendra juste les chaînages vers les autres bootloader des systèmes.

Maintenant mon prochain but est de me faire un mini cd d’install automatique de cette mini partition. :smiley:

alors là bravo :stuck_out_tongue:
mais ton super grub depend quand même de l’OS qui l’a installé.
que se passe t’il si tu supprimes cet OS (pour le remplacer par un autre par exemple) ?

ps il te reste plus qu’a lui ajouter un joli grub graphique (gfx-grub)
et ce sera parfait 8)

.

[quote=“Ptilutin”]J’ai fait la commande que j’ai dit : dd if=/dev/zero of=/dev/hda bs=446 count=1
Et la preuve c’est qu’avant de faire ça j’ai formaté mon disque entier avec fdisk sauf le MBR qui ne pouvait etre effacé de cette façon et quand je démarrais j’avais un message d’erreur de grub.
Après avoir fait ma manip plus d’erreur de grub au démarrage, il a été supprimé. Ensuite j’ai installé une debian minimale sur une partition (sda1) et ait installé grub dans le premier secteur de sda1.
En mettant la partition non bootable, c’est comme si j’avais rien installé, donc pareil que après avoir effacé le MBR.
Après avoir mis la partition bootable, j’ai grub qui s’affiche.[/quote]
Quand on partitionne un disque vierge on attribue un label au disque. Le label qui est utilisé par défaut sur les PC est de type ms-dos et il se traduit entre autre par un IPL très basique placé sur les premiers octets du 1er secteur (le MBR) du disque. Pour faire simple cet IPL va chercher le secteur de démarrage de la partition primaire marquée comme amorçable (une seule partition doit être amorçable sous peine d’erreur dans le cas où l’on utilise l’une de ces antiquités dans le MBR).
Donc à priori il n’y rien d’anormal dans ton cas. Par contre si maintenant tu écrases les 446 premiers octets du MBR et que ton système continue à démarrer je rejoindrai tellmewhy dans sa perplexité… :slightly_smiling:

Grub et autres bootloader modernes fonctionnent différament.

Pour aller plus loin (en anglais) :
geocities.com/thestarman3/asm/mbr/index.html