FLASH INFORMATIQUE FI



public averti Grub 2


GRUB est le premier programme lancé au démarrage de l’ordinateur pour sélectionner un système d’exploitation, le charger en mémoire et finalement lui passer le contrôle de la machine. Comme GRUB est en fin de vie, Grub 2 en reprend naturellement les tâches en ajoutant de nouvelles fonctionnalités aussi pour répondre aux nouvelles architectures matériel. Voici une vue d’ensemble de l’évolution des fonctionnalités entre GRUB et Grub 2 et des différences dans leur mise en place. Les changements ne sont pas majeurs mais méritent largement d’être passés en revue.



GRUB is the first software program that runs when a computer starts. It enables the user to choose an operating system, to load it in the machine memory and finally, to transfer control to it. As GRUB has reached the end of its life cycle, Grub 2 is going to replace it and provide additional functionalities.


Pascal FABBRI


Introduction

Visible ou invisible au démarrage de la machine le programme qui lance le système d’exploitation a toujours ou presque été présent sur les ordinateurs de petit comme de grande taille, du poste de travail au serveur, en passant par les portables. Les administrateurs de système auront sans doute noté que GRUB n’a pratiquement pas évolué depuis plusieurs années, et que les versions utilisées d’une distribution Linux à l’autre ne sont pas au même niveau, et plus grave, leur code est maintenu spécifiquement par chacune d’entre elles et peu ou pas restitué et consolidé dans un noyau central fédéré à quelqu’endroit de la toile par un groupe de développeurs assidus et bénévoles. Le développement de GRUB  est maintenant stoppé et son code placé officiellement en mode maintenance, même si dans certains cercles comme OpenSolaris il a passablement évolué en offrant notamment le support pour ZFS (simple ou en miroir) ou la possibilité d’initialiser des interfaces réseau. Son successeur est naturellement et sans surprise Grub 2 réécrit ex-nihlo s’orientant vers de nouvelles fonctionnalités. Utilisé en primeur dans Ubuntu 9.10, on le trouve dans la distribution de longue haleine Ubuntu 10.04 LTS . Il semble maintenant évident que d’autres distributions suivront le choix d’Ubuntu en adoptant Grub 2.

Séquencement des opérations

Au démarrage de la machine, le premier programme lancé est le BIOS contenu dans un espace mémoire particulier et inaltérable de la machine. Ce micro-programme prend connaissance des différents composants présents sur l’ordinateur avant de charger et lancer un autre petit programme contenu dans le premier secteur de données du périphérique de démarrage, habituellement un disque dur, mais aussi une clé USB, un CD/DVD et de plus en plus souvent un SSD . Dans la terminologie GRUB ce premier secteur nommé MBR  désigne la première étape d’amorçage (stage 1) et contient également la table de partitions du périphérique de démarrage. Comme les périphériques de stockage actuels sont divisés en secteurs de 512 octets (bientôt 4096 octets, mais c’est un autre sujet), le programme d’amorçage doit être de taille modeste et permettre de rejoindre un programme plus important appelé étape d’amorçage 1.5 (stage 1.5) situé sur le même périphérique dans un espace laissé libre le plus souvent contigu au MBR. La dernière étape d’amorçage, nommée étape 2, est contenue par un système de fichiers classique, là où il y a vraiment de l’espace, abritant habituellement le premier système d’exploitation en place avec un répertoire nommé /boot (pour OpenSolaris ou GNU/Linux) à sa racine. Sur une machine accueillant plusieurs systèmes d’exploitation de famille différentes (GNU/Linux et FreeBSD par exemple), GRUB comme Grub 2 sont à même d’enchaîner un second programme d’amorçage possédant d’autres méthodes de chargement de système d’exploitation. À l’inverse, la première étape d’amorçage de GRUB ou Grub 2 peut être logée dans le premier secteur d’une partition plutôt que dans le MBR pour être enchaînée par un programme d’amorçage déjà en place dans le MBR.
Les mécanismes de GRUB sont repris dans leur ensemble par Grub 2 à l’exception de l’étape d’amorçage 1.5 remplacée par un ensemble modulaire composé par des fichiers binaires et des scripts distribués dans une arborescence nommée /boot/grub qui peut mettre à disposition des outils capables, par exemple, d’interpréter des types de partitions différentes ou de lire divers systèmes de fichiers. Le moyen le plus simple de se familiariser avec la nouvelle architecture que Grub 2 met en place, est celle d’installer un système d’exploitation prenant en charge par défaut Grub 2 comme programme d’amorçage. Ainsi, selon votre rythme d’apprentissage ou votre disponibilité, vous aurez tout loisir d’appréhender calmement les nouvelles fonctionnalités et maîtriser la disposition des fichiers de configuration et de traitement.

