102.2 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
102 Installation de Linux et gestion des paquets |
Objectif : |
102.2 Installer un chargeur d’amorçage |
Leçon : |
1 sur 1 |
Introduction
Lorsqu’un ordinateur est mis sous tension, le premier logiciel à s’exécuter est le chargeur de démarrage. Il s’agit là d’un bout de code dont la seule mission est de charger le noyau d’un système d’exploitation pour lui céder le contrôle. Le noyau va charger les pilotes nécessaires, initialiser le matériel et ensuite charger le reste du système d’exploitation.
GRUB est le chargeur d’amorçage utilisé sur la plupart des distributions Linux. Il est capable de charger le noyau Linux ou d’autres systèmes d’exploitation, tels que Windows, et peut gérer plusieurs images et paramètres du noyau sous forme d’entrées de menu séparées. La sélection du noyau au démarrage se fait via une interface contrôlée par le clavier, et il existe une interface en ligne de commande pour éditer les options et les paramètres de démarrage.
La plupart des distributions Linux installent et configurent GRUB (en fait, GRUB 2) automatiquement, de sorte qu’un utilisateur lambda n’a pas besoin d’y réfléchir. Cependant, en tant qu’administrateur système, il est vital de savoir contrôler le processus d’amorçage afin de pouvoir récupérer le système après un problème d’amorçage suite à un échec de la mise à jour du noyau, par exemple.
Dans cette leçon, vous allez apprendre comment installer, configurer et interagir avec GRUB.
GRUB Legacy vs. GRUB 2
La version originale de GRUB (Grand Unified Bootloader) maintenant connue sous le nom de GRUB Legacy a été développée en 1995 dans le cadre du projet GNU Hurd et a ensuite été adoptée comme chargeur de démarrage par défaut de nombreuses distributions Linux, en remplacement d’alternatives antérieures telles que LILO.
GRUB 2 est une réécriture complète de GRUB qui se veut plus propre, plus sûre, plus robuste et plus puissante. Parmi les nombreux avantages par rapport à GRUB Legacy figurent un fichier de configuration beaucoup plus flexible (avec beaucoup plus de commandes et d’instructions conditionnelles, comme un langage de script), une conception plus modulaire et une meilleure localisation/internationalisation.
On trouve également la prise en charge de thèmes et de menus de démarrage graphiques avec écrans de démarrage, la possibilité de démarrer les ISO de LiveCD directement depuis le disque dur, une meilleure prise en charge des architectures non-x86, une prise en charge universelle des UUID (ce qui facilite l’identification des disques et des partitions) et bien plus encore.
GRUB Legacy n’est plus développé activement (la dernière version en date était la 0.97, en 2005), et aujourd’hui la plupart des distributions Linux majeures installent GRUB 2 comme chargeur de démarrage par défaut.
Où est le chargeur de démarrage ?
Historiquement, les disques durs des systèmes compatibles IBM PC étaient partitionnés selon le schéma de partitionnement MBR, créé en 1982 pour IBM PC-DOS (MS-DOS) 2.0.
Dans ce schéma, le premier secteur de 512 octets du disque est appelé le Master Boot Record et contient une table décrivant les partitions du disque (la table de partitions) ainsi qu’un code d’amorçage appelé "chargeur d’amorçage".
Lorsque l’ordinateur est allumé, ce code de démarrage très réduit (en raison des restrictions de taille) est chargé et exécuté, il passe le contrôle à un chargeur de démarrage secondaire sur le disque, généralement situé dans un espace de 32 ko entre le MBR et la première partition, qui à son tour va charger le ou les systèmes d’exploitation.
Sur un disque partitionné MBR, le code de démarrage de GRUB est installé sur le MBR. Celui-ci se charge et passe le contrôle à une image “core” installée entre le MBR et la première partition. À partir de là, GRUB est capable de charger le reste des ressources nécessaires (définitions de menu, fichiers de configuration et modules supplémentaires) depuis le disque.
Cependant, le MBR comporte des restrictions quant au nombre de partitions (un maximum de 4 partitions primaires à l’origine, puis un maximum de 3 partitions primaires dont 1 partition étendue subdivisée en un certain nombre de partitions logiques) et une taille maximale de disque de 2 To. Pour pallier ces limitations, un nouveau schéma de partitionnement appelé GPT (GUID Partition Table), qui fait partie de la norme UEFI (Unified Extensible Firmware Interface), a été créé.
Les disques partitionnés GPT peuvent être utilisés soit avec des ordinateurs dotés du BIOS PC traditionnel, soit avec des ordinateurs équipés du micrologiciel UEFI. Sur les machines avec un BIOS, la deuxième partie de GRUB est stockée dans une partition d’amorçage BIOS spécifique.
Sur les systèmes avec un firmware UEFI, GRUB est chargé par le micrologiciel à partir des fichiers grubia32.efi
(pour les systèmes 32 bits) ou grubx64.efi
(pour les systèmes 64 bits) à partir d’une partition appelée ESP (EFI System Partition).
La partition /boot
Sous Linux, les fichiers nécessaires au processus de démarrage sont généralement stockés sur une partition de démarrage, montée sous le système de fichiers racine et communément appelée /boot
.
Une partition de démarrage n’est pas nécessaire sur les systèmes actuels dans la mesure où les chargeurs de démarrage comme GRUB permettent généralement de monter le système de fichiers racine et de rechercher les fichiers nécessaires à l’intérieur d’un répertoire /boot
, mais il s’agit là d’une bonne pratique qui permet de séparer les fichiers nécessaires au processus de démarrage du reste du système de fichiers.
Cette partition est généralement la première sur le disque. Cela tient au fait que le BIOS des PC IBM d’origine s’adressait aux disques en utilisant des cylindres, des têtes et des secteurs (CHS pour Cylinder/Head/Sector), avec un maximum de 1024 cylindres, 256 têtes et 63 secteurs, ce qui donne une taille maximale de disque de 528 Mo (504 Mo sous MS-DOS). Ce qui signifie que tout ce qui dépasse cette limite ne serait pas accessible, à moins qu’un autre système d’adressage de disque (comme LBA, Logical Block Addressing) ne soit utilisé.
Ainsi, pour une compatibilité maximale, la partition /boot
est généralement située au début du disque et se termine avant le cylindre 1024 (528 Mo), ce qui garantit que la machine sera toujours capable de charger le noyau. La taille recommandée pour cette partition sur une machine actuelle est de 300 Mo.
D’autres raisons pour une partition /boot
séparée sont le chiffrement et la compression, étant donné que certaines méthodes peuvent ne pas encore être supportées par GRUB 2, ou si vous avez besoin de formater la partition racine du système (/
) en utilisant un système de fichiers non supporté.
Contenu de la partition de démarrage
Le contenu de la partition /boot
peut varier en fonction de l’architecture système ou du chargeur d’amorçage en vigueur, mais sur un système de type x86, vous trouverez généralement les fichiers ci-dessous. La plupart d’entre eux sont nommés avec un suffixe -VERSION
qui représente la version du noyau Linux correspondant. Par conséquent, un fichier de configuration pour le noyau Linux en version 4.15.0-65-generic
serait appelé config-4.15.0-65-generic
.
- Fichier
config
-
Ce fichier, généralement appelé
config-VERSION
(voir l’exemple ci-dessus), contient les paramètres de configuration du noyau Linux. Ce fichier est généré automatiquement lors de la compilation ou de l’installation d’un nouveau noyau et ne doit pas être modifié directement par l’utilisateur. System.map
-
Ce fichier est une table de recherche qui fait correspondre les noms de symboles (comme les variables ou les fonctions) à leur position correspondante en mémoire. Il sert à déboguer un type de défaillance du système connue sous le nom de kernel panic, étant donné qu’il permet à l’utilisateur de savoir quelle variable ou fonction a été appelée lorsque la défaillance s’est produite. Comme le fichier
config
, le nom est généralementSystem.map-VERSION
(par exempleSystem.map-4.15.0-65-generic
). - Noyau Linux
-
C’est le noyau du système d’exploitation à proprement parler. Le nom est généralement
vmlinux-VERSION
(par exemplevmlinux-4.15.0-65-generic
). Vous trouverez également le nomvmlinuz
au lieu devmlinux
, lez
final indiquant que le fichier a été compressé. - Disque mémoire initial
-
Il est généralement appelé
initrd.img-VERSION
et contient un système de fichiers racine minimal chargé dans un disque RAM, qui contient à son tour les outils et les modules du noyau nécessaires pour que le noyau puisse monter le système de fichiers racine proprement dit. - Fichiers liés au chargeur de démarrage
-
Sur les systèmes avec GRUB installé, ceux-ci sont généralement rangés dans
/boot/grub
et comprennent le fichier de configuration de GRUB (/boot/grub/grub.cfg
pour GRUB 2 ou/boot/grub/menu.lst
dans le cas de GRUB Legacy), les modules (dans/boot/grub/i386-pc
), les fichiers de traduction (dans/boot/grub/locale
) et les polices (dans/boot/grub/fonts
).
GRUB 2
Installation de GRUB 2
GRUB 2 peut être installé à l’aide de la commande grub-install
. Si vous avez un système non amorçable, démarrez en utilisant un live CD ou un disque de secours, repérez la partition de démarrage de votre système, montez cette partition et exécutez la commande.
Note
|
Les commandes ci-dessous supposent que vous êtes connecté en tant que root. Si ce n’est pas le cas, commencez par invoquer |
Le premier disque d’un système est généralement le périphérique de démarrage et vous devrez éventuellement savoir s’il y a une partition de démarrage sur le disque. On peut le faire avec la commande fdisk
. Pour lister toutes les partitions sur le premier disque de votre machine, utilisez :
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
La partition de démarrage est identifiée par l’astérisque *
sous la colonne Boot
. Dans l’exemple ci-dessus, c’est /dev/sda1
.
Maintenant, créez un répertoire temporaire sous /mnt
et montez la partition en-dessous :
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
Ensuite, exécutez grub-install
en le faisant pointer vers le périphérique de démarrage (et non pas la partition) ainsi que le répertoire où la partition de démarrage est montée. Si votre système dispose d’une partition de démarrage dédiée, la commande est :
# grub-install --boot-directory=/mnt/tmp /dev/sda
Si vous effectuez l’installation sur un système qui n’a pas de partition de démarrage, mais seulement un répertoire /boot
sur le système de fichiers racine, pointez grub-install
vers celui-ci. Dans ce cas, la commande est :
# grub-install --boot-directory=/boot /dev/sda
Configuration de GRUB 2
Le fichier de configuration par défaut pour GRUB 2 est /boot/grub/grub.cfg
. Ce fichier est généré automatiquement et il n’est pas recommandé de le modifier à la main. Pour apporter des modifications à la configuration de GRUB, vous devez éditer le fichier /etc/default/grub
puis lancer la commande update-grub
pour générer un fichier valide.
Note
|
|
Il y a une série d’options dans le fichier /etc/default/grub
qui contrôlent le comportement de GRUB 2, comme le noyau par défaut au démarrage, le délai d’attente, les paramètres supplémentaires de la ligne de commande, etc. Les plus importantes sont :
GRUB_DEFAULT=
-
L’entrée de menu par défaut au démarrage. Il peut s’agir d’une valeur numérique (comme
0
,1
, etc.), du nom d’une entrée de menu (commedebian
ousaved
), qui est utilisée en conjonction avecGRUB_SAVEDEFAULT=
, voir l’explication ci-dessous. N’oubliez pas que les entrées de menu commencent à zéro, donc la première entrée de menu est0
, la seconde est1
, etc. GRUB_SAVEDEFAULT=
-
Si cette option est définie à
true
et queGRUB_DEFAULT=
est défini àsaved
, alors l’option de démarrage par défaut sera toujours la dernière sélectionnée dans le menu de démarrage. GRUB_TIMEOUT=
-
Le délai en secondes avant que l’entrée de menu par défaut ne soit sélectionnée. S’il est défini à
0
, le système démarrera l’entrée par défaut sans afficher le menu. S’il est défini à-1
, le système attendra que l’utilisateur choisisse une option, peu importe le temps que cela prendra. GRUB_CMDLINE_LINUX=
-
Cette liste énumère les options en ligne de commande qui seront ajoutées aux entrées du noyau Linux.
GRUB_CMDLINE_LINUX_DEFAULT=
-
Par défaut, deux entrées de menu sont générées pour chaque noyau Linux, une avec les options par défaut et une entrée pour la récupération.
GRUB_ENABLE_CRYPTODISK=
-
Si la valeur est
y
, les commandes commegrub-mkconfig
,update-grub
etgrub-install
vont rechercher les disques chiffrés et ajouter les commandes nécessaires pour y accéder au démarrage.
Gérer les entrées de menu
Lorsque update-grub
est exécuté, GRUB 2 va rechercher les noyaux et les systèmes d’exploitation sur la machine et générer les entrées de menu correspondantes dans le fichier /boot/grub/grub.cfg
. De nouvelles entrées peuvent être ajoutées manuellement aux fichiers de script dans le répertoire /etc/grub.
.
Ces fichiers doivent être exécutables, et ils sont traités en ordre numérique par update-grub
. Ainsi, 05_debian_theme
est traité avant 10_linux
et ainsi de suite. Les entrées de menu personnalisées sont généralement ajoutées au fichier 40_custom
.
La syntaxe de base pour une entrée de menu est présentée ci-dessous :
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
La première ligne commence toujours par menuentry
et se termine par }
. Le texte entre guillemets sera affiché comme titre d’entrée dans le menu de démarrage de GRUB 2.
Le paramètre set root
définit le disque et la partition où se situe le système de fichiers racine du système d’exploitation. Notez que dans GRUB 2 les disques sont numérotés à partir de zéro, donc hd0
est le premier disque (sda
sous Linux), hd1
le second, et ainsi de suite. Quant aux partitions, elles sont numérotées à partir de un. Dans l’exemple ci-dessus, le système de fichiers racine est situé sur le premier disque (hd0
), la première partition (,1
), ou sda1
.
Au lieu de spécifier directement le périphérique et la partition, vous pouvez également demander à GRUB 2 de rechercher un système de fichiers avec une étiquette ou un UUID (Universally Unique Identifier) spécifique. Pour ce faire, utilisez le paramètre search --set=root
suivi du paramètre --label
et de l’étiquette du système de fichiers à rechercher, ou --fs-uuid
suivi de l’UUID du système de fichiers.
Vous pouvez trouver l’UUID d’un système de fichiers à l’aide de la commande ci-dessous :
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
Dans l’exemple ci-dessus, l’UUID pour /dev/sda1
est ae71b214-0aec-48e8-80b2-090b6986b625
. Si vous souhaitez le définir comme périphérique racine pour GRUB 2, la commande sera search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
.
Quand on utilise la commande search
, il est courant d’ajouter le paramètre --no-floppy
pour que GRUB ne perde pas de temps à chercher sur des disquettes floppy.
La ligne linux
indique où se trouve le noyau du système d’exploitation (dans ce cas, le fichier vmlinuz
à la racine du système de fichiers). Après cela, vous pouvez passer les paramètres en ligne de commande au noyau.
Dans l’exemple ci-dessus, nous avons spécifié la partition racine (root=/dev/sda1
) en passant trois paramètres au noyau : la partition racine doit être montée en lecture seule (ro
), la plupart des messages de journalisation doivent être désactivés (quiet
) et un écran de démarrage doit être affiché (splash
).
La ligne initrd
indique où se trouve le disque mémoire initial. Dans l’exemple ci-dessus, le fichier est initrd.img
, situé à la racine du système de fichiers.
Note
|
La plupart des distributions Linux ne rangent pas vraiment le noyau et l’initrd dans le répertoire racine du système de fichiers racine. Au lieu de cela, il s’agit de liens vers les fichiers à proprement parler à l’intérieur du répertoire ou de la partition |
La dernière ligne d’une entrée de menu ne doit contenir que le caractère }
.
Interagir avec GRUB 2
Lorsque vous démarrez un système avec GRUB 2, vous verrez un menu d’options. Utilisez les touches fléchées pour sélectionner une option et Entrée pour confirmer et démarrer l’entrée sélectionnée.
Tip
|
Si vous voyez juste un compte à rebours, mais pas de menu, appuyez sur Maj pour afficher le menu. |
Pour éditer une option, sélectionnez-la avec les touches fléchées et appuyez sur E. Cela affichera une fenêtre d’édition avec le contenu menuentry
associé à cette option, tel que défini dans /boot/grub/grub.cfg
.
Après avoir édité une option, tapez Ctrl+X ou F10 pour démarrer, ou Échap pour revenir au menu.
Pour accéder au shell GRUB 2, appuyez sur C dans l’écran de menu (ou Ctrl+C) dans la fenêtre d’édition). Vous verrez une invite de commande comme ceci : grub >
Tapez help
pour voir une liste de toutes les commandes disponibles, ou appuyez sur Échap pour quitter le shell et revenir à l’écran de menu.
Note
|
Rappelez-vous que ce menu n’apparaîtra pas si |
Démarrer depuis le shell GRUB 2
Vous pouvez utiliser le shell GRUB 2 pour démarrer le système au cas où une mauvaise configuration dans une entrée de menu le ferait échouer.
La première chose à faire est de trouver l’emplacement de la partition de démarrage. Vous pouvez le faire avec la commande ls
, qui vous affichera une liste des partitions et des disques que GRUB 2 a trouvés.
grub> ls (proc) (hd0) (hd0,msdos1)
Dans l’exemple ci-dessus, les choses sont simples. Il n’y a qu’un seul disque (hd0)
avec une seule partition : (hd0,msdos1)
.
Les disques et partitions répertoriés varieront selon votre système. Dans notre exemple, la première partition de hd0
est appelée msdos1
parce que le disque a été partitionné en utilisant le schéma de partitionnement MBR. S’il était partitionné en GPT, le nom serait gpt1
.
Pour démarrer Linux, nous avons besoin d’un noyau et d’un disque mémoire initial (initrd). Examinons le contenu de (hd0,msdos1)
:
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
Vous pouvez ajouter le paramètre -l
à ls
pour obtenir un affichage détaillé, comparable à ce que vous obtiendriez dans un terminal Linux. Utilisez Tab pour compléter automatiquement les noms des disques, des partitions et des fichiers.
Notez que nous avons un noyau (vmlinuz
) et des images initrd (initrd.img
) directement dans le répertoire racine. Dans le cas contraire, nous pouvons vérifier le contenu de /boot
avec list (hd0,msdos1)/boot/
.
À présent, définissez la partition de démarrage :
grub> set root=(hd0,msdos1)
Chargez le noyau Linux avec la commande linux
, suivie du chemin vers le noyau et de l’option root=
pour indiquer au noyau où se trouve le système de fichiers racine du système d’exploitation.
grub> linux /vmlinuz root=/dev/sda1
Chargez le disque mémoire initial avec initrd
, suivi du chemin complet vers le fichier initrd.img
:
grub> initrd /initrd.img
Maintenant, démarrez le système avec boot
.
Démarrer depuis le shell de secours
En cas de défaillance du démarrage, GRUB 2 peut charger un shell de secours, une version simplifiée du shell que nous avons mentionné ci-dessus.
La procédure pour démarrer un système depuis ce shell est presque la même que celle illustrée précédemment. Cependant, vous devrez charger quelques modules de GRUB 2 pour que tout fonctionne.
Une fois que vous avez identifié la partition de démarrage (avec ls
, comme indiqué précédemment), utilisez la commande set prefix=
, suivie du chemin complet vers le répertoire contenant les fichiers de GRUB 2. Habituellement /boot/grub
. Dans notre exemple :
grub rescue> set prefix=(hd0,msdos1)/boot/grub
A présent, chargez les modules normal
et linux
à l’aide de la commande insmod
:
grub rescue> insmod normal grub rescue> insmod linux
Ensuite, définissez la partition de démarrage avec set root=
comme indiqué précédemment, chargez le noyau Linux (avec linux
), le disque mémoire initial (initrd
) et essayez de démarrer avec boot
.
GRUB Legacy
Installer GRUB Legacy sur un système en état de fonctionnement
Pour installer GRUB Legacy sur un disque depuis un système en marche, nous utiliserons la commande grub-install
. La commande de base est grub-install PERIPHERIQUE
où PERIPHERIQUE
est le disque sur lequel vous souhaitez installer GRUB Legacy. Un exemple serait /dev/sda
.
# grub-install /dev/sda
Notez que vous devez spécifier le périphérique sur lequel GRUB Legacy sera installé, comme /dev/sda/
, et non pas la partition comme dans /dev/sda1
.
Par défaut, GRUB va copier les fichiers nécessaires dans le répertoire /boot
sur le périphérique spécifié. Si vous souhaitez les copier vers un autre répertoire, utilisez le paramètre --boot-directory=
, suivi du chemin complet vers l’endroit vers lequel les fichiers doivent être copiés.
Installer GRUB Legacy depuis un shell GRUB
Si vous ne pouvez pas démarrer le système pour une raison quelconque et que vous devez réinstaller GRUB Legacy, vous pouvez le faire à partir du shell GRUB sur un disque de démarrage GRUB Legacy.
Depuis le shell GRUB (tapez c
dans le menu de démarrage pour accéder à l’invite grub>
), la première étape consiste à définir le périphérique de démarrage, qui contient le répertoire /boot
. Par exemple, si ce répertoire se trouve dans la première partition du premier disque, la commande sera :
grub> root (hd0,0)
Si vous ne savez pas quel périphérique contient le répertoire /boot
, vous pouvez demander à GRUB de le rechercher avec la commande find
, comme ci-dessous :
grub> find /boot/grub/stage1 (hd0,0)
Ensuite, définissez la partition de démarrage comme indiqué ci-dessus et utilisez la commande setup
pour installer GRUB Legacy dans le MBR et copier les fichiers nécessaires sur le disque :
grub> setup (hd0)
Une fois terminé, redémarrez le système et il devrait démarrer normalement.
Configurer les entrées de menu et les paramètres de GRUB Legacy
Les entrées de menu et les paramètres de GRUB Legacy sont stockés dans le fichier /boot/grub/menu.lst
. Il s’agit d’un fichier texte simple avec une liste de commandes et de paramètres, qui peut être édité directement avec votre éditeur de texte préféré.
Les lignes commençant par #
sont considérées comme des commentaires, et les lignes vides sont ignorées.
Une entrée de menu comporte au moins trois commandes. La première, title
, définit le titre du système d’exploitation dans l’écran de menu. La seconde, root
, indique à GRUB Legacy le périphérique ou la partition à partir de laquelle il doit démarrer.
La troisième entrée, kernel
, spécifie le chemin complet vers l’image du noyau qui doit être chargée lorsque l’entrée correspondante est sélectionnée.
Voici un exemple simple :
# Cette ligne est un commentaire title Ma distribution Linux root (hd0,0) kernel /vmlinuz root=/dev/hda1
Contrairement à GRUB 2, dans GRUB Legacy, les disques et les partitions sont numérotés à partir de zéro. Ainsi, la commande root (hd0,0)
va définir la partition de démarrage comme la première partition (0
) du premier disque (hd0
).
Vous pouvez omettre l’instruction root
si vous spécifiez le périphérique de démarrage en tête du chemin à la commande kernel
. La syntaxe est la même, donc :
kernel (hd0,0)/vmlinuz root=dev/hda1
équivaut à :
root (hd0,0) kernel /vmlinuz root=/dev/hda1
Les deux vont charger le fichier vmlinuz
à partir du répertoire racine (/
) de la première partition du premier disque (hd0,0
).
Le paramètre root=/dev/hda1
après la commande kernel
indique au noyau Linux quelle partition doit être utilisée comme système de fichiers racine. Il s’agit d’un paramètre du noyau Linux, et non d’une commande GRUB Legacy.
Note
|
Pour en savoir plus sur les paramètres du noyau, voir https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html. |
Vous devrez éventuellement spécifier l’emplacement du disque mémoire initial pour le système d’exploitation à l’aide du paramètre initrd
. Le chemin complet vers le fichier peut être spécifié comme pour le paramètre kernel
, et vous pouvez également spécifier un périphérique ou une partition avant le chemin, par exemple :
# Cette ligne est un commentaire title Ma distribution Linux root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
GRUB Legacy a une conception modulaire, où des modules (généralement stockés sous forme de fichiers .mod
dans /boot/grub/i386-pc
) peuvent être chargés pour ajouter des fonctionnalités supplémentaires, comme le support de matériel, de systèmes de fichiers ou de nouveaux algorithmes de compression inhabituels.
Les modules sont chargés en utilisant la commande module
, suivie du chemin complet vers le fichier .mod
correspondant. Gardez à l’esprit que, comme pour les noyaux et les images initrd, ce chemin est relatif au périphérique spécifié dans la directive root
.
L’exemple ci-dessous va charger le module 915resolution
, requis pour régler correctement la résolution du framebuffer sur les systèmes équipés de chipsets vidéo Intel de la série 800 ou 900.
module /boot/grub/i386-pc/915resolution.mod
Multi-amorçage avec d’autres systèmes d’exploitation
GRUB Legacy peut être utilisé pour charger des systèmes d’exploitation non pris en charge, comme Windows, en utilisant un processus appelé chainloading (multi-amorçage). GRUB Legacy est chargé en premier, et lorsque l’option correspondante est sélectionnée, le chargeur de démarrage du système en question est chargé.
Une entrée typique pour un double boot Windows ressemblerait à ceci :
# Charger Windows title Windows XP root (hd0,1) makeactive chainload +1 boot
Passons en revue chaque paramètre. Comme précédemment, root (hd0,1)
spécifie le périphérique et la partition où se trouve le chargeur de démarrage du système d’exploitation que nous souhaitons charger. Dans cet exemple, la seconde partition du premier disque.
makeactive
-
définit un fanion indiquant qu’il s’agit d’une partition active. Cela ne fonctionne que sur les partitions primaires DOS.
chainload +1
-
indique à GRUB de charger le premier secteur de la partition de démarrage. C’est là que se trouvent généralement les chargeurs de démarrage.
boot
-
va exécuter le chargeur de démarrage et charger le système d’exploitation correspondant.
Exercices guidés
-
Quel est l’emplacement par défaut du fichier de configuration de GRUB 2 ?
-
Quelles sont les étapes nécessaires pour modifier les réglages de GRUB 2 ?
-
Dans quel fichier doit-on ajouter les entrées personnalisées du menu GRUB 2 ?
-
Où sont stockées les entrées du menu de GRUB Legacy ?
-
À partir d’un menu GRUB 2 ou GRUB Legacy, comment pouvez-vous accéder au shell GRUB ?
Exercices d’approfondissement
-
Supposons qu’un utilisateur configure GRUB Legacy pour démarrer à partir de la deuxième partition du premier disque. Il crée l’entrée de menu personnalisée suivante :
title Ma Distrib Linux root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Pourtant, le système ne démarre pas. Qu’est-ce qui ne va pas ?
-
Supposons que vous ayez un disque identifié en tant que
/dev/sda
avec plusieurs partitions. Quelle commande peut être utilisée pour déterminer la partition de démarrage d’un système ? -
Quelle commande peut être utilisée pour déterminer l’UUID d’une partition ?
-
Considérez l’entrée suivante pour GRUB 2 :
menuentry "OS principal" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Modifiez-la pour que le système démarre à partir d’un disque avec l’UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
. -
Comment pouvez-vous paramétrer GRUB 2 pour qu’il attende 10 secondes avant de démarrer l’entrée de menu par défaut ?
-
Depuis un shell GRUB Legacy, quelles sont les commandes pour installer GRUB sur la première partition du second disque ?
Résumé
Dans cette leçon, nous avons appris :
-
Qu’est-ce qu’un chargeur de démarrage.
-
Les différences entre GRUB Legacy et GRUB 2.
-
Qu’est-ce qu’une partition de démarrage, et qu’est-ce qu’elle contient.
-
Comment installer GRUB Legacy et GRUB 2.
-
Comment configurer GRUB Legacy et GRUB 2.
-
Comment ajouter des entrées de menu personnalisées à GRUB Legacy et GRUB 2.
-
Comment interagir avec l’écran de menu et la console de GRUB Legacy et GRUB 2.
-
Comment démarrer un système à partir du shell GRUB Legacy ou GRUB 2 ou du shell de secours.
Les commandes suivantes ont été abordées dans cette leçon :
-
grub-install
-
update-grub
-
grub-mkconfig
Réponses aux exercices guidés
-
Quel est l’emplacement par défaut du fichier de configuration de GRUB 2 ?
/boot/grub/grub.cfg
-
Quelles sont les étapes nécessaires pour modifier les réglages de GRUB 2 ?
Apportez vos modifications au fichier
/etc/default/grub
, puis actualisez la configuration avecupdate-grub
. -
Dans quel fichier doit-on ajouter les entrées personnalisées du menu GRUB 2 ?
/etc/grub.d/40_custom
-
Où sont stockées les entrées du menu de GRUB Legacy ?
/boot/grub/menu.lst
-
À partir d’un menu GRUB 2 ou GRUB Legacy, comment pouvez-vous accéder au shell GRUB ?
Appuyez sur
c
dans l’écran de menu.
Réponses aux exercices d’approfondissement
-
Supposons qu’un utilisateur configure GRUB Legacy pour démarrer à partir de la deuxième partition du premier disque. Il crée l’entrée de menu personnalisée suivante :
title Ma Distrib Linux root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Pourtant, le système ne démarre pas. Qu’est-ce qui ne va pas ?
La partition de démarrage est mal renseignée. Rappelez-vous que, contrairement à GRUB 2, GRUB Legacy compte les partitions à partir de zéro. Ainsi, la bonne directive pour la deuxième partition du premier disque devrait être
root (hd0,1)
. -
Supposons que vous ayez un disque identifié en tant que
/dev/sda
avec plusieurs partitions. Quelle commande peut être utilisée pour déterminer la partition de démarrage d’un système ?Invoquez
fdisk -l /dev/sda
. La partition de démarrage sera marquée d’un astérisque (*
) dans le listing. -
Quelle commande peut être utilisée pour déterminer l’UUID d’une partition ?
Utilisez
ls -la /dev/disk/by-uuid/
et repérez l’UUID qui pointe vers la partition. -
Considérez l’entrée suivante pour GRUB 2 :
menuentry "OS principal" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Modifiez-la pour que le système démarre à partir d’un disque avec l’UUID
5dda0af3-c995-481a-a6f3-46dcd3b6998d
.Vous devrez modifier l’instruction
set root
. Au lieu de spécifier un disque et une partition, dites à GRUB de rechercher la partition avec l’UUID de votre choix.menuentry "OS principal" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
Comment pouvez-vous paramétrer GRUB 2 pour qu’il attende 10 secondes avant de démarrer l’entrée de menu par défaut ?
Ajoutez le paramètre
GRUB_TIMEOUT=10
à/etc/default/grub
. -
Depuis un shell GRUB Legacy, quelles sont les commandes pour installer GRUB sur la première partition du second disque ?
grub> root (hd1,0) grub> setup (hd1)