GNU GRUB
(acronyme signifiant en anglais «  ») est un programme d'amorçage de micro-ordinateur. Il s'exécute à la mise sous tension de l'ordinateur, après les séquences de contrôle interne et avant le système d'exploitation proprement dit, puisque son rôle est justement d'en organiser le chargement. Lorsque l'ordinateur héberge plusieurs systèmes (on parle alors de multi-amorçage), il permet à l'utilisateur de choisir quel système démarrer.

C'est un logiciel libre. Il permet l'amorçage de systèmes GNU/Linux ou Windows (ainsi que d'autres systèmes moins répandus FreeBSD et OpenBSD, Hurd, Solaris), la lecture de la configuration au démarrage (pas besoin de réinstaller GRUB dans le secteur d'amorçage après un changement de configuration, contrairement à LILO), une ligne de commande permettant de changer la configuration au démarrage et surtout la reconnaissance en natif de divers systèmes de fichiers existants. Il possède également une sorte de langage de commande simple permettant de « rattraper » un amorçage qui se serait mal passé, à la suite du mauvais adressage d'une partition, par exemple.

Grub doit être capable de reconnaître tous les systèmes de fichiers sur lesquels il pourrait être amené à démarrer. Il est pour cette raison beaucoup plus volumineux que LILO.

Il fait partie du projet GNU.

Fonctionnalités 
 Contrairement à LILO, GRUB n'a pas besoin d'être réinstallé pour mettre à jour sa configuration. GRUB prend en compte les modifications de son fichier de configuration dynamiquement.
 Au cas où le fichier de configuration serait incorrect, GRUB peut fournir un interpréteur de commandes pour permettre à l'utilisateur de charger un système d'exploitation manuellement.
 GRUB est très portable : il permet de charger aussi bien des systèmes compatibles avec le multiboot que des systèmes non-compatibles avec cette fonction (comme Microsoft Windows). GRUB prend en charge en outre beaucoup de systèmes de fichiers comme ext3, VFAT ou NTFS. GRUB est également compatible avec le mode Logical block addressing (LBA).
 GRUB peut être utilisé avec différentes interfaces. Beaucoup de distributions GNU/Linux utilisent la prise en charge graphique de GRUB pour afficher au démarrage de l'ordinateur un menu avec une image de fond, et parfois une prise en charge de la souris.
 GRUB peut télécharger des images de systèmes d'exploitation depuis un réseau, ce qui permet d'amorcer un système sur les ordinateurs sans disques. GRUB peut décompresser ces images pour les charger ensuite.
 GRUB prend également en charge des systèmes d'exploitation non Linux via le chargement en chaîne (chain loading) d'un autre bootloader tel ceux de Windows, ou une autre version de lui-même (coexistence entre Grub Legacy (version 1) et Grub2).

Fonctionnement 

Quand l'ordinateur est allumé, le BIOS cherche le premier périphérique bootable (habituellement le disque dur), charge le secteur d'amorçage ou Master Boot Record (MBR), correspondant aux 512 premiers octets de ce disque, puis transfère le contrôle à ce code.

GRUB version 1 

Le MBR contient habituellement la partie 1 de GRUB, mais il peut aussi contenir un autre bootloader qui peut chaîner la partie 1 de GRUB depuis un autre secteur de boot, comme le début d'un autre disque ou une partition logique (de type DOS). À cause de la faible taille du MBR, la partie 1 se contente de charger la partie suivante de GRUB (qui elle peut se trouver n'importe où sur les 1024 premiers cylindres du disque). La partie 1 peut directement charger la partie 2, ou charger la partie 1.5, qui se trouve dans les 30 kilooctets suivant le MBR. Cette partie 1.5 charge ensuite la partie 2. La partie 1.5 peut contenir des pilotes pour pouvoir accéder à la partie 2.

GRUB version 2 
Ceci est proche de la version 1 de GRUB, boot.img est rangé dans le MBR ou le secteur de démarrage de volume comme la partie 1, toutefois, il peut charger un secteur depuis n'importe quelle adresse LBA48. Ceci charge le premier secteur de core.img (généré depuis diskboot.img)  qui est ensuite utilisé pour charger le reste du fichier généré core.img. Le fichier core.img est normalement rangé au même emplacement que la partie 1.5 avec les mêmes problèmes. Toutefois, il peut être déplacé dans un système de fichiers ou une partition avec moins de problème que le déplacement ou l'omission de la partie 1.5.

Une fois chargé le fichier core.img charge les fichiers de configurations et les autres modules nécessaires.

GRUB est chargé 
Une fois que GRUB est chargé, il présente une interface qui permet à l'utilisateur  de choisir quel système d'exploitation démarrer. Ceci prend normalement la forme d'un menu graphique. Si celui-ci n'est pas disponible, ou si l'utilisateur désire un contrôle direct, GRUB a sa propre invite de commande. L'utilisateur peut alors préciser manuellement les paramètres de démarrage. GRUB peut être réglé pour charger automatiquement un noyau précis après un délai d'attente défini par l'utilisateur.