Les nouvelles fonctionnalités

GRUB reste le programme d’amorçage de choix pour les machines abritant plusieurs systèmes d’exploitation de famille différentes ou anciens. Comme Grub 2 est encore jeune, on privilégiera pour l’instant le démarrage des distributions GNU/Linux avec GRUB. Grub 2 prend en charge plusieurs nouvelles fonctionnalités importantes à connaître dans l’immédiat et d’autres qui le deviendront bientôt :

  • Plates-formes prises en charge : GRUB ne reconnaît que les systèmes de type PC x86 32 ou 64-bits. Avec Grub 2 le nombre de plates-formes supportées est un peu plus important avec l’architecture SPARC et probablement Power-PC en plus du x86  .
  • Micro-programmes de démarrage reconnus : En dehors de l’archaïque et classique  BIOS , Grub 2 sera en mesure de démarrer sur  EFI  (machines Apple) et OpenFirmware (architecture  SPARC ).
  • Type de partitionnement : GRUB reconnaît uniquement la table de partition au schéma MBR propre au PC depuis toujours. Grub 2 prend en charge le schéma de partition  GUID  ( GPT  ) présent sur les machines Apple.
  • Ensembles RAID : GRUB ne prend pas en charge les ensembles redondants de disques indépendant (RAID) ou la combinaison LVM  BIOS , ce qui implique une connaissance pointue des interactions entre GRUB et le RAID et a fortiori en cas de défaillance de l’ensemble RAID. Grub 2 est en mesure de prendre en charge les ensembles redondants présents dans le noyau Linux comme le RAID ou les partitions combinées par LVM.
  • Systèmes de fichiers reconnus : Comme tous les fichiers de configuration se trouvent sur un système de fichiers, GRUB doit être en mesure de lire (mais pas forcément écrire) sur toute variété de systèmes de fichiers. Grub 2, en plus de reconnaître les standards ext2/3fs, JFS, XFS, FAT16/32, ReiserFS, BSD FFS (UFS1/2) et iso9660 (CD/DVD), ajoute entre autres ext4, Sun ZFS (Zettabyte File System), Apple HFS+ (Hierarchical File System Plus) et Microsoft NTFS (New Technologie File System).
  • Noyaux pris en charge : GRUB charge en mémoire et démarre en une fois les distributions GNU/Linux, les systèmes BSD et naturellement les systèmes d’exploitation qui respectent les spécifications Multiboot  BIOS  comme OpenSolaris. Grub 2 ajoute le noyau Mac OS X. GRUB comme Grub 2 doivent enchaîner le boot loader spécifique de Windows® pour le démarrer. Comme Grub 2 adhère au Multiboot, il peut être chargé par un programme d’amorçage Multiboot.

Configuration

Grub 2 est dans la droite ligne de GRUB, ce qui permet de rapidement comprendre la majorité des éléments qui sont contenus par le fichier de configuration, même si dans leur détail ils sont différents.

Un court exemple de configuration

