GRUB
Grub (GRand Unified Bootloader), anciennement Grub2 est dérivé de PUPA qui était un projet de recherche pour étudier la prochaine génération de GRUB. Il 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.
Sommaire
|
Notes pour les utilisateurs actuels de GRUB Legacy
- Il y a des différences dans les commandes de GRUB Legacy et GRUB. (Commandes de GRUB)
- Grub 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
Si vous utilisez LVM, RAID, une méthode de chiffrage ou tout autre système faisant appel au module dm-mod, pensez à le charger (si ce n'est déjà fait) :
modprobe dm-mod
Systèmes BIOS
Recommendations de partitionnement
(Source)
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
Que ce soit en partitionnement GPT ou en MBR, assurez vous que la première partition commence au minimum à partir du secteur 63 (31Ko), par exemple pour un partitionnement MBR :
# fdisk -l /dev/sda[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 63 257039 128488+ 83 Linux [...]
/usr/bin/grub-bios-setup : attention : core.img est exceptionnellement grand. Il ne tiendra pas dans la zone d'embarquage. /usr/bin/grub-bios-setup : erreur : l'embarquage est impossible, il est pourtant nécessaire pour les installations RAID et LVM.
Dans ce cas, il vous faut prévoir plus de place, 1Mo est suffisant :
# fdisk -l /dev/sda[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 2048 204799 101376 83 Linux [...]
Installation du paquet
pacman -S grub-bios
Mise en place
Pour l'installer sur le disque /dev/sda :
grub-install --no-floppy --recheck /dev/sda
Vous pouvez éventuellement juste générer un fichier core.img qui permet de chaîner depuis un GRUB Legacy :
grub-install --grub-setup=/bin/true --no-floppy --recheck /dev/sda
Il faudra passer /boot/grub/i386-pc/core.img à grub 0.x.
Systèmes UEFI
Les fabricants de carte-mère implémentent UEFI de différentes manières. Si ce qui suit ne fonctionne pas pour vous, voyez le wiki (en).
Préalable
Une partition système UEFI doit être rajoutée. Elle peut être de n'importe quelle taille, mais forcément formatée en FAT32 et d'un minimum de 512 Mb (prévoir davantage si vous avez plusieurs chargeurs UEFI ou plusieurs systèmes démarrés par UEFI).
Créer la partition système UEFI
Tables de partition GPT
Au choix:
- Utiliser GNU Parted/GParted: créer une partition FAT32. Placer le drapeau "boot" sur cette partition.
- Utiliser GPT fdisk (aka gdisk): créer une partition avec gdisk de type "EF00". Puis formater cette partition en FAT32 en utilisant mkfs.vfat -F32 /dev/<PARTITION>
Tables de partition MBR
Deux possibilités:
- Utiliser GNU Parted/GParted: créer une partition FAT32. Changer le code type de cette partition à 0xEF en utilisant fdisk, cfdisk ou sfdisk.
- Utiliser fdisk: créer une partition de type 0xEF et la formater en FAT32 avec mkfs.vfat -F32 /dev/<PARTITION>
Monter la partition système UEFI
mkdir -p /boot/efi mount -t vfat <UEFISYS_PART_DEVICE> /boot/efi
Il faut rajouter un répertoire <PARTITION_SYSTEME_UEFI>/EFI:
mkdir -p /boot/efi/EFI
Installation du paquet
Pour savoir quel paquet installer, il vous faut déterminer quelle architecture est employée par votre firmware UEFI :
- Les PCs ont pour la plupart un UEFI 2.x x86_64.
- Pour les macs, vous pouvez lancer la commande suivante pour connaître l'architecture de votre UEFI :
ioreg -l -p IODeviceTree | grep firmware-abi
EFI32 pour i386 et EFI64 pour x86_64.
Sachant cela, reste à installer le paquet approprié:
- Pour le firmware UEFI x86_64:
pacman -S grub-efi-x86_64
- Pour le firmware UEFI i386:
pacman -S grub-efi-i386
Mise en place
La partition système UEFI devra être montée dans /boot/efi/ pour que le script d'installation de GRUB puisse la détecter:
mkdir -p /boot/efi mount -t vfat /dev/sdXY /boot/efi
Installez l'application UEFI GRUB dans /boot/efi/EFI/arch_grub et ses modules dans /boot/grub/x86_64-efi à l'aide de :
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
Vous pouvez maintenant être en mesure de démarrer votre système UEFI après création d'un fichier grub.cfg.
Configuration
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) :
# Config file for GRUB - 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 /vmlinuz-linux root=/dev/sda1 ro
initrd /initramfs-linux.img
}
## (1) Windows
#menuentry "Windows" {
#set root=(hd0,3)
#chainloader +1
#}
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 : noyau à charger.
- initrd /initrd.img : ramdisk à 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 démarrer d'autres systèmes.
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 à Grub la partition root, on utilisera la commande search :
search --fs-uuid --set root 355ccb5c-99e1-400d-b612-451f9247e35e
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 --fs-uuid --set root 355ccb5c-99e1-400d-b612-451f9247e35e
linux /boot/vmlinuz-linux root=/dev/disk/by-uuid/355ccb5c-99e1-400d-b612-451f9247e35e ro
initrd /boot/initramfs-linux.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. Exemple :
menuentry "Arch Linux, session graphique" {
search --label --set root archroot
linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot quiet ro 5
initrd /boot/initramfs-linux.img
}
Arguments additionnels
Options temporaires
Vous pouvez configurer les différentes options de démarrage en modifiant la ligne du menu pendant l'exécution de GRUB. Pour cela, il suffit de se placer sur la ligne que vous vous voulez modifier et appuyer sur e :
setparams 'Arch Linux' set root=(hd0,1) linux /vmlinuz-linux root=/dev/sda3 ro initrd /initramfs-linux.img
Pour démarrer sans le mode graphique par exemple :
setparams 'Arch Linux' set root=(hd0,1) linux /vmlinuz-linux root=/dev/sda3 ro systemd.unit=multi-user.target initrd /initramfs-linux.img
Puis Ctrl-x pour démarrer.
Options permanentes
Si vous n'utilisez pas grub-mkconfig, il suffit de mettre les options voulues dans le fichier /boot/grub/grub.cfg, sinon, vous pouvez modifier la variable GRUB_CMDLINE_LINUX dans /etc/default/grub, sans oublier de regénérer le grub.cfg avec grub-mkconfig (ou éditez directement grub.cfg si vous vous passez de cette utilitaire).
Par exemple, pour l'hibernation, la partition de swap étant /dev/sda5 :
GRUB_CMDLINE_LINUX="resume=/dev/sda5"
ou bien:
GRUB_CMDLINE_LINUX="resume=UUID=xxxxx-xxxx-xxxxxx-xxxxxx"
Configuration du clavier
Par défaut, GRUB utilise un clavier qwerty. Pour que GRUB utilise une autre configuration de clavier, il va falloir générer un fichier de configuration et l'ajouter à GRUB.
Générez un nouveau fichier de configuration clavier
Récupérez le script ckbcomp disponible dans le paquet console-setup pour Debian (grub-kbdcomp en a besoin), le copier dans /usr/bin puis:
grub-kbdcomp -o /boot/grub/fr.gkb fr
Inclure la nouvelle configuration de clavier dans GRUB
Si vous n'utilisez pas grub-mkconfig, il vous faut rajouter :
insmod keylayouts
keymap /boot/grub/fr.gkb
terminal_input at_keyboard
}}
Dans le cas contraire, modifiez les fichiers suivant :
{{file|name=/etc/grub.d/50_keyboard|content=<nowiki>
#!/bin/sh
exec tail -n +3 $0
# Clavier fr
insmod keylayouts
keymap /boot/grub/fr.gkb
GRUB_TERMINAL_INPUT=at_keyboard
Et regénérez la configuration de GRUB :
grub-mkconfig -o /boot/grub/grub.cfg
Démarrer d'autres systèmes
Si vous utilisez grub-mkconfig, vous pouvez soit installer os-prober afin d'avoir une détection automatique des systèmes installés, soit utiliser le fichier /etc/grub.d/40_custom pour y rajouter les systèmes que vous voulez.
Si vous ne l'utilisez pas, rajoutez simplement les entrées au fichier /boot/grub/grub.cfg.
Microsoft Windows
Il faut adapter le disque et la partition ( (hd0,3) ) à votre cas.
menuentry "Windows" {
set root=(hd0,3)
chainloader +1
}
GNU/Linux
Il faut adapter le disque, la partition ainsi que les options du noyau à votre cas.
menuentry "Autre Linux" {
set root=(hd0,2)
linux /boot/vmlinuz root=/dev/sdXY ro
initrd /boot/initrd.img
}
Dépannage
Restaurer GRUB
GRUB peut être installé directement depuis votre système ou depuis un live-cd via Chroot.
Il suffira de relancer les commandes selon votre système : BIOS ou EFI
grub-install échoue
Vous pouvez éventuellement lui rajouter l'option --debug afin d'avoir plus de précision sur la raison de l'échec.