Une fois que les options de démarrage ont été sélectionnées, GRUB charge le noyau choisi en mémoire et lui passe le contrôle. Sinon, GRUB peut passer le contrôle du démarrage à un autre chargeur, utilisant le chargement en chaîne. C'est cette méthode qui est utilisée pour charger des systèmes d'exploitation tels que Windows, qui ne supportent pas le multi-démarrage standard. Dans ce cas, des copies des chargeurs des autres programmes de démarrage ont été faites. Au lieu d'un noyau, l'autre système est chargé comme s'il avait été depuis le MBR. Ce peut être un autre chargeur de démarrage, comme le menu de démarrage de Microsoft, permettant la sélection du système d'exploitation.

Installation 
À l'inverse de LILO, GRUB n'a pas besoin d'être réinstallé dans le MBR à chaque modification de son fichier de configuration.

Dans un système GNU/Linux, la commande grub-install est uniquement utilisée pour installer la Partie 1 de GRUB dans le MBR ou dans une partition. Les fichiers de configuration de GRUB doivent se trouver sur une partition utilisable, et dans le cas contraire, la Partie 1 exécute l'interpréteur de commandes automatiquement.

Le nom et l'emplacement de ce fichier varient d'un système à un autre. Par exemple, dans la distribution Debian GNU/Linux, ce fichier est situé dans /boot/grub/grub.cfg, alors que Fedora le place dans /boot/grub/grub.conf (ce dernier utilise un lien symbolique à l'emplacement /etc/grub.conf et qui pointe vers /boot/grub/grub.conf pour des raisons de compatibilité).

De plus, GRUB peut être installé sur un disque amovible, comme une disquette, un CD ou une clé USB pour charger un système qui ne pourrait démarrer directement depuis son propre disque.

Configuration basique 
La configuration n'est pas extrêmement complexe, il faut connaître :

 le périphérique où se trouve le noyau () :
   hd0 : correspond au premier disque,
   hd1 : correspond au deuxième disque,
   hd0,2 : correspond au premier disque,  Grub Legacy,  Grub2
 Le nom du  ;
 Le nom du initrd si besoin ;
 Puis : boot.

Grâce à un système de prompt interactif, GRUB gère la complétion, ceci permet de retrouver les noms de disque/kernel/initrd si le menu de chargement ne fonctionne plus.

Dans le fichier /boot/grub/menu.lst, se trouvent les éléments de couleurs et  pour le menu. Le paramètre  permet de présélectionner le  à charger. Par la suite sont définis les uns en dessous des autres les  qu'il est possible de charger.

  default 0
  timeout 5
  #
  foreground = ffffff
  background = 000000
  #
  splashimage=(hd0,1)/boot/grub/leaf_splash.xpm.gz
  #
  title Gentoo
  root (hd0,1)
  kernel /boot/vmlinuz root=/dev/sda2 quiet
  #
  title Windows
  root (hd1)
  chainloader +1

Pour la partie Microsoft, il n'y a pas de noyau spécifique à charger, l'astuce consiste à choisir le bon disque puis à débuter sur le premier octet de ce disque via « chainloader +1 ». La commande « boot » permet de lancer l'exécution.

Développement 
Le terme « GRUB » fait généralement référence à . Cette version continue de recevoir des patchs, mais plus aucune nouvelle fonction n'est ajoutée. Les développeurs de GRUB ont décidé de se concentrer sur GRUB 2 : une réécriture complète du programme pour le rendre plus sûr, plus propre, plus puissant et plus robuste.

GNU GRUB 2 

Véritable suite de GRUB, GNU GRUB 2 est la nouvelle version par défaut progressivement adoptée par plusieurs distributions GNU/Linux. Les développeurs prévoient donc :
 de pouvoir scripter GRUB, avec des structures comme les boucles ou les conditions ;
 une interface graphique ;
 un système pour charger les modules à l'exécution, plutôt que d'alourdir la compilation ;
 une portabilité accrue ;
 la prise en charge des caractères non-ASCII ;
 la prise en charge du système de fichiers ext4 depuis le  ;
 le nouveau système de fichiers btrfs ;
 une meilleure accessibilité (système d'étiquettes vocales…).

Variantes 
Plusieurs autres projets maintiennent leurs propres améliorations (fork) au code de GRUB Legacy. Ceci inclut Super Grub Disk (les nouvelles commandes incluent "setgrubdevice" et "usbshift") et GRUB4DOS.
OpenSolaris utilise une version modifiée de GRUB Legacy qui prend en charge les noms de disque, la sélection automatique des noyaux 64 bits, et le démarrage depuis ZFS (avec compression et environnements de multi-démarrage). Le projet Syllable OS a fait une version modifiée de GRUB pour charger le système depuis le système de fichiers AtheOS.

Notes et références

Voir aussi

Autres chargeurs d'amorçage 
 AiR-Boot, qui tient en entier sur le secteur d'amorçage (Master Boot Record)
 Barebox, utilisé sur architecture ARM, dérivé de u-boot, et s'inspirant de Linux et de POSIX, il contient un shell type Busybox, mais plus réduit.
 Gestor de Arranque Gráfico, qui tient en entier sur le secteur d'amorçage (Master Boot Record)
 LILO, un prédécesseur de grub, plus compact
 Pour Microsoft Windows: NTLDR (de Windows NT à Windows 2003), puis Boot Configuration Data
Syslinux, une suite de chargeurs d'amorçage de faible taille pour Linux, utilisable sur CD-ROM, DVD, réseaux, et VFAT
PLoP, capable de démarrer des clés usb bootables sans support du BIOS
 XOSL

Liens externes 
 
  Manuel en français

Chargeur d'amorçage
Logiciel du projet GNU