GRUB

De ArchwikiFR


Grub2 est la prochaine génération de GRand Unified Bootloader (GRUB). Grub2 est dérivé de PUPA qui était un projet de recherche pour étudier la prochaine génération de GRUB. GRUB 2 a été réécrit à partir de 0 afin d'offrir modularité et portabilité.

Brièvement, le bootloader est le premier logiciel qui s'exécute lorsque l'ordinateur démarre. Il est responsable du chargement et du transfert de contrôle au noyau. Ce dernier initialise le reste du système d'exploitation.

Important: La prochaine génération de GRand Unified Bootloader (GRUB) est encore en développement et donc les problèmes typiques de bêta sont là. GRUB2 peut bloquer votre ordinateur, mettre le feu à votre maison ou encore manger votre chat. Vous êtes prévenu ! Pour la plupart des personnes, sauf celles avec des configurations plus exotiques, GRUB2 devrait fonctionner normalement.

Préface

Bien que GRUB (version 0.9x) soit le bootloader par défaut, il est déprécié par ses développeurs et ne reçoit plus que les corrections de bugs. Il est remplacé par Grub2 dans de nombreuses distributions.

Notes pour les utilisateurs actuels de GRUB

  • Il y a des différences dans les commandes de GRUB et GRUB 2. (Commandes de GRUB2)
  • Grub2 est modulaire. En conséquence, le bootloader est lui-même limité - les modules sont chargés depuis le disque dur si nécessaire pour étendre les fonctionnalités (LVM ou support RAID par exemple).
  • Les disques sont toujours numérotés à partir de 0, alors que les partitions sont numérotées à partir de 1 au lieu de 0 et sont préfixées du type de table de partitions. Par exemple, /dev/sda1 serait appelée (hd0,msdos1) (MBR) ou (hd0,gpt1) (GPT).

Installation

Astuce: Pour l'installer pendant l'installation d'Arch Linux, effectuez les étapes suivantes :
  • Sautez l'étape de l'installation du Bootloader et quitter l'installation.
  • Configurer le réseau si ce n'est déjà fait.
cp /etc/resolv.conf /mnt/etc/resolv.conf
  • Chargez le module dm-mod nécessaire à l'utilitaire grub-setup
modprobe dm-mod
  • Chrootez dans l'installation d'Arch
mount -o bind /dev /mnt/dev
chroot /mnt bash
pacman -Syy

Systèmes BIOS

pacman -S grub2-bios
Note: Si vous utilisez un schéma de partitionnement GPT, il est recommandé de créer une partition au début du disque avec pour type bios_grub (parted) 0xEF02 (gptfdisk), exemple :
 parted /dev/disk set partition-number bios_grub on
Note: Pour un schéma de partitionnement MBR (msdos), assurez vous que la première partition commence au minimum à partir du secteur 63:
# fdisk -l /dev/sda

