GRUB, le manuel

Un article de Wiki de la communauté Mandriva.

Jump to: navigation, search
Cette page est en cours de traduction par Lebarhon depuis la version originale : [GNU GRUB Manual 0.97]

Si vous voulez aider à sa traduction, cliquez simplement sur l'onglet modifier. Vous pouvez contacter le traducteur en cliquant sur son nom et en modifiant sa page de discussion.

Consultez également les autres pages à traduire.

NdT signifie Nota du Traducteur et apporte des compléments de traduction ou d'information nécessaires à la compréhension. Ils ne sont pas dans le document original.

Lebarhon: Cette police indique un passage que je ne sais pas traduire

À noter !
Il existe une page moins technique à propos de grub.
Un manuel GNU

Ceci est la documentation de GNU GRUB, le Grand Unified Bootloader, un programme chargeur de boot souple et puissant pour PC.

Cette édition est la documentation de la version 0.97 (8 Mai 2005).

Copyright © 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc.

La permission est accordée de copier, distribuer et/ou modifier ce document conformément aux termes de la licence de la GNU Free Documentation, version 1.2 ou ultérieure publiée par la Free Software Foundation.

Licence de la documentation libre GNU License pour copier ce manuel.

Sommaire


[modifier] Introduction à GRUB

[modifier] Présentation

Brièvement, un chargeur de boot est le premier programme exécuté au démarrage d'un ordinateur. Il a en charge le chargement du noyau du système d'exploitation (tel que Linux ou GNU Mach) puis de lui transférer les commandes. Le noyau, à son tour, initialise le reste du système d'exploitation (par ex. un système GNU).

GNU GRUB est un chargeur de boot très puissant, il peut charger une grande variété de systèmes d'exploitation libres, ainsi que des systèmes propriétaires avec chain-loading (voir nota). GRUB est conçu pour répondre à la complexité du boot d'un ordinateur individuel; ensemble, le programme et ce manuel sont étroitement liés pour ce type d'ordinateur, bien que d'autres plate-formes seront possibles dans le futur.

Une des caractéristiques importantes de GRUB est sa souplesse; GRUB comprend les systèmes de fichiers et les formats exécutables du noyau, ainsi vous pouvez charger un système d'exploitation quelconque de la façon qui vous plaît, sans avoir à enregistrer la position physique du noyau sur le disque. Cela vous permet de charger le noyau simplement en spécifiant son nom de fichier, le lecteur et la partition ou il réside.

Pour booter avec GRUB, vous pouvez utiliser soit l'interface en ligne de commande (voir Interface en ligne de commande), ou l'interface menu). Avec l'interface en ligne de commande, vous entrez à la main la désignation du lecteur et le nom de fichier du noyau. Avec l'interface menu, vous choisissez simplement un OS en utilisant les touches fléchées. Le menu est basé sur un fichier de configuration que vous préparez au préalable (voir Configuration). Quand vous êtes dans le menu, vous pouvez passer en mode ligne de commande et vice versa. Vous pouvez même éditer les entrées du menu avant de les utiliser.

