GRUB2 : GRand Unified Bootloader, version 2
LORSQUE votre système d'exploitation GNU/Linux ne parvient plus à se lancer au démarrage de la machine, il est parfois possible de lancer le système «à la main», en quelques commandes, si le bootloader GRUB2 a été installé!
1. Comment invoquer le shell GRUB
Après l'éventuel mot de passe permettant l'accès aux disques en début d'allumage, un menu apparaît pour choisir le système d'exploitation à lancer. C'est à ce moment que frapper la touche [c] permet d'accéded à l'invite grub>.
grub>
Clavier
Attention! À ce moment, aucun clavier n'a été chargé : grub fonctionne donc avec le clavier par défaut US-english :
` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Back | ||||||||||||||||
Tab | q | w | e | r | t | y | u | i | o | p | [ | ] | Ent | ||||||||||||||||
Caps | a | s | d | f | g | h | j | k | l | ; | ' | \ | er | ||||||||||||||||
Sft | < | z | x | c | v | b | n | m | , | . | / | Sft | |||||||||||||||||
Ctrl | W | A | Space | A | M | Ctrl |
Avec la touche [Majuscule] :
~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | Back | ||||||||||||||||
Tab | Q | W | E | R | T | Y | U | I | O | P | { | } | Ent | ||||||||||||||||
Caps | A | S | D | F | G | H | J | K | L | : | " | | | er | ||||||||||||||||
Sft | > | Z | X | C | V | B | N | M | < | > | ? | Sft | |||||||||||||||||
Ctrl | W | A | Space | A | M | Ctrl |
En résumé, par rapport à un clavier AZERTY, [a] et [q] sont intervertis, [z] et [w] également, et [m] se trouve à la droite de [n] ; c'est surtout la ponctuation qui diffère.
Aide à la saisie
Dans les commandes qui suivent, il ne sera pas nécessaire de saisir le nom entier d'un répertoire ou d'un fichier : s'il existe, il s'auto-complétera avec [Tab] après la saisie de quelques lettres.
Il est possible de réutiliser une commande précédente avec la flèche du haut et de s'y promener avec la flèche gauche, la droite, effacer avec [Backspace] et [Delete] et y insérer du texte.
Les éventuels noms de fichier et de répertoire contenant des espaces doivent être entourés de guillemets.
2. Explorer les disques en présence
La commande ls suffit pour explorer les différents disques installés sur l'ordinateur. Utilisée seul, elle décrit les disques accessibles.
grub> ls (fd0) (hd0) (hd0,msdos5) (hd1) (hd1,gpt1)
…avec pour conventions de nommage:
- fd pour disquettes (floppy disk)
- hd indifféremment pour disques durs Atapi/IDE ou SCSI
- cd pour CD?
- 0, 1, 2… selon la place qu'ils occupent dans le BIOS, en commençant avec 0 (ou a, b, c… pour un système BSD)
- msdos pour les partitions identifiées «à l'ancienne», cela n'a rien à voir avec le formatage de la partition
- gpt pour les identifiants longs, Globally (Unique Identifiers) Partition Table
- 1, 2, 3 ou 4 pour les partition primaires
- 5, 6, 7… 16 pour les partitions étendues
La commande ls permet également d'obtenir des informations sur un disque dur en entier ou sur chacune de ses partitions:
grub> ls (hd0) informe sur le premier disque dur : Master Boot Record et taille du disque. Exemple d'un portable avec un seul disque dur et boot multiple Windows (partitions 1 à 3) et Debian (partitions 5 à 7):
grub> ls (hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
grub> ls (hd1,1) informe sur la première partition (,1) du second disque dur (hd1,) : type, taille. Exemples avec une partition «windows» et une partition «linux».
grub> ls (hd0,1) Partition hd0,1 : Type de fichier ntfs - Etiquette «Réservé au système» - Dernière date de modification Samedi 2019.02.22 17h:23:45 - UUID b91d9629-a4c5-6a96-aae9-400de4403252 - La partition commence à 1024 Kio - Taille totale de 756000 Kio grub> ls (hd0,6) Partition hd0,6 : Type de fichier ext* - Dernière date de modification Vendredi 2019.02.21 18h:43:52 - UUID d4c96929-b51a-69a6-dee9-403a04254a02 - La partition commence à 82000000 Kio - Taille totale de 126600000 Kio
La commande ls permet encore de lister les répertoires d'une partition (barre oblique obligatoire):
grub> ls (hd0,1)/ liste les éventuels répertoires de la première partition d'un premier disque. Le premier exemple suivant est une partition Windows, le second Linux (les réponses ne sont pas exhaustives):
grub> ls (hd0,2)/ $Secure $Boot $AttrDef $MFT $Upcase $Volume Recovery grub> ls (hd0,6)/ boot/ dev/ etc/ home/ lib/ media/ mnt/ proc/ root/ run/ sys/ tmp/ usr/ var/ vmlinuz initrd.img
…où la barre oblique finale marque les répertoires.
grub> ls (hd0,3)/toto liste les éventuels sous-répertoires de /toto s'il existe
La commande cat permet de visualiser un fichier, en l'occurrence la version de la distribution GNU/Linux, si la partition précisée est une partition racine:
grub> cat (hd0,2)/etc/issue Debian GNU/Linux 10 \n \l
Tout cela doit permettre de repérer les partitions du système d'exploitation recherché et toute éventuelle partition consacrée au répertoire /boot.
3. Séquence de boot
Pour définir et monter une partition système / située sur la troisième partition primaire du premier disque (set ne semble pas obligatoire):
grub> set root=(hd0,3)
Attention : le nom de fichier vmlinuz-4.19.0-5-amd64 est à adapter selon la version du noyau disponible sur le système, c'est à cela que sert ls !
3.1 /boot est sur la partition racine /
La commande linux
La commande linux permet de fixer l'endroit de l'image linux à charger (rappel : [Tab] pour l'auto-complétion).
grub> linux (hd0,3)/boot/vmlinuz-4.19.0-5-amd64 root=/dev/sda3
…où root=/dev/sda3 — et non root=(hd0,3) ! — est un paramètre passé à l'image vmlinuz (certains ajoutent encore ro (read-only).
commande initrd
La commande initrd fixe l'endroit du ramdisk initial à charger (rappel : [Tab] pour l'auto-complétion).
grub> initrd (hd0,3)/boot/initrd.img-4.19.0-5-amd64
Note: initrd peut nécessiter des modules, disponibles en /boot/grub/i386-pc
3.2 /boot est sur la partition autonome
Il se peut (certains l'encouragent) qu'une partition soit consacrée à /boot, par exemple la seconde.
La commande linux
La commande linux permet de fixer l'endroit de l'image linux à charger (rappel : [Tab] pour l'auto-complétion).
grub> linux (hd0,2)/vmlinuz-4.19.0-5-amd64 root=/dev/sda3
…où root=/dev/sda3 — et non root=(hd0,3) ! — est un paramètre passé à l'image vmlinuz. Certains ajoutent encore ro (read-only).
commande initrd
La commande initrd fixe l'endroit du ramdisk initial à charger (rappel : [Tab] pour l'auto-complétion).
grub> initrd (hd0,2)/initrd.img-4.19.0-5-amd64
Note: initrd peut nécessiter des modules, disponibles en /boot/grub/i386-pc
boot
La commande boot lance enfin GNU/Linux (ou un éventuel autre système d'exploitation – je n'en dispose pas : pas pu tester) :
grub> boot
Une fois booté, # grub-install /dev/sda devrait réinstaller sur le premier disque dur un grub bootable (pas /dev/sda1 qui signifierait la première partition), avec les indications qui ont manifestement permis de lancer votre système.
4. Exemples
4.1 /boot est un répertoire de la partition /
Exploration de l'ensemble des systèmes de fichiers d'un ordinateur (les explications suivent les réponses aux commandes):
grub> ls (hd0) (hd0,msdos4) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
…grub2 a trouvé un disque dur contenant quatre partitions primaires.
grub> ls (hd0,msdos1)/ Aucun système de fichiers connu détecté - La partition commence à 1024 Kio - Taille totale de 3850000 Kio
…aucun système de fichiers lisible sur une partition de 4Go, il s'agit probablement d'une partition d'échange swap.
grub> ls (hd0,msdos2)/ boot/ dev/ etc/ home/ lib/ media/ mnt/ root/ sbin/ usr/ var/
…la seconde partition contient un ensemble de répertoires, typique d'un système UNIX : il s'agit plus que probablement d'une partition système.
grub> cat (hd0,msdos2)/etc/issue Debian 10 Buster \n \l
…récupération du nom et du numéro de version majeure de la distribution
grub> cat (hd0,msdos2)/etc/debian_version 10.3
…récupération du numéro complet de version d'une distribution Debian
grub> cat (hd0,msdos2)/boot/ grub/ initrd.img-4.19.0-5-amd64 vmlinuz-4.19.0-5-amd64 …
…vérification de la présence des fichiers nécessaires dans le répertoire /boot
grub> ls (hd0,msdos3)/ nana/ toto/
…la présence d'au moins un répertoire ressemblant à un nom de compte est le signe d'une partition /home
grub> ls (hd0,msdos4)/ videos/ photos/ mp3/…semble une partition de données supplémentaires.
Ces données nous montrent un système (racine / et /boot) concentré que la seconde partition (n'oubliez pas l'auto-complétion):
grub> set root=(hd0,2) grub> linux (hd0,2)/boot/vmlinuz-4.19.0-5-amd64 root=/dev/sda2 ro grub> initrd (hd0,2)/boot/initrd.img-4.19.0-5-amd64 grub> boot
4.2 /boot est sur une partition autonome
grub> ls (hd0,2) (hd0,msdos4) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
grub> ls (hd0,msdos1)/ [message d'erreur]
…aucun système de fichier lisible sur cette partition, il peut s'agir d'une partition d'échange swap.
grub> ls (hd0,msdos2)/ grub/ vmlinuz-4.19.0-5-amd64 initrd.img-4.19.0-5-amd64
…la seconde partition contient les deux fichiers nécessaire au boot.
grub> ls (hd0,msdos3)/ boot/ dev/ etc/ home/ lib/ media/ mnt/ root/ usr/ var/
…la troisième partition contient un ensemble de répertoires, typique d'un système UNIX : il semble s'agir d'une partition système. Le fait que /boot soit présent ne veut pas dire que le répertoire contienne les fichiers vm [Tab] et init [Tab] ; c'est là que se montera la partition /boot si le fichier /etc/fstab en dispose ainsi.
grub> cat /etc/fstab … /dev/sda3 /boot ext4 defaults …
…ce dont il semble.
grub> cat (hd0,msdos3)/etc/issue Debian 10 Buster \n \l
…distribution Debian
grub> ls (hd0,msdos4)/ nana/ toto/
…la présence d'au moins un répertoire ressemblant à un nom de compte est le signe d'une partition /home.
Il en résulte que les partitions nécessaires sont la deuxième (/boot) et la troisième (racine : /):
grub> set root=(hd0,3) grub> linux (hd0,2)/boot/vmlinuz-4.19.0-5-amd64 root=/dev/sda3 ro grub> initrd (hd0,2)/boot/initrd.img-4.19.0-5-amd64 grub> boot
5. Modifier GRUB sur un système fonctionnant
Le fichier /boot/grub.cfg ne doit pas être édité : il est généré par la commande grub-mkconfig ou update-grub en utilisant les scripts contenus dans /etc/grub.d et le fichier de configuration /etc/default/grub, le seul à être éditable par des humains.
À suivre…