<pre<noinclude></noinclude> style="white-space: pre-wrap; overflow-x: auto; border-top: none; margin-top: 0">[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 63 257039 128488+ 83 Linux

[...]</pre<noinclude></noinclude>>

(Source)

Pour l'installer sur le disque /dev/sda :

modprobe dm-mod
grub_bios-install --boot-directory=/boot --no-floppy --recheck /dev/sda
cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/

Vous pouvez éventuellement générer un fichier core.img qui permet de chaîner depuis un Grub1 :

grub_bios-install --grub-setup=/bin/true --boot-directory=/boot --no-floppy --recheck /dev/sda

Systèmes UEFI

À venir.

Configuration

Astuce: Pour une mise à jour depuis Grub1, vous pouvez convertir votre /boot/grub/menu.lst en /boot/grub/grub.cfg :
grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg

grub.cfg

Le fichier de configuration est /boot/grub/grub.cfg, exemple (en supprimant quelques commentaires):

Fichier: /boot/grub/grub.cfg

<pre<noinclude></noinclude> style="padding: 0.25em; margin: 0 0 0.50em 0; background-color: #F7F7F7; border: thin dashed #7F7F7F; border-top: none"> # Config file for GRUB2 - The GNU GRand Unified Bootloader # /boot/grub/grub.cfg # Timeout for menu set timeout=5 # Set default boot entry as Entry 0 set default=0 # (0) Arch Linux menuentry "Arch Linux" { set root=(hd0,1) linux /vmlinuz26 root=/dev/sda1 ro initrd /kernel26.img } ## (1) Windows #menuentry "Windows" { #set root=(hd0,3) #chainloader +1 #} </pre<noinclude></noinclude>>


Options

Quelques options:

  • (hdn,m): partition m du disque n, le numéro du disque commence par zéro (0), les partitions par un (1).
  • set default=n: entrée par défaut, qui démarrera automatiquement après le timeout.
  • set timeout=m: m secondes d'attente avant que le choix par défaut ne démarre.
  • set root=(hdn,m) définit la partition où est installé le noyau.
  • menuentry "str"{options} Une entrée.
    • linux /path ro root=/dev/device initrd /initrd.img: noyau à charger.
    • chainloader +1 : passe le relais à une au autre chargeur de démarrage

grub-mkconfig

Pour générer un grub.cfg automatiquement, vous pouvez lancer :

grub-mkconfig -o /boot/grub/grub.cfg

On peut configurer la génération automatique. Un exemple est détaillé dans la section dual boot.

Installer ou restaurer GRUB2

GRUB peut être installé depuis un live-cd ou directement depuis votre système.

Lancez la commande suivante (grub_efi*-install pour un système EFI):

grub-install --no-floppy /dev/sda

Là où /dev/sda est la destination de l'installation. Dans ce cas, sur le MBR du premier disque.

Dual-boot

grub-mkconfig

Si vous voulez que, comme dans Debian, GRUB2 recherche automatiquement d'autres systèmes, vous devez installer os-prober depuis AUR.

Si os-prober ne détecte pas tous les systèmes installés, vous pouvez également ajouter manuellement des entrées au fichier /etc/grub.d/40_custom. Elles seront insérées automatiquement quand vous exécuterez grub-mkconfig.

grub-mkconfig -o /boot/grub/grub.cfg 

pour générer le fichier grub.cfg modifié.

Microsoft Windows

Fichier: /boot/grub/grub.cfg

<pre<noinclude></noinclude> style="padding: 0.25em; margin: 0 0 0.50em 0; background-color: #F7F7F7; border: thin dashed #7F7F7F; border-top: none"> # (2) Windows XP menuentry "Windows XP" { set root=(hd0,3) chainloader +1 } </pre<noinclude></noinclude>>

GNU/Linux

Ceci est géré de la même manière que pour Archlinux:

Fichier: /boot/grub/grub.cfg

<pre<noinclude></noinclude> style="padding: 0.25em; margin: 0 0 0.50em 0; background-color: #F7F7F7; border: thin dashed #7F7F7F; border-top: none"> menuentry "L'autre Distro" { set root=(hd0,2) linux /boot/vmlinuz (ajoutez les autres options du noyau si nécessaire) initrd /boot/initrd.img (si le noyau de la seconde distribution en a besoin) } </pre<noinclude></noinclude>>

Astuces

Identifier les partitions par UUID ou label

Les numéros de partitions (que ce soit /dev/sdXy ou (hdX,Y)) sont trop dépendants de la machine, les numéros peuvent changer lorsqu'on ajoute un disque, ou lorsque le BIOS est d'humeur taquine et décide de détecter un disque avant l'autre. Enfin, ce n'est pas très élégant. Grub aussi bien que Linux sont capables d'identifier les partitions par UUID ou par label.

Les UUID sont des identifiants uniques (il est statistiquement impossible d'avoir plusieurs objets ayant le même UUID). Un UUID est attribué à une partition lors du mkfs. Il est possible de le récupérer avec blkid.

Pour indiquer à Grub2 la partition root, on utilisera la commande search :

search --by-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root

Ensuite, pour indiquer au noyau la partition de boot, on utilisera :

root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e

Si vous regardez dans /dev/disk, vous verrez plusieurs façons d'adresser les disques, sous forme de liens symboliques maintenus par udev vers les vraies partitions.

En résumé, une entrée de menu n'utilisant aucun numéro de partitions susceptible de changer :

menuentry "Arch Linux, session graphique" {
    search --by-uuid 355ccb5c-99e1-400d-b612-451f9247e35e --set root
    linux /boot/vmlinuz26 root=/dev/disk/by-label/355ccb5c-99e1-400d-b612-451f9247e35e ro
    initrd /boot/kernel26.img
}

De la même façon, on peut utiliser les labels (cependant, il est possible que certains systèmes de fichiers ne les prennent pas en charge). Les labels sont donnés par l'administrateur, avec une commande telle que:

tune2fs -L archroot /dev/sda2

L'avantage des labels est que, étant choisis par l'opérateur, ils sont humainement lisibles. L'inconvénient des labels est que, étant choisis par l'opérateur, des collisions sont plus probables. Ceci dit, utiliser les labels donne une configuration bien plus élégante et agréable à lire. Par exemple, l'entrée avec laquelle j'ai démarré ce matin :

menuentry "Arch Linux, session graphique" {
    search --label archroot --set root
    linux /boot/vmlinuz26 root=/dev/disk/by-label/archroot quiet ro 5
    initrd /boot/kernel26.img
}