Dans les chapitres qui suivent, vous apprendrez comment spécifier un lecteur, une partition et un nom de fichier à GRUB (voir Conventions d'appellation), comment installer GRUB sur votre lecteur (Voir Installation), et comment booter sur vos OS (Voir Boot), pas à pas.

Aux côtés du chargeur de boot GRUB lui-même, il y a un shell grub appelé avec la commande grub (voir Invoquer le shell Grub) qui peut être exécuté alors que vous êtes dans le système d'exploitation. Il émule le chargeur de boot et peut être utilisé pour installer le chargeur de boot.

Nota: chain-loading ou chaînage est un mécanisme qui permet de charger des systèmes d'exploitation non supportés en chargeant un autre chargeur de boot. Il est typiquement utilisé pour charger DOS ou Windows.

[modifier] Historique de GRUB

GRUB naquit en 1995 quand Erich Boleyn essayait de booter le GNU Hurd avec le micro noyau Mach 4 de l'université de Utah (maintenant connu sous le nom de GNU Mach). Erich and Brian Ford conçurent la spécification du multiboot (voir Spécification du multiboot), car ils étaient déterminés à ne pas ajouter un grand nombre de méthodes de boot de PC mutuellement incompatibles.

Erich commença alors la modification du chargeur de boot FreeBSD pour lui faire accepter le multiboot. Il comprit rapidement que se serait beaucoup plus facile d’écrire son propre chargeur de boot depuis la feuille blanche que de continuer à travailler sur le chargeur de boot de FreeBSD, et GRUB naquit ainsi.

Erich dota GRUB de nombreuses possibilités, mais d’autres priorités l’empêchèrent de continuer face aux exigences des utilisateurs dont le nombre augmentait rapidement. En 1999, Gordon Matzigkeit et Yoshinori K. Okuji ont admis GRUB en tant que paquetage officiel GNU, et ouvrirent son développement en rendant les dernières sources disponibles sur les CVS anonymes. Voir Obtenir et construire GRUB pour plus d’informations.

[modifier] Caractéristiques de GRUB

La qualité primordiale de GRUB est de satisfaire aux exigences de la Spécification du Multiboot, qui est spécifiée dans Multiboot Specification.

Les autres objectifs, listés dans un ordre approximatif d’importance, sont :

  • Les fonctions fondamentales doivent être très simples à l’intention des utilisateurs finals
  • Riches de fonctionnalités à l’intention des experts et développeurs de noyau
  • Rétro-compatibilité pour booter FreeBSD, NetBSD, OpenBSD et Linux. Les noyaux propriétaires (tels que DOS, Windows NT et OS/2) sont supportés via la fonction chaînage (chain-loading).

A l’exception de modes de compatibilité spécifiques (chain-loading et le format pris en charge par Linux), tous les noyaux sont démarrés en grande partie conformément à la Spécification du Multiboot. Seuls les noyaux chargés au niveau de 1 mégaoctet et au-dessus sont actuellement supportés. Toute tentative de les charger en-dessous de cette limite provoquera immédiatement une défaillance et l’affichage d’un message d’erreur signalant le problème.

En plus des exigences ci-dessus, GRUB possède les caractéristiques suivantes (remarquez que la Spécification Multiboot n’exige pas toutes ces caractéristiques que GRUB possède) :

Reconnaissance de multiples formats exécutables 
Supporte beaucoup de variantes de a.out plus ELF. Les tables de symboles sont chargées aussi.
Supporte les noyaux non multiboot 
Supporte beaucoup de divers noyaux 32 bits libres qui respectent peu les exigences du multiboot (premiers FreeBSD, NetBSD, OpenBSD et Linux). Le chaînage (Chain-loading) des autres chargeurs de boot est aussi supporté.
Chargement de multiples modules 
Supporte pleinement la caractéristique multiboot de chargement de multiples modules
Chargement d’un fichier de configuration 
Supporte les fichiers texte de configuration lisibles par un humain avec des commandes de boot programmées. Vous pouvez aussi charger dynamiquement un autre fichier de configuration et enchâsser un fichier de configuration programmé dans un fichier image de GRUB. La liste des commandes (voir commandes) constitue un super-jeu de celles supportées en ligne de commande. Un exemple de fichier de configuration est donné dans Configuration
Dispose d’un menu en interface 
En interface, un menu présentant la liste des commandes de boot programmées, avec un temps d’expiration programmable, est disponible. Il n’existe pas de limite au nombre d’entrées de boot. L’implémentation actuelle a suffisamment d’espace pour plusieurs centaines.
Possède une interface flexible en ligne de commande 
Une interface flexible en ligne de commande plutôt réussie, accessible depuis le menu, est disponible pour modifier toute commande programmée, ou écrire entièrement un nouveau jeu de commandes de boot. Si aucun fichier de configuration n’est présent, GRUB renonce à la ligne de commande.
La liste des commandes (voir commandes) constitue un sous-jeu de celles supportées pour les fichiers de configuration. L’édition des commandes ressemble de près aux commandes du Bash en ligne de commande, avec l’auto-complétion des commandes grâce à TAB, les périphériques, les partitions et les fichiers étant dans un répertoire dépendant du contexte.
Supporte de multiples systèmes de fichiers 
Supporte de multiples systèmes de fichiers de façon transparente, plus une notation des listes de blocs explicite et utile. Les systèmes de fichiers actuellement supportés sont BSD FFS, DOS FAT16 et FAT32, Minix fs, Linux ext2fs, ReiserFS, JFS, XFS et VSTa fs. Voir Systèmes de fichiers pour plus d’informations.
Supporte la décompression automatique 
Peut décompresser les fichiers compressés avec gzip. Cette fonction est à la fois automatique et transparente pour l’utilisateur (C'est-à-dire toutes les fonctions agissent sur le contenu non compressé des fichiers spécifiés). Cela réduit grandement la taille des fichiers et le temps de chargement, un bénéfice particulièrement important pour les disquettes.
Il est concevable que des modules de noyaux doivent être chargés sous forme compressée, aussi une commande différente de chargement de modules peut être utilisée pour éviter la décompression des modules
Accède aux données de tout périphérique installé 
Supporte la lecture sur tout périphérique disquette ou disque dur reconnu par le BIOS, indépendamment de la configuration du périphérique racine (root device)
Est indépendant de la translation géométrique des lecteurs 
A la différence de nombreux autres chargeurs de boot, GRUB rend sans importance une translation de lecteur particulière. Un lecteur installé et fonctionnant avec une translation peut être converti dans une autre translation sans aucun effet pervers ou changement dans la configuration de GRUB.

Lebarhon: Je ne connais pas cette notion de translation des lecteurs. Correct ?'solaris: Le mot translation désigne l'action de déplacer quelque chose ou transfert (solaris...25-10-07)

Détecte toute la RAM installée 
GRUB peut généralement détecter toute la RAM installée sur un compatible PC. Il utilise une technique avancée d’interrogation du BIOS pour trouver toutes les régions de la mémoire. Comme décrit dans la Spécification du Multiboot (voir Spécification du Multiboot), tous les noyaux ne font pas usage de cette information, mais GRUB la donne pour ceux qui l’utilisent.
Supporte le mode d’adressage des blocs logiques 
Lors des appels par les disques traditionnels (appelé mode CHS), il y a un problème de translation géométrique, ce qui fait que le BIOS ne peut pas accéder au-delà de 1024 cylindres, ainsi l’espace accessible est limité à 508 Mo pour le moins et au plus à 8Go. GRUB ne peut résoudre universellement ce problème, car aucune interface standard n’est utilisée par toutes ces machines. Cependant, plusieurs machines récentes possèdent une nouvelle interface, le mode d’adressage des blocs logiques (LBA). GRUB détecte automatiquement si le mode LBA est disponible et l’utilise si c’est le cas. En mode LBA, GRUB peut accéder à tout le disque
Supporte le boot en réseau 
GRUB est fondamentalement un chargeur de boot basé sur le disque, mais il supporte aussi le réseau. Vous pouvez charger des images d’OS depuis le réseau en utilisant le protocole TFTP.
Supporte les terminaux distants 
Pour supporter les ordinateurs sans console, GRUB fournit le support de terminaux distants, ainsi vous pouvez contrôler GRUB depuis un hôte distant. Seuls les terminaux série sont implémentés pour le moment.

[modifier] Le rôle d'un chargeur de boot

Ce qui suit est une citation de Gordon Matzigkeit, un fanatique de GRUB :

Certaines personnes aiment donner la même importance a la fois au système d'exploitation et au noyau quand ils parlent de leur ordinateur, aussi ils peuvent dire qu'ils utilisent « GNU/Linux » or « GNU/Hurd ». D'autres semblent penser que le noyau est le plus important, aussi ils aiment appeler leur système d'exploitation « le système Linux ».
Moi, je crois que c'est une grande injustice, car le chargeur de boot est le plus important de tous les logiciels. J'ai l'habitude de faire référence au système ci-dessus sous le nom de système « LILO »(voir nota) ou « GRUB ».
Malheureusement, personne n'a jamais compris de quoi je parlais ; maintenant j'utilise simplement le mot « GNU » comme pseudonyme de GRUB.
Aussi, si jamais vous entendez quelqu'un parler de leur présumé système « GNU », rappelez vous qu'ils rendent hommage en fait au meilleur chargeur de boot des alentours ... GRUB!

Nous, les mainteneurs de GRUB, n'encourageons pas (habituellement) le niveau de fanatisme de Gordon, mais il aide à se rappeler que les chargeurs de boot méritent reconaissance. Nous espérons que vous apprécierez autant l'utilisation de GNU GRUB comme nous avons apprécié de l'écrire.

Nota : Le chargeur Linux (LInux LOader), un chargeur de boot que tout le monde utilise, mais que personne n'aime.

[modifier] Conventions d'appellation

La syntaxe de désignation des lecteurs dans GRUB est légèrement différente de ce que vous avez pu voir jusque là dans votre système d'exploitation, et vous devez la connaître afin de pouvoir désigner un lecteur ou une partition.

Observez les exemples suivants avec leurs explications :

(fd0)

Avant toute chose, GRUB exige que le nom du périphérique soit compris entre '(' et ')'. Le fd signifie qu'il s'agit d'une disquette. Le nombre 0 est le numéro du lecteur, qui est compté à partir de zéro. Cette expression signifie que GRUB utilisera toute la disquette.

(hd0,1)

Ici, hd signifie qu'il s'agit d'un disque dur. Le premier entier 0 indique le numéro du lecteur, qui est le premier disque dur, tandis que le second entier, 1 indique le numéro de la partition (ou le numéro de tranche dans la terminologie BSD). Une fois de plus, notez que les numéros de partition sont comptés à partir de zéro, pas de un. Cette expression signifie la seconde partition du premier disque dur. Dans ce cas, GRUB utilise une partition du disque, au lieu du disque entier.

(NdT : hd concerne les disques durs IDE, les récents disques SATA sont désignés par sd).

(hd0,4)

Ceci spécifie la première partition étendue du premier disque dur. Notez que la numérotation des partitions étendues commence à 4, indépendamment du nombre de partitions présentes sur le disque dur.

(hd1,a)

Ceci désigne pour BSD la partition « a » du second disque dur. Si vous devez spécifier quel numéro de la tranche pc doit être utilisée, écrivez quelque chose comme cela : « (hd1,0,a) ». Si le numéro de la tranche pc est omis, GRUB recherche la première tranche pc qui a une partition BSD « a ».

Lebarhon : je ne suis pas sûr de l’expression "tranche pc" ? solaris : (segment)(portion) ex:si vous deviez spécifier quel segment du pc doit etre utilisée..... serais le mot pour définir : tranche pc selon moi ( solaris...25-10-07)

Bien sûr, pour accéder aux disques et partitions avec GRUB, vous avez besoin de mentionner la désignation du périphérique dans une commande, comme root (fd0) ou unhide (hd0,2). Pour vous aider à trouver par quel numéro une partition est désignée, les options de la ligne de commande GRUB permettent l’auto-complétion des arguments (voir l’interface en ligne de commande). Cela signifie, par exemple, que vous n’avez à taper que

root (

suivi d’un TAB, et GRUB affichera la liste des lecteurs, partitions et noms de fichier. Ainsi il devrait être assez facile de déterminer le nom de la partition désirée, même avec une connaissance minimum de la syntaxe.

Notez que GRUB ne fait pas la distinction entre IDE et SCSI. Il compte tout simplement les lecteurs depuis zéro, indépendamment de leur type. Normalement, tout numéro de lecteur IDE est inférieur à tout numéro de lecteur SCSI, bien que cela ne soit plus vrai si vous changez la séquence de boot en intervertissant des lecteurs IDE et SCSI dans le BIOS.

Maintenant la question est comment spécifier un fichier ? Une fois de plus, considérons un exemple :

(hd0,0)/vmlinuz

Ceci spécifie le fichier nommé vmlinuz, trouvé sur la première partition du premier disque dur. A noter que l’auto-complétion de l’argument fonctionne aussi avec les noms de fichier.

C’était facile, admettez le. Maintenant lisez le chapitre suivant pour découvrir comment installer GRUB sur votre lecteur.

[modifier] Installation

Dans le but d’installer GRUB comme chargeur de boot, vous devez d’abord installer le système GRUB et les utilitaires dans votre système d’exploitation de type Unix (voir Obtenir et construire GRUB). Vous pouvez faire cela soit depuis le tarball source soit depuis un paquetage de votre système d’exploitation.

Une fois cela fait, vous devez installer le chargeur de boot sur un lecteur (disquette ou disque dur). Il y a deux façons de le faire – soit utiliser l’utilitaire grub-install (voir Invoquer grub-install) sur un OS de type Unix, soit en exécutant GRUB lui-même depuis une disquette. Les deux méthodes sont similaires, cependant l’utilitaire risque de détecter un lecteur erroné dans le BIOS, aussi vous devez être attentif.

Aussi, si vous installez GRUB sur un OS de type Unix, assurez vous d’avoir un disque de boot de secours, ainsi vous pourrez récupérer votre ordinateur si, par malchance, votre disque dur devenait inutilisable (non bootable).

GRUB contient des images de boot, qui sont normalement placées dans le répertoire /usr/lib/grub/i386-pc. Si vous n’utilisez pas grub-install, alors vous devez copier les fichiers stage1, stage2 et *stage1_5 dans le répertoire /boot/grub et exécuter grub-set-default (voir Invoquer grub-set-default) si vous avez l’intention d’utiliser ‘’default saved’’ (voir default) dans votre fichier de configuration.

Ci-après, le répertoire où les images GRUB sont initialement placées (normalement /usr/lib/grub/i386-pc sera appelé le "répertoire image", et le répertoire où le chargeur de boot doit les trouver (habituellement /boot/grub) sera appelé le "répertoire de boot".

[modifier] Création d’une disquette de boot GRUB

Pour créer une disquette de boot GRUB, vous devez prendre les fichiers stage1 et stage2 du "répertoire image" et les écrire respectivement sur les premier et second blocs de la disquette.

Attention La procédure détruira toutes les données présentes sur la disquette.

Sur un système d’exploitation de type Unix, cela est réalisé avec les commandes suivantes :

 # cd /usr/lib/grub/i386-pc
     # dd if=stage1 of=/dev/fd0 bs=512 count=1
     1+0 records in
     1+0 records out
     # dd if=stage2 of=/dev/fd0 bs=512 seek=1
     153+1 records in
     153+1 records out
     #

Le nom de fichier du périphérique peut être différent. Consultez le manuel de votre OS.

[modifier] Installation de GRUB nativement

Attention L’installation de stage1 de GRUB de cette manière effacera le secteur de boot normalement utilisé par un OS.

GRUB peut actuellement booter directement GNU Mach, Linux, FreeBSD, NetBSD et OpenBSD, aussi l’utiliser sur le secteur de boot (le premier secteur d’une partition) devrait convenir. Mais généralement, cela peut être une bonne idée de sauvegarder le premier secteur de la partition sur lequel vous installez le fichier stage1 de GRUB. Cela n’est pas aussi important si vous installez GRUB sur le premier secteur d’un disque dur, puisqu’il est facile de le réinitialiser (par exemple en exécutant FDISK/MBR depuis le DOS). (NdT : Sous Windows XP, utiliser la console de réparation)

Si vous décidez d’installer GRUB dans l’environnement natif, ce qui est vraiment préférable, vous devrez créer un disque de boot GRUB et rebooter votre ordinateur avec. Autrement voir Installer GRUB avec grub-install.

Une fois démarré, GRUB présentera l’interface en ligne de commande (voir L’interface en ligne de commande). Premièrement, indiquer à GRUB que le périphérique de root (voir nota) est la partition contenant le répertoire de boot, comme ceci :

grub> root (hd0,0)

Si vous n’êtes pas sûr de la partition qui contient ce répertoire, utilisez la commande find (voir find) , comme ceci :

grub> find /boot/grub/stage1

Cela recherchera le fichier /boot/grub/stage1 et présentera le périphérique qui contient ce fichier.

Une fois correctement établi le périphérique de root, exécutez la commande setup (voir setup) :

grub> setup (hd0)

Cette commande installera le chargeur de boot GRUB sur le Master Boot Record (MBR) du premier lecteur. Si vous désirez mettre GRUB dans le secteur de boot d’une partition au lieu du MBR, spécifier cette partition :

grub> setup (hd0,0)

Si vous installez GRUB dans une partition ou un lecteur autre que le(la) premier(ière), vous devez chaîner (NdT :chainload) GRUB depuis un autre chargeur de boot. Se reporter au manuel du chargeur de boot pour savoir comment chaîner GRUB.

Après l’utilisation de la commande setup, vous booterez avec GRUB sans la disquette GRUB. Voir le chapitre Boot pour trouver comment booter votre système d’exploitation avec GRUB.

Nota : Remarquez que le périphérique root de GRUB n’est pas nécessairement la partition de root de votre OS ; si vous avez besoin de spécifier une partition root pour votre OS, ajoutez l’argument dans la commande kernel.

[modifier] Installer GRUB avec grub-install

Attention : Cette procédure est vraiment moins sûre car il existe plusieurs cas pour lesquels votre ordinateur ne pourra plus booter. Par exemple, la plupart des systèmes d’exploitation ne disent pas correctement à GRUB comment faire correspondre les lecteurs BIOS avec les périphériques de l’OS – GRUB sait mal deviner la table de correspondance. Cela réussira dans la plupart des cas, mais pas toujours. Cependant, GRUB vous fournit un fichier de correspondance appelé device map, que vous devez rectifier s’il est faux. Voir La table de correspondance pour plus de détails.

Si vous désirez malgré tout installer GRUB sous un OS de type Unix (tel que gnu), invoquez le programme grub-install (voir Invoquer grub-install) avec les droits du super utilisateur (root).

L’utilisation est fondamentalement très simple. Vous n’avez besoin que de spécifier un argument au programme, nommément, où installer le chargeur de boot. L’argument peut être soit un périphérique (comme /dev/hda) soit une partition spécifiée selon les règles de GRUB. Par exemple, sous Linux, ce qui suit installera GRUB dans le MBR du premier disque IDE :

# grub-install /dev/hda

De même , sous GNU/Hurd, cela produit le même effet :

# grub-install /dev/hd0

Si c’est le premier lecteur du BIOS, cela revient au même :

# grub-install '(hd0)'

Vous pouvez aussi omettre les parenthèses :

# grub-install hd0

Mais tous les exemples ci-dessus présument que GRUB doit utiliser les images placées dans le répertoire root. Si vous souhaitez que GRUB utilise les images placées dans un autre répertoire, vous devez spécifier l’option --root-directory. L’utilisation typique est la création d’une disquette GRUB de boot avec un système de fichiers. Voici un exemple :

# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# grub-install --root-directory=/mnt fd0
# umount /mnt

Un autre exemple lorsque vous avez une partition de boot séparée qui est montée dans /boot. Puisque GRUB est un chargeur de boot, il ignore complètement les points de montage. Ainsi, vous devez exécuter grub-install comme ceci :

# grub-install –root-directory=/boot /dev/hda

A propos, comme indiqué plus haut, il est assez difficile de deviner les lecteurs BIOS correctement sous un OS de type Unix. Ainsi, grub-install vous invitera à vérifier après l’installation si la correspondance des lecteurs est correct. Le format est défini dans La table de correspondance. Soyez très attentif. Si la sortie est fausse, il y a peu de chances que votre ordinateur puisse booter sans problèmes.

Remarquez que grub-install n’est en fait qu’un script shell et que la tâche est en réalité effectuée par le grub shell (voir Invoquer le shell Grub). En conséquence, vous pouvez exécuter grub directement pour installer GRUB, sans utiliser grub-install. Ne faites jamais cela, a moins que vous soyez très familier avec les composants internes de GRUB. Installer un chargeur de boot sur un système d’exploitation en cours d’exécution peut être extrêmement dangereux.

[modifier] Créer un CDROM bootable GRUB

GRUB supporte le mode no emulation de la spécification « El Torito » (voir nota). Cela signifie que vous pouvez utiliser la totalité du CD ROM depuis GRUB et vous n’avez pas besoin de créer un fichier image sur disquette ou disque dur, ce qui peut créer des problèmes de compatibilité.

Pour booter depuis un CD ROM, GRUB utilise un stage 2 spécial appelé stage2_eltorito. Les seuls fichiers GRUB dont vous avez besoin dans votre CD ROM bootable sont ce stage2_eltorito et optionnellement un fichier de configuration menu.list. Vous n’avez pas besoin d’utiliser stage1 ou stage2, car EL Torito est différent des processus de boot standards.

Voici un exemple de procédure pour créer une image de CD ROM bootable. Premièrement, créer un répertoire chapeau pour contenir l’image bootable, disons 'iso' :

$ mkdir iso

Créer un répertoire pour GRUB :

$ mkdir -p iso/boot/grub

Copier le fichier stage2_eltorito :

$ cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub

Si désiré, créer le fichier de configuration menu.list dans iso/boot/grub (voir Configuration), et copier tous les fichiers et répertoires à placer sur le disque dans le répertoire iso/. Enfin, créer une image ISO9660 comme ceci :

$ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \
         -boot-load-size 4 -boot-info-table -o grub.iso iso

Ceci produit un fichier appelé grub.iso, qui peut être gravé sur un CD (ou un DVD). mkisofs a déjà paramétré le disque pour qu’il boote sur le fichier boot/grub/stage2_eltorito, aussi il est inutile de paramétrer GRUB sur le disque. (Notez que le –boot –load –size 4 bit est requis pour la compatibilité avec le BIOS sur beaucoup d’anciennes machines).

Vous pouvez utiliser le périphérique '(cd)' pour accéder au CD ROM dans votre fichier de configuration. Ceci n’est pas exigé ; GRUB paramètre automatiquement le périphérique root à '(cd)' lors du boot depuis un CD ROM. Il n’est nécessaire de se référer à '(cd)' seulement si vous désirez accéder à d’autres lecteurs.

Nota : EL Torito est une spécification pour les CD bootables utilisant les fonctions BIOS.

[modifier] Boot

GRUB peut charger des noyaux compatibles multiboot de façon cohérente, mais pour quelques systèmes d'exploitation libres vous devez utiliser des astuces spécifiques à l'OS.

[modifier] Comment booter les systèmes d'exploitation

GRUB possède deux méthodes distinctes de boot. l'une est de charger l'OS directement, et l'autre est de chainer un autre chargeur de boot qui, alors, chargera le système d'exploitation. Généralement, la première méthode est préférable, car vous n'avez pas besoin d'installer ni de maintenir les autres chargeurs et GRUB est suffisamment flexible pour charger un système d'exploitation depuis n'importe quel disque ou partition. Cependant, la deuxième est quelque fois requise, puisque GRUB ne supporte pas nativement tous les OS existants.

[modifier] Charger directement un système d'exploitation

Multiboot (voir Spécification Multiboot) est le format natif supporté par GRUB. Pour des raisons de commodité, il supporte aussi Linux, FreeBSD, NetBSD et OpenBSD. Si vous désirez booter d'autres systèmes d'exploitation, vous devrez les chainer (voir Charger un autre chargeur de boot pour booter un OS non supporté).

Généralement, GRUB peut booter tout noyau compatible multiboot selon les étapes suivantes :

  1. Etablir le périphérique root de GRUB comme étant le lecteur où les images de l'OS sont enregistrées avec la commande root (voir root).
  2. Charger l'image du noyau avec la commande kernel.
  3. Si vous avez besoin de modules, chargez les avec la commande module (voir module) ou modulenounzip (voir modulenounzip).

Linux, FreeBSD, NetBSD et OpenBSD peuvent être bootés de façon similaire. Vous chargez l'image du noyau avec la commande kernel puis lancez la commande boot. Si le noyau exige des paramètres, ajoutez-les à kernel, après le nom de fichier du noyau. Référez vous aux Mises en garde sur les problèmes d'OS spécifiques, pour des informations sur les problèmes de votre OS spécifiques.

[modifier] Charger un autre chargeur de boot pour booter un OS non supporté

Si vous désirez booter un OS non supporté (par exemple Windows 95), chainez vers un chargeur de boot pour votre OS. Normalement, ce chargeur de boot est placé dans le secteur de boot (boot sector) de la partition sur laquelle l'OS est installé.

1. Etablir le périphérique root de GRUB comme étant la partition en question avec la commande rootnoverify (voir rootnoverify) :

 grub> rootnoverify (hd0,0)

2. Etablir le drapeau actif dans la partition avec la commande makeactive (voir nota et makeactive) :

grub> makeactive

3. Charger le chargeur de boot avec la commande chainloader (voir chainloader)

grub> chainloader +1

+1 indique que GRUB doit lire un secteur depuis le début de la partition. La description complète de cette syntaxe peut être trouvée dans Comment spécifier des blocs de liste.

4. Lancer la commande boot (voir boot).

Cependant, DOS et Windows ont des déficiences, aussi il est possible que vous deviez utiliser quelques instructions compliquées. Voir DOS/Windows pour plus d'informations.

Nota : Ceci n'est plus nécessaire pour la plupart des OS modernes.

[modifier] Mises en garde sur les problèmes d'OS spécifiques

Ici, nous décrivons quelques mises en garde concernant certains OS.

[modifier] GNU/Linux

Il est relativement facile de booter GNU/Linux avec GRUB, car cela ressemble à booter un OS compatible Multiboot.

1. Etablir le périphérique root de GRUB comme étant le même lecteur que celui de GNU/Linux. Probablement que la commande find /vmlinuz ou similaire peut vous aider (voir find).

2. Charger le kernel :

grub> kernel /vmlinuz root=/dev/hda1

Si vous avez besoin de spécifier des paramètres au noyau, ajoutez les à la commande. Par exemple pour définir vga à ext, écrire ceci:

grub> kernel /vmlinuz root=/dev/hda1 vga=ext

voir la documentation dans le Linux source tree pour une information complète sur les options disponibles.

3. Si vous avez besoin d'un initrd, exécutez la commande initrd après le noyau :

grub> initrd /initrd

4. Enfin exécutez la commande boot (voir boot).

Attention : si vous utilisez un initrd et spécifiez l'option mem= au kernel pour ne pas le laisser utiliser toute la mémoire disponible, vous devez aussi spécifier la même quantité de mémoire à GRUB. Pour indiquer cette quantité de mémoire à GRUB, utilisez la commande uppermem avant de charger le noyau. Voir uppermem), pour plus d'informations.

[modifier] DOS/Windows

GRUB ne peut pas booter directement DOS ou Windows, vous devez donc les chainer (voir Charger un autre chargeur de boot pour booter un OS non supporté). Cependant leurs chargeurs de boot ont quelques déficiences critiques, aussi cela peut ne pas être suffisant de simplement les chainer. Pour surmonter les problèmes, GRUB vous fournit deux fonctions d'aide.

Si vous avez installé DOS (ou Windows) ailleurs que sur le premier disque dur, vous devez utiliser la technique de l'échange de disques (disk swapping) car cet OS ne peut pas booter sur un autre disque que le premier. (NdT : Cela n'est plus vrai depuis Win XP). Cela est géré dans GRUB avec la commande map (voir map), comme ceci :

grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

Cela génère un échange (swap) virtuel entre vos premier et second disques durs.

Attention : Cela n'est effectif que si DOS (ou Windows) utilisent le BIOS pour accéder aux disques échangés. Si cet OS utilise un pilote spécial pour les disques, cela ne fonctionnera probablement pas.

Un autre problème apparait si vous avez installé plus d'un exemplaire de DOS/Windows sur votre disque, car ils peuvent être confondus s'il existe plus d'une partition primaire pour DOS/Windows. Vous devriez certainement éviter de faire cela, mais il existe une solution si vous y tenez. Utilisez la technique de la partition cachée/montrée (hiding/unhiding).

Si GRUB cache une partition DOS (ou Windows) (voir cacher (hide)), DOS (ou Windows) ignoreront cette partition. Si GRUB montre une partition DOS (ou Windows) (voir montrer (unhide)), DOS (ou Windows) détecteront cette partition. Ainsi, si vous avez installé DOS (ou Windows) sur les première et seconde partitions du premier disque dur, et vous désirez booter l'exemplaire de la première partition, faites ce qui suit :

     grub> unhide (hd0,0)
     grub> hide (hd0,1)
     grub> rootnoverify (hd0,0)
     grub> chainloader +1
     grub> makeactive
     grub> boot

[modifier] Comment rendre votre système robuste

Quand vous testez un nouveau noyau ou un nouvel OS, il est important de vous assurer que votre ordinateur peut booter même si le nouveau système est imbootable. Ceci est crucial, plus particulièrement si vous maintenez des serveurs ou des systèmes distants. Pour atteindre ce but, vous devez paramétrer deux choses :

  1. Vous devez maintenir un système qui est toujours bootable. Par exemple, si vous testez un nouveau noyau, vous devez conserver un noyau en bon fonctionnement dans un endroit différent. Il pourrait même quelque fois être judicieux de conserver un copie complète d'un système en état de marche sur une partition ou disque différent(e).
  2. Vous devez dire à GRUB de booter sur le système en état de marche quand le nouveau est défaillant. Ceci est possible avec le système de boot de secours de GRUB.

La première exigence est très spécifique à chaque OS, aussi la présente documentation ne couvre pas le sujet. Il est préférable de consulter des outils de backup.

Voyons la partie GRUB. Il y a deux possibilités : La première est simple mais pas très robuste, et l'autre est un peu complexe mais c'est probablement la meilleure solution pour être sûr que votre système pourra démarrer aussi longtemps que GRUB lui-même est bootable.

[modifier] Ne booter qu'une seule fois

Vous pouvez apprendre à GRUB de ne booter sur une entrée que la fois suivante. Supposons que vous ayez un vieux noyau, old_kernel et un nouveau noyau new_kernel. Vous savez que old_kernel peut booter votre système correctement, et vous désirez tester new_kernel.

Pour s'assurer que votre système retournera au vieux noyau même si le nouveau est défaillant (par exemple un kernel panic), vous pouvez spécifier que GRUB ne doit essayer le nouveau noyau qu'une seule fois et booter ensuite le vieux noyau.

Premièrement, modifiez votre fichier de configuration. Voici un exemple :

default saved        # Ceci est important!!!
timeout 10
     
title le vieux noyau
root (hd0,0)
kernel /old_kernel
savedefault
     
title le nouveau noyau
root (hd0,0)
kernel /new_kernel
savedefault 0         # Ceci est important!!!

Remarquez que ce fichier de configuration utilise default saved (Voir default) en tête et savedefault 0 (Voir savedefault) dans l'entrée concernant le nouveau noyau. Cela signifie que GRUB boote une entrée sauvegardée par défaut, et booter l'entrée du nouveau noyau enregistre '0' pour l'entrée sauvegardée.

Avec ce fichier de configuration, GRUB essaye toujours de booter le vieux noyau, après il boote le nouveau, car '0' est l'entrée du vieux noyau.

L'étape suivante consiste à dire à GRUB de booter le nouveau noyau au prochain boot. Pour cela, exécutez grub-set-default (Voir Invoquer grub-set-default) :

# grub-set-default 1

Cette commande fixe l'entrée sauvegardée à '1', ce faisant, au nouveau noyau.

Cette méthode est pratique, mais pas très robuste, car GRUB arrête le boot en cas d'erreur dans l'entrée de boot, telle qu'un format exécutable non valide du nouveau noyau. Ainsi, il est préférable d'utiliser le système de boot de secours de GRUB. Reportez vous au chapitre suivant pour connaitre cette caractéristique.

[modifier] Systèmes de boot de secours

GRUB comprend un mécanisme de secours pour booter une ou plusieurs autres entrées si l'entrée de boot par défaut est défaillante. Vous pouvez spécifier de multiples entrées de secours si vous le désirez.

Supposons que vous avez trois systèmes, 'A', 'B' et 'C'. 'A' est le système à booter par défaut. 'B' est un système sauvegardé (backup) qui est supposé booter correctement. 'C' est un autre système sauvegardé qui est utilisé en cas où 'B' est défaillant.

Alors vous pouvez désirer que GRUB boote le premier système qui est bootable parmi 'A', 'B' et 'C'. Un fichier de configuration peut être écrit de cette façon :

default saved        #Ceci est important!!!
timeout 10
fallback 1 2         # Ceci est important!!!
     
title A
root (hd0,0)
kernel /kernel
savedefault fallback # Ceci est important!!!
     
title B
root (hd1,0)
kernel /kernel
savedefault fallback # Ceci est important!!!
     
title C
root (hd2,0)
kernel /kernel
savedefault

Notez que default saved (Voir default), fallback 1 2 et savedefault fallback sont utilisés. GRUB bootera une entrée sauvegardée par défaut et enregistrera une entrée de secours (fallback) comme entrée pour le prochain boot avec cette configuration.

Quand GRUB essaye de booter 'A', GRUB enregistre '1' comme entrée de prochain boot, car la commande fallback spécifie que '1' est la première entrée de secours. L'entrée '1' est 'B', aussi GRUB essaiera de booter au prochain boot.

De même, quand GRUB essaye de booter 'B', GRUB enregistre '2' comme entrée de prochain boot, car la commande fallback spécifie que '2' est la prochaine entrée de secours. Ceci assure que GRUB bootera 'C' après le boot de 'B'

Il est utile de remarquer que GRUB utilise les entrées de secours à la fois quand GRUB lui-même ne parvient pas à booter une entrée et quand 'A' ou 'B' échouent à démarrer le système. Aussi cette solution garantit que votre système est démarré même si GRUBne peut pas trouver votre noyau ou si votre noyau "panique".

Cependant, vou devez exécuter grub-set-default (Voir Invoquer grub-set-default) quand 'A' démarre correctement ou que vous l'ayez réparé après un crash, puisque GRUB établit toujours la prochaine entrée de boot à une entrée de secours. Vous devriez exécuter cette commande dans un script de démarrage tel que rc.local pour booter 'A' par défaut :

 
# grub-set-default 0

'0' est le numéro de l'entrée du boot pour le système 'A'

Si vous désirez savoir quelle est l'entrée par défaut en cours, vous pouvez regarder dans le fichier /boot/grub/default (ou /grub/default dans ceertains systèmes). Vu que ce fichier est en plein texte, vous pouvez simplement utiliser la commande cat. Il est fortement recommandé de ne pas modifier ce fichier directement, car GRUB peut échouer en sauvegardant une entrée par défaut dans ce fichier. Par conséquent, vous devez utiliser grub-set-default pour modifier les entrées par défaut.

[modifier] Configuration

Vous avez probablement remarqué que vous devez taper plusieurs commandes pour booter votre OS. Il y a une solution à cela - GRUB fournit une interface menu (voir La simple interface menu) à partir de laquelle vous pouvez sélectionner une entrée (en utilisant les touches avec les flèches) qui fera tout le nécessaire pour booter l'OS.

Pour valider le menu, vous avez besoin d'un fichier de configuration, menu.lst dans le répertoire boot. Nous analyseront un fichier exemple.

LE fichier contient d'abord quelques paramètres généraux, les options en rapport avec l'interface menu. Vous pouvez placer ces commandes (voir Liste des commandes pour le menu seulement) devant chaque entrée du menu (commençant par title (voir title)).

#
# Echantillon de fichier de configuration de menu de boot
#

Comme vous l'avez peut-être deviné, ces lignes sont des commentaires. Les lignes qui commencent avec le caractère '#', et les lignes blanches sont ignorées par GRUB.

# Par défaut, booter sur la première entrée
default 0

La première entrée (ici, le comptage commence à zéro, non pas 1!) sera le chois par défaut.

# Boote automatiquement après 30 secs.
timeout 30

Comme le dit le commentaire, GRUB bootera automatiquement dans 30 secondes, à moins qu'il ne soit interrompu par la frappe d'une touche.

# Secours en seconde entrée
fallback 1

Si, pour quelque raison, l'entrée par défaut ne fonctionne pas, utiliser la seconde en secours (ceci est rarement utilisé, pour des raisons évidentes).

Remarquez que la description complète de ces commandes, qui sont spécifiques à l'interface menu, se trouvent dans Liste des commandes pour le menu seulement. D'autres descriptions se trouvent dans Liste des commandes disponibles.

Maintenant, sur des cas réels de définitions d'OS. Vous verrez que chaque entrée commence avec une commande spéciale, title (voir title), et l'action est décrite après. Remarquez qu'il n'y a pas de commande de boot (voir boot) à la fin de chaque entrée. Ceci parce que GRUB exécute le boot automatiquement s'il charge les autres commandes avec succès.

L'argument de la commande title est utilisé pour afficher un court titre/description de l'entrée du menu. Puisque title affiche l'argument tel quel, vous pouvez écrire absolument n'importe quoi ici.

# Pour booter GNU/Hurd
title  GNU/Hurd
root   (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz

Ceci boote GNU/Hurd depuis le premier disque dur.

# Pour booter GNU/Linux
title  GNU/Linux
kernel (hd1,0)/vmlinuz root=/dev/hdb1

Ceci boote GNU/Linux, mais depuis le second disque dur

# Pour booter Mach (avec le noyau sur disquette)
title  Utah Mach4 multiboot
root   (hd0,2)
pause  Insert the diskette now^G!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap

Ceci boote Mach avec le noyau sur une disquette, mais le système de fichiers root est sur hd0s3. Il y a aussi une ligne pause (voir pause), qui provoquera l'affichage de l'invite et une attente, avant de poursuivre l'exécution du reste des commandes et le boot.

# Pour booter FreeBSD
title  FreeBSD
root   (hd0,2,a)
kernel /boot/loader

Cette entrée boote le noyau FreeBSD chargé depuis une partition 'a' du troisième segment PC du premier disque dur Lebarhon: segment PC reste à confirmer

# Pour booter OS/2
title OS/2
root  (hd0,1)
makeactive
# chainload le chargeur de boot OS/2 depuis le premier secteur
chainloader +1
# ceci est similaire au "chainload", mais charge un fichier spécifique
#chainloader /boot/chain.os2

Ceci bootera OS/2, en utilisant un chaînage (chain-loader) (Voir Charger un autre chargeur de boot pour booter un OS non supporté).

# Pour booter Windows NT ou Windows95
title Windows NT / Windows 95 menu de boot
root        (hd0,0)
makeactive
chainloader +1
# Pour charger DOS si Windows NT est installé
# chainload /bootsect.dos

Le même que ci-dessus, mais pour Windows.

# Pour installer GRUB sur le disque dur
title Installation de GRUB sur le disque dur
root    (hd0,0)
setup   (hd0)

Cela (re)installera GRUB sur le disque dur.

# Changer les couleurs.
title Changer les couleurs
color light-green/brown blink-red/blue

Dans la dernière entrée, la commande color est utilisée (voir color), pour changer les couleurs du menu (essayez le!). Cette commande est un peu spéciale, car elle peut être utilisée à la fois en ligne de commande et dans le menu. GRUBa plusieurs commandes comme cela, voir Liste des commandes générales.

Nous espérons que que maintenant vous comprenez mieux comment utiliser les fonctionnalités essentielles de GRUB. Pour en savoir plus, voir les chapitres suivants.

[modifier] Téléchargement d’images d’OS depuis un réseau

Bien que GRUB soit un chargeur de boot basé sur disque, il assure le support du réseau. Pour utiliser le réseau, vous devez valider au moins un pilote de réseau dans le processus de construction de GRUB. Pour plus d’informations, veuillez voir netboot/README.netboot dans la distribution de la source.

[modifier] Comment installer votre réseau

GRUB exige un serveur de fichiers et optionnellement un serveur qui assignera un e adresse IP à la machine sur laquelle GRUB est exécuté. Dans le premier cas, seul TFTP est supporté pour l’instant. Dans l’autre cas le serveur doit être soit BOOTP, DHCP ou un serveur RARP (voir nota). Il n’est pas nécessaire d’exécuter les 2 serveurs sur un ordinateur. Comment configurer ces serveurs sort du périmètre de ce document, aussi reportez vous aux manuels de ces protocoles ou serveurs.

Si vous avez décidé d’utiliser un serveur pour assigner une adresse IP, installez le serveur et exécutez bootp (voir bootp), dhcp (voir dhcp) ou rarp (voir rarp). Chaque commande montrera l’adresse IP assignée, le masque de réseau, une adresse IP pour votre serveur TFTP et une passerelle. Si une des adresses est fausse ou provoque une erreur, probablement que la configuration de votre serveur n’est pas correcte.

Autrement, lancez ifconfig, comme ceci :

grub> ifconfig --address=192.168.110.23 --server=192.168.110.14

Vous poouvez aussi utiliser ifconfig conjointement avec bootp, dhcp, ou rarp (par exemple pour réassigner manuellement l’adresse du serveur). Voir ifconfig pour plus de détails.

Enfin, téléchargez l’image de l’OS depuis le réseau. Il peut être accédé en utilisant le lecteur réseau ’(nd)’. Tout le reste est très similaire aux instructions habituelles (voir boot).

Voici un exemple :

grub> bootp
Probing... [NE*000]
NE2000 base ...
Address: 192.168.110.23    Netmask: 255.255.255.0
Server: 192.168.110.14     Gateway: 192.168.110.1
     
grub> root (nd)
grub> kernel /tftproot/gnumach.gz root=sd0s1
grub> module /tftproot/serverboot.gz
grub> boot

Nota : RARP n’est pas conseillé, puisqu’il ne fournit pas d’informations.

[modifier] Booter depuis le réseau

Il est quelques fois très utile de booter depuis un réseau, spécialement quand vous utilisez une machine qui n’a pas de disque local. Dans ce cas, vous devez obtenir une sorte de Net Boot rom tel que PXE rom ou un paquetage du logiciel libre comm Etherboot. Un tel Boot rom premièrement boote la machine, paramètre la carte réseau installée dans la machine, et télécharge une image de boot de deuxième niveau (second stage boot) depuis le réseau. Alors, la seconde image essaiera de booter un OS depuis le réseau.

GRUB fournit deux images de deuxième niveau, nbgrub et pxegrub (voir Les fichiers image de GRUB). Ces images sont les mêmes que le stage 2 normal, excepté qu’elles établissent le réseau automatiquement, et essayent, si spécifié, de charger un fichier de configuration depuis le réseau. L’utilisation est très simple : si la machine possède un PXE rom, utilisez pxegrub. Si la machine possède un chargeur NBI tel que Etherboot, utilisez nbgrub. Il n’existe aucune différence entre les deux, excepté leurs formats. Puisque la façon de charger l’image de second niveau que vous désirez utiliser devrait être décrite dans le manuel sur votre Net Boot rom, veuillez vous y référer pour plus d’informations.

Cependant, il y a une chose spécifique à GRUB. Comment spécifier un fichier de configuration dans un serveur BOOTP/DHCP. Jusqu’à maintenant, GRUB utilise le tag '150', pour obtenir le nom d’un fichier de configuration. Ce qui suit est un exemple pour une configuration BOOTP :

.allhost:hd=/tmp:bf=null:\
             :ds=145.71.35.1 145.71.32.1:\
             :sm=255.255.254.0:\
             :gw=145.71.35.1:\
             :sa=145.71.35.5:
     
     foo:ht=1:ha=63655d0334a7:ip=145.71.35.127:\
             :bf=/nbgrub:\
             :tc=.allhost:\
             :T150="(nd)/tftpboot/menu.lst.foo":

Remarquez que vous devez spécifier le nom du lecteur '(nd)' dans le nom du fichier de configuration. Ceci car vous pourriez changer le lecteur root avant de télécharger la configuration depuis le serveur TFTP quand le menu programmé est utilisé (voir Intégrer un fichier de configuration dans GRUB)

Voir le manuel de votre serveur BOOTP/DHCP pour plus d’informations. la syntaxe exacte peut différer légèrement de l’exemple.

[modifier] Utiliser GRUB via une liaison série

Ce chapitre décrit comment utiliser le support du terminal série dans GRUB.

Si vous avez plusieurs ordinateurs ou des ordinateurs sans écran ni clavier, il peut être utile de contrôler les ordinateurs à travers une liaison série. Pour connecter un ordinateur à l’autre via une liaison série, vous devez préparer un câble série null-modem (croisé), et vous pouvez avoir besoin de boitiers multiports série si votre ordinateur n’a pas suffisamment de ports série. De plus, un émulateur de terminal est aussi requis, tel que minicom. Référez vous au manuel de votre OS pour plus d’informations.

Comme pour GRUB, les instructions pour mettre en place un terminal série sont plutot simples. Premièrement, assurez vous que n’avez pas spécifié l’option –disable-serial dans le script de configuration quand vous avez construit les images de GRUB. Si vous les avez sous forme binaire, probablement qu’elles supportent déjà le terminal série.

Maintenant, initialisez le terminal série après le démarrage de GRUB. Voici un exemple :

grub> serial --unit=0 --speed=9600
grub> terminal serial

La commande serial initialise l’unité série 0 avec la vitesse de 9600 bps. L’unité série 0 est habituellement appelée 'COM1', ainsi, si vous désirez utiliser 'COM2', vous devez spécifier' –unit=1'. Cette commande accepte beaucoup d’autres options, référez vous à serial pour plus de détails.

La commande terminal (voir terminal) détermine quel type de terminal vous désirez utiliser. Dans le cas ci-dessus, le terminal sera un terminal série, mais vous pouvez aussi donner console à la commande, comme 'terminal serial console'. Dans ce cas, un terminal dans lequel vous tapez n’importe quelle touche sera sélectionné comme un terminal GRUB.

Cependant, notez que GRUB suppose que votre émulateur de terminal est compatible avec VT100 par défaut. Ceci est vrai de nos jours pour la plupart des émulateurs, mais vous devez donner l’option --dumb à la commande si votre émulateur de terminal n’est pas compatible avec VT100 ou n’implémente que peu de séquences d’échappement VT100. Si vous spécifiez cette option, alors GRUB vous fournit une interface menu alternative, car le menu normal exige plusieurs caractéristiques sophistiquées de votre terminal.


[modifier] Intégrer un fichier de configuration dans GRUB

GRUB intègre un menu programmé qui doit toujours être chargé avant le démarrage. Ce menu programmé est utile, par exemple quand l’ordinateur ne possède pas de console mais un câble série. Dans ce cas, il est dangereux de paramétrer le terminal série le plus vite possible, puisque vous ne pouvez pas voir les messages avant que le terminal série commence à fonctionner. Aussi, il est préférable d’exécuter la commande serial (voir serie) et terminal (voir terminal) avant toute autre chose au moment du démarrage.

La façon dont le menu programmé fonctionne est un peu compliqué :

  1. GRUB vérifie si l’utilisation du menu programmé est prévue, et le charge s’il est disponible. Cela comprend l’exécution des commandes et la lecture des entrées de boot, comme un fichier de configuration ordinaire.
  2. GRUB vérifie si le fichier de configuration est disponible. Remarquez que cette vérification est réalisée indépendamment de l’existence du menu programmé
  3. Si le menu programmé comprend des entrées de boot, elles sont effacées quand le fichier de configuration est chargé. Cela n’a pas d’importance que le fichier de configuration ait ou pas d’entrées. Les entrées de boot dans le menu programmé ne sont utilisées que si GRUB échoue dans le chargement du fichier de configuration.

Pour activer le menu programmé, vous devez reconstruire GRUB en spécifiant un fichier pour le script de configuration avec l’option --enable-preset-menu. Le fichier utilise la même sémantique que les fichiers de configuration ordinaires. (Voir Configuration).

Un autre point auquel faire attention, est que le support du « sans disque » (voir Booter depuis le réseau) ne détourne pas le menu programmé. Les images « sans disque » incorporent un menu programmé pour exécuter la commande bootp (voir bootp) automatiquement, a moins que vous n’ayez spécifié votre propre menu programmé dans le script de configuration. Cela signifie que vous devez mettre vous-même des commandes dans le menu programmé pour initialiser un réseau, car les images « sans disque » ne se configurent pas implicitement, quand vous utilisez explicitement le menu programmé.

En conséquence, un menu programmé typique, utilisé avec le support du « sans disque » devrait ressembler à ceci :

# Mettre en place le terminal sérien avant toute chose.
serial --unit=0 --speed=19200
terminal --timeout=0 serial

# Initialiser le réseau.
dhcp

[modifier] Protéger son ordinateur contre le piratage

Vous désirez peut être savoir comment empêcher les utilisateurs ordinaires de faire ce qu’ils veulent, si vous partagez votre ordinateur. Ce chapitre décrit comment améliorer la sécurité de GRUB.

Une chose qui pourrait être une faille de sécurité est qu’un utilisateur peut faire beaucoup de choses avec GRUB, car GRUB permet la modification de sa configuration et d’exécuter des commandes quelconques. Par exemple, l’utilisateur peut même lire le fichier /etc/password dans l’interface en ligne de commandes avec la commande cat (voir cat). Aussi, il est nécessaire d’invalider toutes les opérations interactives.

Ainsi, GRUB fournit un outil pour le mot de passe, afin que seuls les administrateurs peuvent exécuter les opérations interactives (par exemple, éditer les entrées du menu et entrer dans l’interface en ligne de commandes). Pour utiliser cet outil, vous devez placer la commande password dans le fichier de configuration (voir password), comme ceci :

password --md5 PASSWORD
Si cela est spécifié, GRUB interdit tout contrôle interactif, jusqu’à ce que vous appuyiez sur la touche

et entriez le mot de passe correct. L’option --md5 indique à GRUB que 'PASSWORD' est au format MD5. Si elle est omise, GRUB considère que le mot de passe est en clair. Vous pouvez crypter le mot de passe avec la commande md5crypt (voir md5crypt). Par exemple, exécutez le shell grub (voir Invoquer le shell Grub), et entrez le mot de passe :

grub> md5crypt
Password: **********
Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

Puis, coupiez/collez le mot de passe dans votre fichier de configuration.

Vous pouvez aussi spécifier un argument optionnel à la commande pasword. Voici un exemple :

password PASSWORD /boot/grub/menu-admin.lst

Dans ce cas, GRUB chargera le fichier /boot/grub/menu-admin.lst en tant que fichier de configuration quand vous entrez le mot de passe correct. Une autre chose peut être dangereuse, tout utilisateur peut choisir n’importe qu’elle entrée du menu. Habituellement, cela ne devrait pas poser de problèmes, mais vous pouvez désirer que seuls les administrateurs puissent sélectionner certaines entrées du menu, telles qu’une entrée pour booter sur un OS non sûr comme DOS.

GRUB propose la commande lock (voir lock). Cette commande échoue systématiquement jusqu'à la saisie d’un mot de passe valide, aussi vous pouvez l’utiliser comme ceci :

title Boot DOS
lock
rootnoverify (hd0,1)
makeactive
chainload +1

Vous devez insérer lock aussitôt après title, car tout utilisateur peut exécuter des commandes dans une entrée jusqu’à ce que GRUB rencontre lock.

Vous pouvez aussi utiliser la commande password au lieu de lock. Dans ce cas, le processus de boot demandera le mot de passe et arrêtera s’il n’est pas valide. Puisque le mot de passe possède son propre argument PASSWORD, ceci est utile si vous désirez des mots de passe différents pour les différentes entrées.

[modifier] Les fichiers image de GRUB

GRUB est fait de plusieurs images : Deux stages essentiels, des stages optionnels appelés Stage 1.5, une image pour les CD ROM bootables, et deux images de boot réseau. Voici un court aperçu de ces images. Voir Internals pour plus de détails.

stage1 
C'est une image essentielle utilisée pour booter GRUB. Habituellement, elle est intégrée dans le MBR ou dans le secteur de boot de la partition. Par ce qu'un secteur de boot de PC fait 512 octets, la taille de cette image est exactement de 512 octets.
La seule chose assurée par Stage 1 est de charger Stage 2 ou Stage 1.5 depuis un disque local. En raison des restrictions de taille, Stage 1 encode la position de Stage 2 (ou de Stage 1.5) dans le format de listes de blocs, ainsi il ne connait aucune structure de système de fichiers.
stage2 
C'est l'image du noyau de GRUB. Il ne fait rien d'autre que de se booter lui-même. Habituellement, il est placé dans un système de fichiers, mais ce n'est pas obligatoire.
e2fs_stage1_5
fat_stage1_5
ffs_stage1_5
jfs_stage1_5
minix_stage1_5
reiserfs_stage1_5
vstafs_stage1_5
xfs_stage1_5 
Ils sont appelés Stage 1.5, car ils servent de pont entre Stage 1 et Stage 2, c'est à dire que Stage 1.5 est chargé par Stage 1 et Stage 1.5 charge Stage 2. La différence entre Stage 1 et Stage 1.5 et que le premier ne connaît pas de système de fichiers alors que le second en connaît un (par exemple e2fs_stage1_5 connait ext2fs). Ainsi vous pouvez déplacer l'image Stage 2 dans un autre endroit en toute sécurité, même après l'installation de GRUB.
Alors que Stage 2 ne peut pas en général être intégré dans une zone déterminée puisque sa taille est trop importante, Stage 1.5peut être installé dans la zone juste après le MBR, ou dans la zone du chargeur de boot de ReiserFS ou FFS.
stage2_eltorito 
C'est une image de boot pour les CD ROM utilisant le mode de non émulation dans la spécification El Torito. Il est identique à Stage 2, excepté qu'il boote sans le Stage 1 et met en place un lecteur spécial '(cd)'.
nbgrub 
C'est une image de boot réseau pour le Network Image Proposal utilisé par quelques chargeurs de boot réseau, tels que Etherboot. Il est en majeure partie identique à Stage 2, mais lui aussi met en place un réseau et charge le fichier de configuration depuis le réseau.
pxegrub 
C'est une autre image de boot réseau pour le Preboot Execution Environment utilisé par plusieurs Netboot ROMs. Il est identique à nbgrub, exepté pour le format.

[modifier] Syntaxe et sémantique du système de fichiers

GRUB utilise une syntaxe spéciale pour spécifier les disques qui peuvent être accèdés par le BIOS. En raison des limitations du BIOS, GRUB ne peut pas distinguer entre IDE, ESDI, SCSI et autres. Vous devez connaître vous-même quel périphérique BIOS est équivalent à quel périphérique de l’OS. Normalement, cela devrait être clair si vous pouvez voir les fichiers contenus par le périphérique ou si vous utilisez la commande find (voir find).

[modifier] Comment spécifier les périphériques

La syntaxe pour les périphériques est celle-ci : (périphérique[,numéro-partition][,lettre-bsd-subpartition])

'[ ]' Signifie que le paramètre est optionnel. périphérique doit être soit 'fd' ou 'hd' suivi par un chiffre, comme 'fd0'. Mais vous pouvez également attribuer à périphérique un nombre hexadécimal ou décimal qui est le numéro BIOS du lecteur, ainsi les désignations suivantes sont équivalentes :

  • (hd0
  • (0x80)
  • (128)

numéro-partition représente le numéro de la partition du périphérique, commençant à partir de 0 pour les partitions primaires et à partir de 4 pour les partitions étendues, et lettre-bsd-subpartition représente la subpartition du disklabel BSD, tel que 'a' ou 'e'. Un raccourci pour spécifier les subpartitions BSD est (périphérique,lettre-bsd-subpartition), dans ce cas, GRUB cherche la première partition du PC contenant un disklabel BSD, puis trouve la subpartition lettre-bsd-subpartition. Voici un exemple :

(hd0,a)

La syntaxe '(hd0)' représente le disque entier (ou le MBR quand on installe GRUB), alors que la syntaxe '(hd0,0)' représente la première partition du disque (ou le secteur de boot quand on installe GRUB).

Si vous activez le support du réseau, le lecteur spécial '(nd)' est aussi disponible. Avant d’utiliser le lecteur réseau, vous devez initialiser le réseau. Voir Téléchargement d’images d’OS depuis un réseau, pour plus d’informations.

Si vous bootez GRUB depuis un CD-ROM, '(cd)' est disponible. Voir Créer un CDROM bootable GRUB, pour plus de détails.

[modifier] Comment spécifier les fichiers

Il y a deux façons de spécifier les fichiers, par nom de fichier absolu et par liste de blocs.

Un nom de fichier absolu ressemble à un nom de fichier absolu d’UNIX, utilisant '/' comme séparateur de répertoires (et non pas '\' comme dans DOS). Par exemple (hd0,0)/boot/grub/menu.lst. Cela désigne le fichier /boot/grub/menu.lst dans la première partition du premier disque dur. Si vous oubliez le nom du périphérique dans un nom de fichier absolu, GRUB utilise implicitement le périphérique root de GRUB. Aussi si vous déclarez le périphérique root comme étant '(hd1,0)' avec la commande root (voir root), alors /boot/kernel désigne la même chose que (hd1,0)/boot/kernel.

[modifier] Comment spécifier des listes de blocs

Des listes de blocs (blocklist) sont utilisés pour spécifier un fichier qui n’apparaît pas dans le système de fichiers, comme un chaînage. La syntaxe est [offset]+lenght[,[offset]+lenght]… Voici un exemple :

0+100,200+1,300+300

Cela signifie que GRUB doit lire les blocs de 0 à 99, bloc 200 et les blocs de 300 à 599. Si vous omettez un offset, alors GRUB considère zéro.

Comme pour la syntaxe du nom de fichier (voir ci-dessus) si un blocklist ne contient pas de nom de périphérique, alors GRUB utilise implicitement le nom du périphérique root. Ainsi '(hd0,1)+1' désigne la même chose que +1 quand le périphérique root est '(hd0,1)'.

[modifier] L’interface utilisateur de GRUB

GRUB dispose à la fois d’une simple interface menu pour sélectionner une entrée parmi celles programmées dans un fichier de configuration, et une interface ligne de commande très souple pour réaliser toutes les combinaisons désirées de commandes de boot.

Aussitôt chargé, GRUB recherche son fichier de configuration. S’il en trouve un, alors l’ interface menu est activée proposant toutes les entrées trouvées dans le fichier de configuration. Si vous choisissez l’option de l’interface ligne de commande, ou si le fichier de configuration n’a pas été trouvé, alors GRUB bascule vers l’interface ligne de commande.

[modifier] L'interface ligne de commande, souple

L’interface ligne de commande présente une invite et à sa suite, une aire d’édition de texte, exactement comme une ligne de commande DOS ou UNIX. Chaque commande est exécutée immédiatement après l’appui sur la touche entrée (voir nota). Les commandes (voir Liste des commandes pour la ligne de commande et les entrées de menu) constitue un « sous-jeu » de celles disponibles dans le fichier de configuration, utilisées avec exactement la même syntaxe.

Les mouvements du curseur et la modification du texte sur la ligne peuvent être réalisés par un « sous-jeu » des fonctions disponibles dans le shell Bash :

C-f / PC right key 
(NdT touche flèche droite). Avance d’un caractère
C-b / PC left key 
(NdT touche flèche gauche). Recule d’un caractère
C-a / HOME 
(NdT : début document) Se place au début de la ligne
C-e / END 
(NdT : fin) Se place à la fin de la ligne
C-d / DEL 
(NdT : Suppr) Efface le caractère devant le curseur
C-h / BS 
(NdT : espace arrière) Efface la caractère situé derrière le curseur
C-k 
Efface le texte depuis la position du curseur jusqu’à la fin de la ligne
C-u 
Efface le texte dérrière la position du curseur jusqu’au début de la ligne
C-y 
Remettre le texte effacé à l'endroit du curseur.
C-p / PC up key 
(NdT touche flèche vers le haut). Remonte la liste de l’historique
C-n / PC down key 
(NdT touche flèche vers le bas). descend la liste de l’historique.

Lors de la frappe de commandes interactivement, si le curseur est à l’intérieur ou avant le premier mot dans la ligne de commande, appuyer sur la touche TAB (ou C-i affichera la liste des commandes disponibles, et si le curseur est après le premier mot, appuyer sur la touche TAB offrira une possibilité d’«autocomplétion » avec une liste des disques, partitions et nom de fichiers en fonction du contexte. Notez que pour obtenir une liste de lecteurs, il faut ouvrir une parenthèse, comme root (.

Notez que vous ne pouvez pas utiliser la fonction d’«autocomplétion » avec le système de fichiers TFTP. Ceci à cause qu’il ne permet pas les listes de noms de fichier, pour des raisons de sécurité.

Nota : Cependant, ce comportement sera changé dans le futur, d’une façon invisible pour l’utilisateur.

[modifier] La simple interface menu

L’interface menu est très facile à utiliser. Ses commandes sont à la fois intuitives et décrites à l’écran.

Fondamentalement, l’interface menu offre une liste d’entrées de boot au choix de l’utilisateur. Utiliser les touches fléchée pour sélectionner l’entrée choisie, puis appuyer sur la touche Entrée pour la lancer. Une limitation de temps optionnelle est disponible pour booter sur l’entrée par défaut (la première si aucune n’est définie), limitation qui est annulée en appuyant sur n’importe quelle touche.

Les commandes peuvent être entrées dans une ligne de commande vide en pressant la touche c (qui agit exactement de la même façon que la version sans fichier de configuration de GRUB, mais autorise, si désiré, de retourner vers le menu s en appuyant sur la touche Echap) ou peuvent être utilisées pour modifier n’importe quelle entrée du menu de boot en pressant la touche e.

Si vous protégez l’interface menu avec un mot de passe (voir Protéger son ordinateur contre le piratage), tout ce que vous pouvez faire est de choisir une entrée en appuyant sur la touche Entrée, ou appuyer sur p pour entrer un mot de passe.

[modifier] Modifier une entrée de menu

L’éditeur des entrées du menu ressemble beaucoup à l’interface menu principale, mais les lignes dans le menu sont des commandes individuelles dans l’entrée sélectionnée à la place des noms de l’entrée.

Si la touche Echap est appuyée dans l’éditeur, il annule tous les changements faits dans la configuration de l’entrée et retourne dans l’interface menu principale.

Quand une ligne particulière est sélectionnée, l’éditeur place l’utilisateur dans une version spéciale de GRUB en ligne de commandes pour modifier cette ligne. Quand l’utilisateur appuie sur Entrée, GRUB remplace la ligne en question de l’entrée de boot par les modifications (à moins qu’elles ne soient annulées via Echap, auquel cas les modifications sont perdues).

Si vous désirez ajouter une nouvelle ligne dans les entrées du menu, appuyez sur la touche o pour ajouter la ligne après la ligne courante ou appuyez sur la touche O pour ajouter la ligne avant.

Pour effacer une ligne, appuyer sur la touche d. Bien que malheureusement GRUB ne supporte pas undo, vous pouvez obtenir presque la même chose en retournant dans le menu principal.

[modifier] Cacher l’interface menu

Quand vous avez un terminal dépourvu de capacités de calcul ou que vous demandez explicitement à GRUB de cacher l'interface menu avec la commande hiddenmenu (voir menu caché), GRUB ne montre pas l'interface menu (voir La simple interface menu) et boote automatiquement sur l'entrée par défaut, a moins qu'il ne soit interrompu par l'appui sur la touche Echap. Si vous interrompez le temps d'attente (timeout) et que votre terminal est dépourvu de capacités de calcul, GRUB se reporte sur l'interface en ligne de commande (voir L'interface ligne de commande).

[modifier] Liste des commandes disponibles

Dans ce chapitre, nous listons toutes les commandes qui sont disponibles dans GRUB.

Les commandes appartiennent à différents groupes. Quelques unes ne peuvent être utilisées que dans le chapitre général du fichier de configuration (ou "menu"); la plupart peuvent être entrées en ligne de commandes et peuvent être utilisées soit n'importe où dans le menu ou spécifiquement dans les entrées du menu.

[modifier] Liste des commandes pour le menu seulement

La sémantique utilisée dans l'analyse du fichier de configuration obéit aux règles suivantes :

  • Les cimmandes spécifiques aux menus doivent être utilisées avant toutes les autres
  • Les fichiers doivent être au format plein texte.
  • '#' au début d'une ligne dans un fichier de configuration signifie qu'il s'agit d'un commentaire
  • Les options sont séparées par des espaces
  • Tous les nombres peuvent être exprimés en décimal ou hexadécimal. Un nombre hexadécimaldoit être précédé de '0x', et est insensible à la casse.
  • Les options supplémentaires ou le texte en fin de ligne sont ignorés, a moins d'une spécification contraire.
  • Les commandes non comprises sont ajoutées à l'entrée en cours, excepté avant le début des entrées, où elles sont ignorées.

Lebarhon : je ne comprends pas cette dernière ligne

Ces commandes ne peuvent être utilisées que dans le menu :

[modifier] default

default num

Définit l'entrée numéro num comme entrée par défaut. Lanumérotation commence à zéro, et l'rntrée numéro zéro est l'entrée par défaut si la commande default n'est pas utilisée.

Vous pouvez écrire 'saved' à la place d'un numéro. Dans ce cas, l' entrée par défaut est l'entrée enregistrée avec la commande savedefault. Voir savedefault) pour plus d'informations.

[modifier] fallback

fallback num...

Part dans un mode inattendu de boot : Si le boot par défaut rencontre des erreurs, au lieu d'attendre que l'utilisateur fasse quelque chose, il continue sans délai en utilisant le numéro d'entrée indiqué. (Même numérotation que pour la commande default ci-dessus). Evidemment, ceci n'aide en rien si la machine fut rebootée par un noyau chargé par GRUB. Vous pouvez spécifier plusieurs numéros d'entrées dans fallback.

[modifier] hiddenmenu

hiddenmenu

N'affiiche pas le menu. Si la commande est utilisée, aucun menu ne sera affiché sur le terminal, et l'entrée par défaut sera bootée après l'expiration du délai (timeout). L'utilisateur peut appeler le menu en appuyant sur Echap avant l'expiration du délai. Voir Cacher l’interface menu.

[modifier] timeout

timeout sec

Etablit un temps d'attente, exprimé en secondes, avant de booter automatiquement l'entrée par défaut (normalement la première entrée définie).

[modifier] title

title name...

Définit une nouvelle entrée de boot. Son nom est constitué du texte de la ligne à partir du premier caractère qui n'est pas un espace.

[modifier] Liste des commandes générales

Commandes utilisables partout dans le menu et en ligne de commande.

[modifier] bootp

title [--with-configfile]

Initialise un périphérique réseau via le protocole BOOTP. Cette commande n'est utilisable que si GRUB est compilé avec le support de netboot. Voir aussi Téléchargement d’images d’OS depuis un réseau.

Si vous spécifiez --with-configfile a la commande, GRUB recherchera et chargera un fichier de configuration spécifié par votre serveur BOOTP avec l'option (vendor tag) '150'

[modifier] color

color normal [highlight] </