Projet de distribution GNU/Linux
Auteurs: Martial
Date: 2003-09-18
Modif:
Quelques exemples d'utilisation de Grub
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:
Les deux sont très bien, et techniquement permettent exactement les même choses. Notre choix c'est porté sur GRub pour deux raisons:
/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.
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.
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).
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
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.
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