Après divers tests, je rassemble ici mes notes à propos de la configuration nécessaire pour démarrer un système, selon les différentes combinaisons courantes du micrologiciel de la carte mère (BIOS ou UEFI) et du format de table de partitions (MBR ou GPT) utilisées.

Descriptions

BIOS

Après l'initialisation des différents matériels présents dans la machine, le BIOS recherche un disque contenant des informations de démarrage. Une fois ce disque trouvé, il exécute les instructions présentes dans le premier secteur du disque, qui ont souvent pour but de lancer un bootloader, qui chargera ensuite un système.

Le paquet contenant grub pour un BIOS se nomme grub-pc.

UEFI

Contrairement au BIOS, l'UEFI n'exécute pas les instructions présentes dans le premier secteur du disque de démarrage, mais liste les exécutables présents dans une partition spécifique. Cela permet le chargement de différents systèmes, sans nécessiter qu'un système maître ne doive être utilisé pour lancer les autres, même si cela reste possible.

Certaines implémentations d'UEFI ne chargent qu'un seul chemin bien précis. Dans ce cas, si plusieurs systèmes doivent pouvoir être démarrés, il est nécessaire de passer par un bootloader.

Le paquet contenant grub pour un UEFI se nomme grub-efi-amd64.

MBR

Un disque utilisant une table de partitions MBR contient entre autres une routine de démarrage (des instructions destinées à être exécutée par un BIOS) et la description des partitions définies sur le disque, en début de disque, puis les partitions elle-mêmes, sur tout le reste du disque. Le nombre de partitions est limité à quatre, mais il est possible de définir des partitions étendues, dans lesquelles seront déclarés des lecteurs logiques, afin de permettre la création de plus de quatre "partitions". Quel que soit le type, les partitions sont limitées à une taille de 2 Tio (la taille d'une partition occupe 16 octets et est exprimée en secteurs de 512 octets).

Ce format de table de partitions permet de définir un flag boot sur les partitions. Ce flag était utilisé sur d'anciens systèmes, pour définir quelle partition contient le système à démarrer. Il est maintenant inutile dans la plupart des cas, mais le définir est toujours recommandé, puisque certains BIOS refusent de démarrer le système s'ils ne détectent aucune partition avec le flag boot activé.

Pour utiliser une table de partitions MBR, le partitionnement du disque peut être effectué avec plusieurs outils, comme parted, fdisk, sfdisk, cfdisk...

GPT

Le format GPT est apparu pour permettre de se débarrasser des limitations du format MBR. Son principal avantage est de repousser la limite de la taille des partitions à une valeur dépassant de très loin la taille de tous les disques actuels. Il permet aussi la définition d'un nombre variable de partitions, selon les valeurs définies dans l'en-ête de la table de partitions, qui correspondent souvent à un maximum de 128 partitions.

Pour utiliser une table de partitions GPT, le partitionnement du disque peut être effectué avec plusieurs outils, comme parted, gdisk, sgdisk, cgdisk...

Configuration du démarrage

Je décris ici les éléments nécessaires pour permettre à un ordinateur de démarrer, avec grub, selon les différentes combinaisons utilisées de micrologiciel BIOS/UEFI et table de partition MBR/GPT.

En effet, bien que le format MBR soit fortement lié au BIOS, et que le format GPT fasse partie des spécifications de la norme UEFI, il est aussi possible de démarrer un ordinateur avec les deux autres combinaisons.

BIOS et MBR

Cette combinaison est la plus ancienne. Elle n'implique rien de particulier : Le bootloader est placé dans le premier secteur du disque de démarrage, et se charge de lancer un système.

Note : Dans le cas de grub, le bootloader est découpé en deux parties, puisqu'il occupe trop de place pour tenir entièrement dans un secteur. Le stage1 (placé dans le premier secteur du disque) charge le stage2 (situé sur une partition), qui lance le système d'exploitation.

Pour mettre grub en place sur un disque partitionné en utilisant MBR dans une machine équipée d'un BIOS, il suffit de taper la commande suivante depuis le système à démarrer :

$ sudo grub-install /dev/sdX

UEFI et GPT

C'est la seconde combinaison "standard", de plus en plus utilisée sur les systèmes récents.

L'UEFI nécessite une partition, de type "EFI System" (code EF00), qui occupe généralement entre 64 Mio et 256 Mio. Bien que cette partition puisse être formatée dans divers systèmes de fichiers, il est conseillé d'utiliser vfat ou fat32, qui sont les systèmes de fichiers les plus souvent implémentés dans les UEFI.

Pour mettre grub en place sur un disque partitionné en utilisant GPT dans une machine équipée d'un UEFI, il suffit de taper la commande suivante depuis le système à démarrer :

$ sudo grub-install

Note : L'emplacement d'installation de grub et l'architecture à utiliser sont normalement détectés automatiquement, mais il est possible de les préciser si les valeurs automatiques ne conviennent pas. Par exemple :

$ sudo grub-install --boot-directory=/boot --efi-directory=/boot/efi --target=x86_64-efi

BIOS et GPT

Pour des raisons de rétro-compatibilité, une table de partitions GPT débute par une section nommée "protective MBR", dont le contenu correspond à une table de partitions MBR. C'est cela qui permet à la combinaison "BIOS et GPT" de fonctionner. Il est bien évidemment nécessaire que la partition contenant le système lancé soit dans les quatre premières du disque.

Contrairement à une table de partitions MBR, GPT ne dispose pas de secteur de démarrage. Pour le remplacer, il est donc nécessaire de créer une partition spécifique, de type "BIOS Boot" (code EF02, 1 Mio suffit), et d'activer le flag pmbr_boot sur le disque :

$ sudo parted /dev/sdX disk-toggle pmbr_boot

La mise en place de grub se fait ensuite de la même manière que pour la combinaison "BIOS et MBR" :

$ sudo grub-install /dev/sdX

UEFI et MBR

Comme pour la combinaison "UEFI et GPT", il est nécessaire d'avoir une partition de type "EFI System", qui contiendra les exécutables lancés par l'UEFI.

La mise en place de grub se fait ensuite de la même manière que pour la combinaison "UEFI et GPT" :

$ sudo grub-install

Note : Les paramètres définissant l'emplacement d'installation de grub peuvent ici aussi être précisés, si nécessaire.