Séquence d'amorçage
Introduction
Ce chapitre a pour objectif d’étudier la séquence d’amorçage du système d’exploitation Linux.
Processus d’amorçage
Lorsque vous allumez un ordinateur, le processus de démarrage se réalise en plusieurs phases :
-
Le BIOS effectue un POST (Power-On Self Test) pour vérifier le bon fonctionnement du matériel.
-
Le MBR (Master Boot Record), situé dans le 1er secteur du disque qui est bootable, va exécuter le chargeur d’amorçage (bootloader) GRUB. Quant aux systèmes x86 basés sur UEFI, ils montent une partition système EFI qui contient une version du chargeur de démarrage GRUB. Le gestionnaire de démarrage EFI charge et exécute GRUB comme une application EFI.
-
Le chargeur d’amorçage GRUB (Grand Unified Bootloader) version 2 propose dans un écran d’accueil (splash screen) de choisir le noyau Linux à amorcer si, bien sûr, votre système en contient plusieurs. Un délai de quelques secondes vous permet d’effectuer le choix sinon, le processus de démarrage continue avec les paramètres définis par défaut dans le fichier de configuration de GRUB.
-
Grub charge ensuite le noyau vmlinuz et l’image initrd (INITial RamDisk) qui utilise le système de fichiers initramfs. Le noyau Linux initialise les périphériques par le biais des pilotes, démarre le processus noyau kswapd qui est le gestionnaire de swap. Il monte ensuite la racine...
GRUB 2
Debian 9 et RHEL 7 utilisent GRUB version 2.
Les commandes pour Debian commencent par grub- et pour Red Hat grub2-.
1. Identifier la version de GRUB
Syntaxe
grub-install <option>
Option nécessaire :
Option |
Description |
|
courte |
longue |
|
-v |
--version |
Affiche la version. |
Exemple avec Debian
Afficher la version de GRUB :
root@system1:~# grub-install -V
grub-install (GRUB) 2.02~beta3-5
Exemple avec Red Hat
Afficher la version de GRUB :
[root@system2 ~]# grub2-install -V
grub2-install (GRUB) 2.02~beta2
2. Fichiers de configuration
Le fichier contenant les paramètres du menu est /etc/default/grub. Il peut varier légèrement d’une distribution à l’autre.
root@system1:~# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel
that obtains
# the memory map information from GRUB (GNU Mach, kernel of
FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card
supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx"
parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Voici la signification de ces directives :
Directive |
Description |
GRUB_DEFAULT=<valeur> |
Définit... |
L’unité cible (target)
Au démarrage du système, lorsque le contrôle est transféré de initramfs à systemd, ce dernier tente d’activer la cible par defaut : default.target. Elle doit correspondre à un lien symbolique figurant dans le répertoire /etc/systemd/system/ vers graphical.target (environnement graphique) ou multi-user.target (ligne de commandes).
1. Gestion de la cible par défaut
La commande systemctl permet d’afficher la cible par défaut :
[root@system2 ~]# systemctl get-default
multi-user.target
La modification de la cible par défaut nécessite de choisir un environnement :
[root@system2 ~]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to
/usr/lib/systemd/system/graphical.target.
Ou bien :
[root@system2 ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to
/usr/lib/systemd/system/multi-user.target.
Vous pouvez changer la cible actuelle immédiatement avec l’option isolate de la commande systemctl. Par exemple, basculer dans l’environnement graphique :
[root@system2 ~]# systemctl isolate graphical.target
Seules les cibles dont les fichiers d’unité présentent la ligne AllowIsolate=yes peuvent être isolées :
[root@system2 ~]# cat /usr/lib/systemd/system/multi-user.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
Répertorier toutes les unités de cible actuellement chargées :
[root@system2 ~]# systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION ...
Sauver et restaurer le MBR
Pour réaliser la sauvegarde du MBR du disque /dev/sda dans le fichier mbr.backup, utilisez la commande dd :
root@system1:~# dd if=/dev/sda of=mbr.backup bs=512 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 0,000370438 s, 1,4 MB/s
Pour restaurer le MBR du disque /dev/sda depuis le fichier mbr.backup :
root@system1:~# dd if=mbr.backup of=/dev/sda bs=512 count=1
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 0,000245556 s, 2,1 MB/s
GRUB peut également récupérer automatiquement le MBR en invoquant grub-install pour Debian ou grub2-install pour Red Hat.
Syntaxe
grub-install <disque>
Pas d’options pour cette commande.
Exemple avec Debian
root@system1:~# grub-install /dev/sda
Installation finished. No error reported.
Vous devez redémarrer votre ordinateur pour tester la séquence d’amorçage avec le MBR récupéré.
Le journal du boot
La commande journalctl permet d’analyser le boot.
[root@system2 ~]# journalctl -b
-- Logs begin at mar. 2018-12-04 21:29:58 CET, end at mer.
2018-12-05 06:30:01 CET. -
déc. 04 21:29:58 system2.staff.local systemd-journal[88]: Runtime
journal is using 8.0M (max allowed 99.9M, trying to leave 149.9M free
of 991.8M available → current limit 99.9M).
déc. 04 21:29:58 system2.staff.local kernel: Initializing cgroup
subsys cpuset
déc. 04 21:29:58 system2.staff.local kernel: Initializing cgroup
subsys cpu
déc. 04 21:29:58 system2.staff.local kernel: Initializing cgroup
subsys cpuacct
déc. 04 21:29:58 system2.staff.local kernel: Linux version 3.10.
0-862.14.4.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc
version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Sep 26
15:12:11 UTC 2018
*** Sortie tronquée ***
Vous disposez également dans le dossier /var/log du fichier journal boot.log :
[root@system2 ~]# cat /var/log/boot.log
Nov 21 22:44:39 system2 NET[14696]: /usr/sbin/dhclient-script : updated /etc/resolv.conf
[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Reached target Paths.
[ OK ] Reached target Basic System.
[ OK ] Found device /dev/mapper/sysVG-root.
Starting File System Check on /dev/mapper/sysVG-root... ...
Exercice
Vous allez utiliser la machine virtuelle CentOS 7.
1. Modifiez le délai du menu GRUB à 1 minute de façon permanente.
2. Redémarrez le système pour vérifier.