GRUB

De Banane Atomic
Aller à la navigationAller à la recherche

StartUp-Manager (Gestionnaire d'amorçage)

Outils pour configurer Grub.

Configuration

Génération du fichier de configuration

Bash.svg
sudo grub-mkconfig -o /boot/grub/grub.cfg

# installer os-prober pour détecter les systèmes d'exploitations installés sur les autres partitions
sudo pacman -S os-prober

Options

/etc/default/grub
# Sélection du premier (0) élément
GRUB_DEFAULT=0

# Temps d'attente en seconde avant la sélection par défaut
# 0  : sélection sans délai
# -1 : attente de sélection manuelle
GRUB_TIMEOUT=0

# Temps d'attente en seconde avant la pression de la touche Echap
# Utilisé avec GRUB_TIMEOUT=0 : menu affiché seulement si la touche Echap est pressée
GRUB_HIDDEN_TIMEOUT=1
# Masque le compte à rebours
GRUB_HIDDEN_TIMEOUT_QUIET=true

# liste des arguments à ajouter à toutes les entrées. Séparés par des espaces.
GRUB_CMDLINE_LINUX=""

# liste des arguments à ajouter à l'entrée par défaut
GRUB_CMDLINE_LINUX_DEFAULT=""

# Désactive le framebuffer pour GRUB. Commenter pour désactiver
GRUB_TERMINAL_OUTPUT=console

# résolution d'affichage du menu. Plusieurs résolution peuvent être listée, séparées par ',' 
GRUB_GFXMODE=auto

# résolution du texte de boot. Plusieurs résolution peuvent être listée, séparées par ',' 
# keep pour garder la même résolution que celle de GRUB
# text pour mode normal
GRUB_GFXPAYLOAD_LINUX=1440x900x32,text

# couleurs du menu
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="black/blue"

# thème
GRUB_THEME="/boot/grub/themes/starfield/theme.txt"
# thème supplémentaire : grub2-theme-archlinux (AUR)
Regénérez le fichier de configuration après modification du fichier /etc/default/grub

Visual Configuration
Documentation Configuration GRUB 2

Ajouter des entrées supplémentaires

/etc/grub.d/40_custom
# ISO ArchLinux
menuentry "Archlinux-2012.10.06-dual.iso" {
    set isofile="/isoboot/archlinux-2012.10.06-dual.iso"
    loopback loop (hd0,2)$isofile
    linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201210 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
    initrd (loop)/arch/boot/x86_64/archiso.img
}

# ISO SystemRescueCd
menuentry "SystemRescueCd" {
    loopback loop (hd0,2)/isoboot/systemrescuecd-x86-3.1.2.iso
    linux (loop)/isolinux/rescuecd isoloop=isoboot/systemrescuecd-x86-3.1.2.iso
    initrd (loop)/isolinux/initram.igz
}
Régénérez le fichier de configuration après modification du fichier /etc/default/grub

Une autre possibilité est d'utiliser un fichier config qui sera sourcé.
De cette façon il n'est pas nécessaire de régénérer le fichier de configuration de GRUB à chaque modification.

/etc/grub.d/41_custom
#!/bin/sh
cat <<EOF
if [ -f  \${config_directory}/custom.cfg ]; then
  source \${config_directory}/custom.cfg
elif [ -z "\${config_directory}" -a -f  \$prefix/custom.cfg ]; then
  source \$prefix/custom.cfg;
fi
EOF
/boot/grub2/custom.cfg
# ISO SystemRescueCd
menuentry "SystemRescueCd" {
    loopback loop (hd0,2)/isoboot/systemrescuecd-x86-3.1.2.iso
    linux (loop)/isolinux/rescuecd isoloop=isoboot/systemrescuecd-x86-3.1.2.iso
    initrd (loop)/isolinux/initram.igz
}

Clavier fr

Récupérez le script ckbcomp disponible dans le paquet console-setup pour Debian. Et le copier dans /usr/bin.

Bash.svg
# générez un fichier de configuration de clavier pour GRUB
grub-kbdcomp -o fr.gkb fr
# et le copier dans grub
sudo mv fr.gkb /boot/grub

Inclure la nouvelle configuration de clavier dans GRUB :

/etc/grub.d/50_keyboard
#!/bin/sh
echo 'insmod keylayouts'
echo 'keymap /boot/grub/fr.gkb'
/etc/default/grub
GRUB_TERMINAL_INPUT=at_keyboard

Regénérez la configuration de GRUB.

Custom keyboard layout
Howto change the grub2 keymap

Fallback entry vs Normal entry

Sous ArchLinux, 2 entrées seront générées pour chaque noyau : une normale et une fallback.
Elles pointent toutes les 2 sur le même noyau.

  • L'entrée normale charge les MODULES, BINARIES, FILES et HOOKS définis dans le fichier /etc/mkinitcpio.conf
  • L'entrée fallback charge tous les MODULES, BINARIES, FILES et HOOKS par défaut

Kernel parameters

/etc/default/grub
# Déclare sur quelle partition se situe la sauvegarde d'hibernation (suspend-to-disk)
# Ajout de systemd
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda5 init=/bin/systemd"

Normal Shell

Si GRUB rencontre un problème, il passe en mode normal shell

Bash.svg
# Voici l'invite de commande de normal shell
sh:grub>

Rescue Shell

Si GRUB rencontre un problème grave, il passe en mode rescue shell

Bash.svg
# Voici l'invite de commande de rescue shell
grub rescue>

# Charger le shell classique. sda2 = hd0,2
set prefix=(hdX,Y)/boot/grub
insmod (hdX,Y)/boot/grub/i386-pc/normal.mod
normal

# Charger le module linux
set prefix=(hdX,Y)/boot/grub
insmod (hdX,Y)/boot/grub/linux.mod
# booter sur une partition ArchLinux
set root=(hd0,2)
linux /boot/vmlinuz-linux root=/dev/sda2
initrd /boot/initramfs-linux.img
boot

Runlevels

  • 0 – Halt Shuts down the system.
  • 1 – Single-User Mode Mode for administrative tasks.
  • 2 – Multi-User Mode Does not configure network interfaces / services.
  • 3 – Multi-User Mode with Networking Starts the system normally.
  • 4 – Not used/User-definable For special purposes.
  • 5 – Start the system with display manager. As runlevel 3 + display manager.
  • 6 – Reboot Reboots the system.

Installation

Ne pas oublier de générer le fichier de configuration une fois GRUB installé
Bash.svg
grub-mkconfig -o /boot/grub/grub.cfg

BIOS

GPT

Une partition de type ef02 de 1Mio doit être présente dans les premiers 2TiB du disk
Bash.svg
pacman -S grub

grub-install --recheck --target=i386-pc /dev/sdx
grub-mkconfig -o /boot/grub/grub.cfg

MBR

Pas besoin de créer de partition dédiée, GRUB s'installe dans les 440-byte du code d'amorçage du disque.
Bash.svg
pacman -S grub

# ? modprobe dm-mod
grub-install --target=i386-pc /dev/sda
# --target=i386-pc ne fait pas référence aux OS 32 ou 64 bits
# ? --recheck --debug

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

# les 2 commandes suivantes ne semblent pas utiles car /boot/grub/locale/en.mo existe déjà
mkdir -p /boot/grub/locale
cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

UEFI

Bien vérifier que le support de boot est exécuté en UEFI:
Bash.svg
ls -1 /sys/firmware/efi
Bash.svg
# montez la partition UEFI
mkdir -p /boot/efi
mount -t vfat /dev/sda1 /boot/efi

mkdir /boot/efi/EFI

modprobe dm-mod
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub
             --recheck --debug

efibootmgr

Normalement grub-install ajoute une entrée dans le Firmware Boot Manager. Si ce n'est pas le cas, il faut l'ajouter:

Bash.svg
efibootmgr --create --disk /dev/sda --part 1 --write-signature
           --label arch_grub --loader '\EFI\arch_grub\grubx64.efi'

# lister les entrées
efibootmgr -v

# suppression de l'entrée Boot0000
efibootmgr -b 0000 -B
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables
Le support de boot n'a pas été lancé en UEFI.
Pour les CD/DVD live allez dans le bios et passer en tête le lecteur CD/DVD avec la mention UEFI.

Sur une clé USB

Bash.svg
# identifier la clé usb
sudo fdisk -l

# formater la clé (vfat → FAT32)
sudo mkfs.vfat /dev/sdx1

# monter la partition (umask=0 pour donner les droits en écriture)
sudo mount -o umask=0 /dev/sdx1 /media/usb

# installer grub sur la clé usb (attention bien mettre /dev/sdx sans le 1)
grub-install --no-floppy --root-directory=/media/usb /dev/sdx

# ajouter le fichier de configuration
gedit /media/usb/boot/grub/grub.cfg
/boot/grub/grub.cfg
set timeout=-1    # Timeout for menu (-1 attendre indéfiniment)
set default=0     # Set default boot entry as the first one

menuentry "XUbuntu 10.10" {
    insmod loopback     # Load the loopback module
    insmod iso9660      # Load the iso9660 module
    set isofile="/boot/iso/xubuntu.iso"
    loopback loop $isofile      # Make a device from a file
    # Load a Linux kernel image from file
    linux (loop)/casper/vmlinuz iso-scan/filename=$isofile boot=casper quiet splash --
    # Load an initial ramdisk for a Linux kernel image
    initrd (loop)/casper/initrd.lz
}

menuentry "Slitaz 3.0" { 
	set isofile="/boot/iso/slitaz-3.0.iso" 
	loopback loop $isofile 
	# root= défini la partition root
	linux (loop)/boot/bzImage lang=fr_FR kmap=fr-latin1 autologin root=/dev/null 
	initrd (loop)/boot/rootfs.gz 
}

menuentry "Memtest86+" {
	linux16 /boot/memtest86+.bin
}
menuentry "Reboot" { 
	reboot 
} 
menuentry "Shutdown" { 
	halt 
}

linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper quiet splash --

Monter de version de GRUB Legacy vers GRUB 2

Sauvegarde et restauration de GRUB Legacy

Bash.svg
# sauvegarde des fichiers de GRUB Legacy
mv /boot/grub /boot/grub-legacy

# sauvegarde du MBR
dd if=/dev/sda2 of=/path/to/backup/bootcode_backup bs=446 count=1
Bash.svg
# sauvegarde des fichiers de GRUB 2 
mv /boot/grub /boot/grub.nonfunctional

# restauration des fichiers de GRUB Legacy
cp -af /boot/grub-legacy /boot/grub

# restaurer le MBR
dd if=/path/to/backup/bootcode_backup of=/dev/sda2 bs=446 count=1

Backup
Restore GRUB Legacy

Installation

Bash.svg
# installe GRUB 2 et remplace GRUB Legacy (grub)
pacman -S grub-bios

# installer GRUB 2 dans le MBR
modprobe dm-mod
grub-install --target=i386-pc --recheck --debug /dev/sda
mkdir -p /boot/grub/locale
cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

Install to 440-byte MBR boot code region

Configuration

Bash.svg
# créer le fichier de configuration à partir de celui de GRUB Legacy
grub-menulst2cfg /boot/grub-legacy/menu.lst /boot/grub/grub.cfg

Generate GRUB2 BIOS Config file