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).