Sur PC on trouve principalement deux formats de table de partition :
- MSDOS (ou DOS, MBR), le format traditionnel avec la table de partition principale (4 entrées) dans le MBR et des tables de partition étendues (1 par partition logique) dans les partitions étendues imbriquées et liées en listes chaînées.
- GPT, le nouveau format introduit par la spécification de l'UEFI, avec la table de partition (taille variable, généralement 128 entrées) dans les secteurs qui suivent le MBR et une copie de secours à la fin du disque. Le MBR existe toujours et contient une table de partition factice dite "de protection".
Le format GPT a plusieurs avantages comme les noms et UUID de partition indépendants des étiquettes et UUID de système de fichiers, le support des disques de plus de 2 Tio avec des secteurs de 512 octets, la suppression des partitions étendues et logiques complexes et fragiles.
Bien que le format MSDOS soit traditionnellement utilisé avec l'amorçage BIOS et le format GPT avec l'amorçage EFI (c'est obligatoire avec Windows), on peut théoriquement faire l'inverse, voire mettre en place un double amorçage BIOS+EFI avec n'importe lequel des deux formats. Néanmoins certains firmwares BIOS ou UEFI imposent des restrictions (qui ne sont pas dans les spécifications officielles, donc ce sont des bugs) parfois contradictoires qui peuvent compliquer ou empêcher les configurations d'amorçage "non standard".
Dans l'amorçage BIOS sur table MSDOS, la première partie de GRUB (boot image) est installée dans le MBR, la seconde partie (core image) est installée "sauvagement" dans les secteurs non alloués situés entre le MBR et la première partition. La troisième partie de GRUB (modules, fichier de configuration grub.cfg, polices...) est installée dans /boot/grub comme toujours. Pour installer GRUB on exécute grub-install en spécifiant le disque où la boot image et la core image doivent être installés.
Dans l'amorçage BIOS sur table GPT, la boot image de GRUB est encore installée dans le MBR mais la core image ne peut pas être installée dans les secteurs suivants qui sont déjà occupés par la table de partition GPT. Elle est installée dans une petite partition (1 Mo suffit largement) non formatée de type "BIOS boot" (drapeau bios_grub pour parted) créée à cet effet. Pour installer GRUB on exécute grub-install en spécifiant le disque où la boot image et la core image doivent être installés comme précédemment, ia partition BIOS boot sera utilisée automatiquement.
Dans l'amorçage EFI sur table MSDOS ou GPT, il n'y a pas de boot image et le MBR n'est pas utilisé. La core image de GRUB est un fichier *.efi installé dans un sous-répertoire arbitraire du répertoire /EFI d'une partition de type "système EFI" formatée en FAT habituellement montée sur /boot/efi. Selon la distribution et le chargeur d'amorçage utilisé, la partition EFI peut être montée ailleurs (/boot, /efi...). Pour installer GRUB on exécute grub-install sans spécifier de disque, la partition EFI montée sur /boot/efi est implicitement utilisée. Cela crée automatiquement une "entrée d'amorçage EFI" avec le nom de la distribution et l'emplacement du fichier *.efi à exécuter dans les "variables de boot EFI" stockées dans la mémoire non volatile de la carte mère. Plusieurs chargeurs d'amorçage peuvent donc être installés en parallèle dans des sous-répertoires distincts d'une même partition EFI sans s'écraser les uns les autres comme dans le cas du MBR. Il peut aussi y avoir plusieurs partitions EFI sur un même disque ou sur des disques différents. Un répertoire spécial /EFI/Boot appelé par convention "chemin de support amovible" peut contenir un chargeur de secours qui peut être lancé par le firmware UEFI en l'absence d'entrée de boot EFI valide. Les installateurs et systèmes live sur des supports amovibles utilisent ce mécanisme pour démarrer, d'où son nom.
Une variante de l'amorçage EFI est le "secure boot". Quand le secure boot est activé, le firmware UEFI vérifie que le fichier *.efi chargé est signé cryptographiquement avec une clé reconnue avant de l'exécuter. La seule clé reconnue par défaut est celle de Microsoft, mais le firmware UEFI peut permettre d'en ajouter d'autres. Les distributions supportant le secure boot font signer par Microsoft un petit programme appelé "shim" et fournissent des variantes de GRUB et du noyau Linux signées avec leur propre clé. Au démarrage, le firmware UEFI vérifie la signature de shim ; shim vérifie à son tour la signature de GRUB ; GRUB vérifie la signature du noyau Linux. Le noyau vérifie aussi la signature des modules qui'll charge. Les modules compilés localement (notamment les pilotes propriétaires comme nvidia) ne peuvent donc pas être chargés à moins de les signer avec une clé ajoutée à la liste des clés reconnues. En principe GRUB ne peut pas non plus charger les noyaux d'autres distributions non signés ou signés avec une clé non reconnue, mais je n'ai jamais testé ce cas.
Pour les détails, il y a plein d'infos dans les pages UEFI du
wiki Debian.