Sans surprise l’emplacement par défaut du fichier de configuration de Grub 2 se trouve sous /boot/grub/grub.cfg. Lorsque l’on parcourt celui présent sur Ubuntu, on se rend compte très vite que sa syntaxe est très proche de celle d’un script Bourne Shell, cependant voici un exemple beaucoup plus épuré permettant de mettre en évidence les éléments directement utiles.

set timeout=8
set default=1

menuentry "GNU/Linux (2.6.32.18 kernel)" {
       set root=(hd1,3)
       linux /bzImage-2.6.32.18 ro root=/dev/sdb4
       initrd /initrd-x86_64-2.6.32.18
}

menuentry "FreeBSD 8.1" {
               insmod ufs2
       set root=(hd0,1,a)
       search --no-floppy --fs-uuid --set 2b6400233298776f
       freebsd /boot/kernel/kernel
       freebsd_loadenv /boot/device.hints
       set FreeBSD.vfs.root.mountfrom=ufs:ad0s1a
       set FreeBSD.vfs.root.mountfrom.options=rw
}

menuentry "Micro$oft Windows Seven" {
       set root=(hd1,1)
       parttool (hd0,3) hidden+
       parttool (hd1,1) hidden-
       chainloader +1
}

Dans ce fichier de configuration de Grub 2 simplifié on retrouve les mêmes éléments de base, avec au début, la définition des options globales, qui, dans l’exemple assigne une valeur de 8 secondes d’affichage du menu avant de charger et lancer le système défini par les éléments contenu sans le second menu (dans ce cas FreeBSD). On comprend rapidement les différentes entrées composant la configuration, même si elles sont différentes que celles de GRUB, leur objectif reste identique. La seule grosse différence se situe à la déclaration des variantes d’amorçage définies par le mot clé menuentry.

Ce qui a changé depuis GRUB

Afin d’éviter de perdre trop de temps à la rédaction d’une configuration, voici une courte liste des changements entre GRUB et Grub 2 :

  • Les mots-clés sont précédés par set et le signe = qui unit le nom de l’option et sa valeur avec Grub 2. Ce n’est pas le cas avec GRUB.
  • Les paramètres de démarrage varient d’un système d’exploitation à l’autre avec Grub 2.
  • Le mot-clé linux définit un noyau GNU/Linux, freebsd un noyau FreeBSD avec Grub 2 par exemple. GRUB utilise un mot-clé générique kernel.
  • Grub 2 est en mesure d’identifier les partitions d’un périphérique par un UUID  BIOS  ou un label. Souvent la numérotation des partitions varie en fonction de l’outil utilisé pour les consulter, la numérotation des périphériques peut changer aussi par rapport à l’ordre de chargement des pilotes au niveau du système d’exploitation ou encore lorsque l’on ajoute un disque. Grub 2 ou le système d’exploitation peuvent attribuer un UUID ou un label à un système de fichiers.
  • Dans GRUB une variante d’amorçage débute avec le mot-clé title et se poursuit avec un commentaire jusqu’à la fin de la ligne, et la suite de la définition continue sur les lignes suivantes. Grub 2 définit la chose plus clairement en commençant par le mot-clé menuentry, le commentaire et entre accolades les options d’amorçage.
  • Quelques noms d’option ont changé, comme la commande parttool qui permet d’agir sur une partition. Dans l’exemple cette fonctionnalité s’emploie pour masquer ou activer une partition dans les options d’amorçage de Windows Seven (ce moyen permet de sélectionner la partition que Windows tentera de prendre en compte). GRUB utilise hide et unhide.

La numérotation des disques et des partitions semble quelque peu confuse. Grub 2 emploie une notation numérique commençant à 1 pour les partitions et non pas 0 comme GRUB. Les périphériques de démarrage sont encore numérotés en partant de 0 comme avant. Par exemple pour un disque de démarrage nommé sda1 sous GNU/Linux on utilise (hd0,1) et non plus (hd0,0).

Deux grosses fonctionnalités

