GRUB : Utiliser le mode rescue shell pour corriger les erreurs de démarrage Linux

Les informations MBR ou UEFI de Grub sont corrects, et au démarrage, votre PC donne bien la main à Grub.
Mais ce dernier affiche un message d'erreur du type :

  • Error: No Such Partition. Entering Rescue Mode
  • unknown filesystem grub
  • /grub/i386-pc/normal.mod’ not found

Cela se produit lorsque les fichiers de configuration GRUB sont manquants, corrompus ou contiennent des erreurs de configuration.

Pour pouvoir continuer de démarrer sur Linux, GRUB dispose d'un shell en mode rescue.
Avec ce dernier vous passez des commandes pour spécifier la partition de démarrage, etc
Cela permet de contourner les problèmes de démarrage dus à une mauvaise configuration de GRUB.

Cet article vous guide pour utiliser le GRUB rescue shell pour corriger les erreurs de démarrage Linux.

GRUB : Utiliser le mode rescue shell pour corriger les erreurs de démarrage Linux

GRUB : le rescue shell pour corriger les erreurs de démarrage Linux

Au besoin, le fonctionnement général de GRUB est décrit dans cet article.
Cela permet de bien comprendre de quoi nous parlons.

Lorsqu'un message d'erreur empêche le démarrage de l'OS par GRUB, ce dernier ouvre le mode rescue.
Par exemple : Error: No Such Partition. Entering Rescue Mode

Error: No Such Partition. Entering Rescue Mode

Cela se produit lorsque la configuration de démarrage est incorrecte ou des fichiers systèmes GRUB sont manquants ou corrompu.
Il donne alors accès au mode rescue, depuis ce dernier vous pouvez restaurer la configuration GRUB.

On accède aussi au mode rescue de GRUB depuis la page de démarrage.
La distribution Ubuntu ou Debian y a donne accès par la touche ESC ou Maj.
Puis on appuie sur la touche c pour ouvrir le mode ligne de commandes de GRUB.

Ce dernier est alors un shell bash minimale.
Vous pouvez notamment indiquer la partition système et le noyau linux sur lequel démarrer.
Ainsi lorsque la configuration de GRUB est erronnée, perdu ou corrompue, cela permet de booter sur Linux.

Les commandes du GRUB rescue shell

La commande help liste toutes les commandes disponible en ligne de commandes sur GRUB.
Il y en a pas beaucoup.

Les commandes du GRUB rescue shell

Voici les principales commandes du shell rescue de GRUB :

CommandesDescriptions
bootDémarrez un noyau Linux ou un chargeur de chaîne qui a déjà été défini
cat filenameAffichez le contenu du fichier spécifié.
configfile filenamesChargez le fichier de configuration spécifié
linux filenameChargez le noyau Linux spécifié
ls [arg]Répertorier les appareils ou les fichiers sur un appareil
lsmodListe des modules chargés
reboot
Redémarrer l'ordinateur
set envvar=valeurDéfinir une variable d'environnement égale à une valeur
initrd filenameChargez le fichier de disque RAM initial spécifié
insmod
module_name
Chargez le module spécifié (pilote).
Les commandes et variables du GRUB rescue shell

La commande set liste les variables d'environnement :

Set liste les variables d'environnements de mode rescue de GRUB

Parmi les plus importantes :

  • set root identifie la partition à partir de laquelle le noyau et le disque RAM initial sont lus
  • set prefix indique le dossier où se trouve les fichiers de configuration grub. En général, /boot/grub mais il faut spécifier le disque car /boot peut se trouver sur une partition séparée de la partition racine /

Naviguer dans les dossiers depuis GRUB rescue shell

On commence par lister les disques :

ls

En mode rescue de Grub, la liste des disques prend la forme suivante : (hdx,y)

Avec :

  • hd0 est le premier disque, hd1 le second, etc
  • en MBR : les disques se nomment msdos : (hdx,msdos1), (hdx, msdos2)
  • En GPT : les disques se nomment gpt : (hdx,gpt1), (hdx, gpt2)

Ce qui fait que hd0,2 correspond au premier disque, 3e partition Grub Legacy.

Au besoin lire :

Puis on vérifie le contenu de chaque partition de disque :

ls (hd0,msdos1)

Exemple avec disque en MBR avec des partitions msdosX :

Naviguer dans les dossiers depuis GRUB rescue shell

Dans cet autre exemple, nous sommes avec un disque GPT soit donc avec un PC en UEFI, où :

  • hd0,gpt1 est formaté en FAT, c'est donc la partition EFI
  • hd0,gpt2 est formaté en ext, c'est donc que notre partition système /

Naviguer dans les dossiers depuis GRUB rescue shell

Ensuite on peut confirmer le contenu de la partition, par exemple pour lister le contenu de hd0,gpt2 :

ls hd0,gpt2/

Cela confirme bien qu'il s'agit de la partition système et que le contenu du dossier /boot est valide avec les différents noyaux Linux disponibles.

Naviguer dans les dossiers depuis GRUB rescue shell

Enfin l'affichage d'un contenu avec la commande cat.
Par exemple pour afficher le contenu du le fichier /boot/grub/grub.cfg

cat hd0,gpt2/boot/grub/grub.cfg
Naviguer dans les dossiers depuis GRUB rescue shell

Ces commandes permettent donc de naviguer dans vos partitions de disques et afficher le contenu des fichiers.
Cela peut vous aider à déterminer si la partition système est valide ou corrompue et endommagée.
A partir de là, une fois l'environnement identifié, on peut passer des commandes pour démarrer son Linux depuis le mode rescue de Grub.

Démarrer sur Linux depuis Grub Rescue en cas d'erreur

Dans notre exemple, la partition système est hd0,gpt2.
Il faut donc demander à booter sur cette dernière.

Pour cela on corrige les variables boot et prefix à l'aide de set.
Puis on demande un démarrage normal.

set boot=(hd0,gpt2)
set prefix=(hd0,gpt2)/boot/grub
insmod normal
normal
Démarrer sur Linux depuis Grub Rescue en cas d'erreur

Si tout va bien cela permet de démarrer sur votre Linux pour dépanner.
Par contre, cela ne répare pas GRUB si la configuration est erronée, il faut la corriger par la suite.

Note que l'on peut aller plus loin en spécifiant le noyau linux sur lequel charger grâce aux commandes linux et initrd :

set boot=(hd0,gpt2)
linux (hd0,gpt2)/boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
initrd (hd0,gpt2)/boot/initrd.img-3.13.0-29-generic
boot

Réparer GRUB après le démarrage de l'OS

Enfin une fois sur votre Linux, il ne reste plus qu'à réinitialiser GRUB.

On réinstalle grub dans le disque avec grub-install.
Attention cette commande ne restaure pas les fichiers corrompus ou supprimés.

sudo grub-install /dev/sdX

Remplacez X par la lettre du disque où se trouve /boot.
Vous pouvez lister les disques à l'aide de la commande lsblk.
Plus de détails :

Enfin on met à jour la configuration de grub avec update-grub :

sudo update-grub
Réparer GRUB après le démarrage de l'OS

Enfin testez si le démarrage de votre Linux est réparé et à nouveau fonctionnel.

Tags:,