Grub 2 - Flash informatique

Transcription

Grub 2 - Flash informatique
Analyse
Grub 2
Pascal.Fabbri@epfl.ch
EPFL – Domaine IT, responsable UNIX
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.
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.
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
Impressum
Les articles ne reflètent que l’opinion
de leurs auteurs. Toute reproduction,
même partielle, n’est autorisée qu’avec
l’accord de la rédaction et des auteurs.
Abonnement à la version électronique
du FI en envoyant un courrier à:
fi[email protected]fl.ch
2 flash informatique
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.
Rédacteur en chef:
Jacqueline Dousson, fi@epfl.ch
Mise en page & graphisme:
Appoline Raposo de Barbosa
Comité de rédaction:
Aristide Boisseau, Paulo de Jesus,
Patrice Fumasoli, Jean-Damien
Humair, Laurent Kling, Julia Paolini,
Vittoria Rezzonico, François Roulet,
Christophe Salzmann, Predrag Viceic
& Jacques Virchaux
Impression: Atelier de Reprographie EPFL
Tirage: 4000 exemplaires
Adresse Web: dit.epfl.ch/FI-spip
Adresse: Domaine IT EPFL
CP 121, CH-1015 Lausanne 15
Téléphone: +4121 69 32246 & 32247
Grub 2
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
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) hiddenchainloader +1
}
script 1
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 &, 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 & 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 (voir script 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:
z 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.
z Les paramètres de démarrage varient d’un système d’exploitation à l’autre avec Grub 2.
22 JUIN 2010 - N°6
3
Grub 2
z 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.
z Grub 2 est en mesure d’identifier les partitions d’un périphérique par un UUID & 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.
z 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.
z 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
&
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.
4 flash informatique
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-setdefault, 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
Dans sa mise en œuvre actuelle, Grub 2 propose déjà un grand
nombre de fonctionnalités, dont celles-ci sont les plus innovantes:
z 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.
GLOSSAIRE
z 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.
Voilà, cet article est désormais terminé. Le prochain proposera
moins de théorie et se focalisera sur des cas pratiques de mise
en œuvre 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
z Page Web officielle de Grub 2: www.gnu.org/software/grub/
grub.html
z GNU GRUB Wiki: grub.enbug.org/FrontPage
z Ubuntu documentation, Grub 2: https://help.ubuntu.com/
community/Grub2 n
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).