Dans sa mise en oeuvre actuelle, Grub 2 propose déjà un grand nombre de fonctionnalités, dont celles-ci sont les plus innovantes :

  • L’ensemble modulaire est destiné à étendre les fonctions intrinsèques du programme d’amorçage. Les modules sont généralement implicitement chargés dans le plus grand nombre des cas pour en premier lieu identifier le schéma de la partition du périphérique de démarrage et le type de systèmes de fichiers qui s’y trouvent. Dans des cas plus restreints, lorsque l’on veut faire cohabiter plusieurs systèmes de cercles différents sur une même machine par exemple, les modules seront chargés explicitement. Par exemple, les modules disposent du support pour la ligne série, le type de terminal, certaines cartes graphique ou ajouter des fonctions de script.
  • Afin d’instaurer plus de dynamique et de souplesse dans son fichier de configuration, Grub 2 ajoute des caractéristiques de script dont la syntaxe est proche de celle du Bourne Shell.

Parmi les nouvelles fonctionnalités, on aurait voulu trouver d’emblée le support réseau augmentant la souplesse d’utilisation et permettant de s’affranchir un peu plus de médias d’installation a manipuler et ainsi faciliter le déploiement en réseau de systèmes d’exploitation.

Où mettre les mains

Les fichiers de configuration de Grub 2 sont répartis dans trois répertoires, contrairement à GRUB, qui dépose tout son matériel au même endroit : /boot/grub (dans la majeure partie des cas).

  • /etc/default/grub : Ce fichier contient des éléments de configuration générale, auto générés par le script grub-set-default, qui habituellement ne demande pas de modifications (type du terminal, temps d’affichage du menu). Son contenu prendra part au fichier de configuration grub.cfg.
  • /etc/grub.d : Ce répertoire contient une série de scripts qui produiront les blocs de variantes d’amorçage (menuentry) ordonnées dans grub.cfg.
  • /boot/grub : À cet endroit Grub 2 trouve le fichier de configuration principal lors du démarrage ainsi que les modules. Comme le fichier grub.cfg est construit par script, il ne devrait pas subir de modification directe.

Des informations supplémentaires sont disponibles dans l’arborescence documentaire /usr/share/doc/{grub-common,PC} (en tout cas avec Ubuntu). Cependant, il ne faut pas trop compter, pour l’instant, sur les pages de manuel qui se révèlent très maigres.

Conclusion

Voilà, cet article est désormais terminé. Le prochain proposera moins de théorie et se focalisera sur des cas pratiques de mise en oeuvre qui permettront de lancer plusieurs familles de système d’exploitation et de révéler toute la souplesse de Grub 2.

Pour aller plus loin

-*Page Web officielle de Grub 2



Glossaire

BIOS
Basic Input and Output System.
EFI
Extensible Firmware Interface.
GPT
GUID Partition Tables.
GRUB
GNU Grand Unified Bootloader, appelé maintenant GRUB Legacy.
GUID : Globally Unique Identifier.
LTS : Long Time Support, qualifie certains numéros de la distribution Ubuntu™.
LVM
Logical Volume Manager.
MBR
Master Boot Record, présent sur les périphériques de démarrage de type disque dur (SSD, clé USB, mais pas CD/DVD).
Multiboot
les spécifications de Multiboot définissent un protocole entre le programme d’amorçage et les noyaux de systèmes d’exploitation qui permettent n’importe quel programme d’amorçage adhérant au Multiboot de charger et exécuter n’importe quel noyau de système d’exploitation respectant la spécification. De cette façon une machine pourvue d’un seul programme d’amorçage de ce type est capable de démarrer n’importe quel système directement, sans avoir besoin d’enchaîner différents programmes d’amorçage.
SPARC (Scalable Process Architecture)
architecture Sun SPARC™ en 64-bits.
SSD
Sold State Disk, disque dur sous forme de mémoires Flash.
UUID
Universal Unique Identifier.
x86
architecture INTEL ou AMD en 32 ou 64-bits (le plus souvent 64-bits).


Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.