GRUB
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.
Sommaire |
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
- 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
parted /dev/disk set partition-number bios_grub on
# fdisk -l /dev/sda[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 63 257039 128488+ 83 Linux [...]
(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
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 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
#}
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
# (2) Windows XP
menuentry "Windows XP" {
set root=(hd0,3)
chainloader +1
}
GNU/Linux
Ceci est géré de la même manière que pour Archlinux:
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)
}
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
}