<-
Nasgaïa > Forums > Documentation > Doc HTML

Grub

Auteurs: Martial

Date: 2003-09-18

Modif:

Quelques exemples d'utilisation de Grub

Voir aussi

top

Présentation

GRub signifie Grand unified boot loader. Un boot loader (gestionnaire de démarrage) est un bout de logiciel qui vient se greffer dans le secteur de démarrage d'un disque (disque-dur, disquette, ou même CD-ROM) et à pour fonction de permettre le chargement du système d'exploitation.

GRub peut faire cela de deux manières:

  1. Manière directe: GRub sait ou trouver le noyau, comment le charger, ainsi que le système de fichiers sur lequel il est situé. Cette approche fonctionne avec Linux et la plupart des autres Unix.
  2. Manière indirecte: GRub utilise la méthode de chain loading pour passer la main à un système d'exploitation dont il ne sait pas gérer le noyau, par exemple MS Windows© ou OS/2©. Dans ce cas là, le système d'exploitation à son propre secteur de démarrage en début de partition, GRub se contente de lui passer la main. De cette manière il est aussi possible de passer la main d'un GRub installé sur le MBR à un LILO installé sur une partition (voir détails plus loin).

Pourquoi GRub plutôt que LILO

Les deux sont très bien, et techniquement permettent exactement les même choses. Notre choix c'est porté sur GRub pour deux raisons:

  1. Le MBR ou secteur de démarrage n'est écrit qu'une seule fois, ensuite on peut modifier le menu GRub (menu.lst) à volonté, cela est pris en compte immédiatement, sans équivalent du /sbin/lilo à chaque modification du lilo.conf. Cela limite les risque d'erreurs utilisateur. De plus, une entrée dans GRub peut être fausse, cela ne rend pas le MBR inutilisable, les autres entrées reste accessible, ou au pire, (ex, plus de menu.lst du tout) le mode interactif reste disponible.
  2. La présence du mode interactif (le shell grub), très puissant et facile à manier, avec listing des partition existantes, auto-complétion avec la touche TAB, l'aide incorporée sur les commandes, permettent de découvrir soit même les commandes GRub, d'éviter les erreurs grossières - c'est donc un excellent outil pédagogique.

Si vous êtres habitué à LILO, n'ayez pas d'appréhension: GRub fonctionne exactement sur les même principes de base, seule la syntaxe diffère, et ce document devrait répondre à la plupart de vos doutes.

top

Organisation d'un disque

fig 1

Seules les partitions primaires sont "bootables", donc la partition étendue est bootable, mais pas les lecteurs "logiques" qu'elle contient. La partition étendue peut-être remplacée par une partition primaire normale.

Cela ne veut pas dire que l'on ne peut pas booter sur une distribution situé sur (hd0,5), mais que ce sera au MBR de tout lancer lui-même; et ne pourra pas passer la main à un boot loader propre à cette partition qui ne peut en acceullir.

1ère conclusion: Linux peut être installé sur n'importe quelle partition, tandis que d'autres OS doivent l'être impérativement sur une partition primaire (bootable), et souvent cela est même restreint (au niveau de l'OS) à (hd0,0).

Quand il y'a moins de trois partitions primaire, grub notes les partitions étendues à partir de (hd0,4) malgré tout - il peut donc ne pas y'avoir de (hd0,1) et (hd0,2).

Quelques exemples

Imaginons le scénario suivant: Vous avez un OS de type Windows© installé sur (hd0,0), une Nasgaïa sur (hd0,1), une Mandrake sur (hd0,2), une Slackware sur (hd0,4) et des données sur les partition restantes.

Boot de Windows
root (hd0,0)
makeactive
chainloader +1

Boot de la Nasgaïa:
kernel (hd0,1)/boot/vmlinux-2.4.21-nga root=/dev/hda2

Boot de la Mandrake, directement:
kernel (hd0,2)/boot/vmlinuz root=/dev/hda3 devfs=mount

Boot de la Mandrake, indirectement: Si pour une raison quelconque, vous avez installé LILO sur le secteur de démarrage de (hd0,2), vous pouvez aussi bien avoir le menu LILO après celui de GRub:

root (hd0,2)
makeactive
chainloader +1

Note: En cas de problème avec le LILO installé sur (hd0,2), vous voyez que GRub vous permet de booter sur cette partition facilement, afin de corriger le problème, plutôt sympa non ?

Boot sur la Slackware Dans notre exemple, elle est situé sur un lecteur logique, donc la partition n'a en aucun cas son propre boot-loader:

kernel (hd0,4)/boot/vmlinux root=/dev/hda5 devfs=mount

Booter sur une disquette de démarrage:

root (fd0)
chainloader +1

top

Usages de root() et root=

Reprenons un exemple précédent:

kernel (hd0,1)/boot/vmlinux-2.4.21-nga root=/dev/hda2

Nous aurions pu le faire en deux ligne:

root (hd0,1)
kernel /boot/vmlinux-2.4.21-nga root=/dev/hda2

Dans le deuxième cas, on ne précise pas (hd0,1) devant le chemin de l'image noyau - c'est uniquement à cela que sert root() - cela donne un chemin de recherche, de manière interne, à GRub.

Au contraire, l'option root= est passé directement au noyau lui-même et remplis une fonction différente: lui indiquer quelle partition il va essayer de monter en tant que racine. Si vous compiler vous même un noyau, root= est inutile, car le noyau stocke à la compilation la valeur de la partition racine courante, pour vous en convaincre, tapez la commande rdev, cela vous donnera cette valeure.

Il est possible d'utiliser rdev pour mettre à jour cette valeur (ce que notre CD d'installation fait pour vous) - cependant, l'utilisation de root= reste conseillée, car on a la valeur sous les yeux, et évite de monter la mauvaise racine sans comprendre ce qui se passe.

Conclusion: root() est utilisé par grub lui-même, tandis que root= est passé au noyau et n'est utilisé qu'après chargement en mémoire de ce dernier.

top

Correspondance entre appellations GRub, LILO, devfs

LILO GRUB devfs
1er Disque dur:
/dev/hda (hd0) {ide,scsi}/host0/bus0/target0/lun0/disc

3 1ère par primaires:
/dev/hda1 (hd0,0) {ide,scsi}/host0/bus0/target0/lun0/part1
/dev/hda2 (hd0,1) {ide,scsi}/host0/bus0/target0/lun0/part2
/dev/hda3 (hd0,2) {ide,scsi}/host0/bus0/target0/lun0/part3


cas d'une 4ème part primaire
/dev/hda4 (hd0,3) {ide,scsi}/host0/bus0/target0/lun0/part4

cas d'une partition étendue:
/dev/hda4 (hd0,3) {ide,scsi}/host0/bus0/target0/lun0/part4
lecteurs logique de la partition étendue:
/dev/hda5 (hd0,4) {ide,scsi}/host0/bus0/target0/lun0/part4
/dev/hda6 (hd0,5) {ide,scsi}/host0/bus0/target0/lun0/part6
etc...

La même chose vaut pour les disques suivant (hd1, hdb etc...)

Note: ne prenez ceci que comme un exemple, dans le cas "étrange" ou vous auriez un lecteur de CD-ROM sur /dev/hda, et le 1er disque dur sur /dev/hdb, (hd0) équivaudrait alors à /dev/hdb et non plus à /dev/hda. GRub tient compte uniquement compte que des disques dur présent, pas des autres périphériques IDE ou SCSI.

grub --batch <<EOT
root (hd0,2)
setup (hd0)
quit
EOT