Dépanner Grub2

Suite à la modification (ajout, suppression de partitions) de la table des partitions, il peut arriver que grub ne retrouve pas ses petits. C'est le cas si on a supprimé une partition qui avait un numéro antérieur à celui de la partition de notre système.

Depuis que les distributions linux ont intégré Grub-PC,(karmic à partir d'ubuntu 9.10), en cas de problème, on obtient un écran en bash ( ligne de commande)

grub rescue> 

Plan

Grub non planté

  • Rappel de la commande de réinstallation de grub.
  • Comment le réinstaller sur le MBR, sur la partition système.

Grub planté

  • Dépannage temporaire grub rescue>
  • Dépannage définitif en chrootant depuis un live CD

Rappels

Grub par défaut

Grub s'installe dans le MBR du disque sur lequel on installe Ubuntu.

Réinstaller dans le MBR

Le réinstaller à son emplacement par défaut, avec sudo grub-install /dev/sda.

Lancer la commande grub-install en mode admin (sudo).

Grub dans la partition système

Il s'agit de forcer l'install de grub dans la partition système.

Faire un fdisk -l afin de connaître les partitions présentes sur le disque.Si ubuntu est sur la 2, il faut remplacer x par 2 dans la commande suivante.

    sudo grub-install /dev/sdax

En procédant de la sorte, il faudra absolument utiliser un chargeur de démarrage, GAG par exemple.

En mode recovery (au démarrage), on reçoit l' avertissement suivant:

/usr/sbin/grub-setup: warn: Tentative d'installation de GRUB sur une partition au lieu du MBR. Mauvaise idée..

Dépannage provisoire avec grub rescue

Prérequis

Lorsqu'on travaille avec plusieurs partitions, il est bien d'avoir une connaissance précise des partitions de ses disques durs. cela peut être fait simplement en réalisant une copie d'écran depuis Gparted (Alt+ImpEc) que l'on nous propose d'enregistrer où l'on veut! Une copie vers un support externe permet, le jour où le système ne démarre plus, de la lire depuis un autre PC.

Il faut aussi connaître la position actuelle de notre partition système linux. C'est possible grâce à un live-CD de notre distribution préférée (système/Administration/Gparted, ou un live-CD de gparted. On aura quelque chose du type dev/sdaX, ou sdbX s'il existe un second disque dans la machine.

La comparaison des deux schémas de partitionnement nous permettra de savoir dans quel sens le décalage s'est fait.

Mise en oeuvre

Il peut arriver en cas de corruption majeure du secteur de démarrage qui contient grub stage 1, ou du premier secteur de la partition système linux qui comprend grub stage 2, que ces commandes fonctionnent de façon erratique, voir la variante possible pour root avec le signe = ci-dessous.

Rappel: en mode rescue de grub, on voit la console avec cette ligne

 grub:rescue>

Taper la commande set donne les informations suivantes:

prefix=(hd0,7)/boot/grub
root=hd0,7

Il s'agit d'une partition système linux située dans une partition logique (la 3°) du premier disque dur(0)…

Pourquoi la troisième partition ? N'oublions pas qu'il y a 4 partitions principales dont une étendue qui est en principe sda4, mais ce peut être sdax (x vaut de 2 à 4), si la partition étendue a été créée à la place d'une partition principale depuis un live CD de GPARTED . La première partition logique commence à sda5, la seconde sda6 et la troisième est bien sda7 !

Si l'on a supprimé une partition précédant notre install Linux, on devra donc remplacer le 7 par le 6 !

Cela se fait en tapant:

set root(hd0,6)

et

set prefix=(hd0,6)/boot/grub 

On peut vérifier la modification en retapant la commande set.

Variantes possibles

La syntaxe peut parfois utiliser le signe égal = suivi sans parenthèses de hd, puis des parenthèses contenant les chiffres.

  set root=hd(0,5)
Ah oui, on est en clavier anglais ! Damned !

Le clavier anglais

prefix=(hd0,7)

le = est le même.

ouvrir les parenthèses se fait en combinant MAJ et la lettre ç (chiffre 9).

fermer les parenthèses se fait en combinant MAJ et la lettre à (chiffre 0).

les chiffres sur un portable se font directement (pas de combinaison).

la virgule est au point virgule de chez nous.

le m est à la place de la virgule.

le point est au :

le / est au !

le ; au m

le moins - est au °

Puis

insmod normal

ce qui nous donne accès à une nouvelle page de la console. Il faut entrer

normal

et notre menu de grub réapparaît !

Rappel: En cas de corruption majeure de la table des partitions, il arrive que le bash basique de grub rescue ne fonctionne pas !

ls

ls nous donne la liste des partitions présentes sur le disque. Si (hd0,3) est absente (partition étendue), celle-ci est possiblement corrompue. Il faudra alors utiliser testdisk.

Dépannage définitif

Afin de ne pas avoir à retaper tout ce qui précède, il va falloir modifier durablement grub, afin qu'il soit conforme à notre nouvelle table de partition. En console, taper:

sudo update-grub

Chrooter depuis un live-CD -1

C'est la version allégée du site ubuntu.fr, décidément bien pratique.
sudo fdisk -l

# pour vous aider à trouver la partition sur laquelle est votre ubuntu

Remplacer le X par le numéro obtenu sur votre configuration
sudo mount /dev/sdaX /mnt

# montage de celle-ci en remplaçant le X par le bon numéro de partition

sudo mount --bind /dev /mnt/dev

# lien symbolique du dossier /dev en cours d'utilisation vers le disque monté

sudo mount -t proc /proc /mnt/proc

# Pour que Grub2 trouve /proc/mounts

sudo chroot /mnt

# mise à la racine du disque monté

apt-get install grub-pc

# installation du logiciel Grub2 (sur le disque maintenant à la racine)

update-grub

# création d'un nouveau fichier de configuration : grub.cfg

grub-install /dev/sda

# installation de grub sur le MBR

Si l'on veut installer grub ailleurs que sur le mbr (car on a un chargeur de boot tel que GAG), il faudra entrer le chemin de la partition système linux (par exemple), donc
grub-install /dev/sdaX

où X est le numéro de cette partition.

A partir de là, vous pouvez sortir du disque monté en effectuant CTRL+D. Puis, démontez ce disque :

sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt

Redémarrez et vous devriez, à présent, être capable de booter correctement.

Chrooter depuis un live-CD - 2

C'est la version détaillée du site linuxpedia.fr.

Si vous n'atteignez même pas le shell de secours de grub2, il vous reste la solution du “chroot”. Cela consiste à obtenir un shell sur le système cible (celui que vous n'arrivez plus à démarrer) depuis un autre système (live-cd par exemple).

Le “chroot” va vous permettre de réinstaller grub2, modifier sa configuration, etc… comme si vous agissiez depuis le système cible.

Vous devez donc démarrer sur un live-cd (ou utiliser un autre système installé si vous êtes en multi-boot), et créer un répertoire qui va accueillir le système cible :

# mkdir /mnt/cible
Esuite vous allez monter le système cible sur ce répertoire.Pour avoir une bonne “vision” de la numérotation de vos partitions vous pouvez utiliser (au choix) :
 # fdisk -l # parted -l 

ou Gparted en mode graphique !

Une fois identifiée la partition racine du système cible (ici on utilisera ”/dev/sda2”), montez là :

# mount /dev/sda2 /mnt/cible

Si la partition ”/boot” est déjà montée sur le système cours d'utilisation (cas du multiboot), vous pouvez soit la démonter avant de la remonter sur le système cible, soit utiliser l'option ”–bind” de la commande “mount” (voir ci-dessous).

Enfin vous devez rendre accessible au système cible l'ensemble des périphériques, ce qui est fait en montant le répertoire ”/dev” du système en utilisation (le live-cd par exemple). Comme ”/dev” est normalement déjà monté une première fois sur le système en cours d'utilisation, on utilise l'option ”–bind” de la commande “mount” qui permet de remonter sur un second point de montage un système de fichier déjà monté :

# mount –bind /dev /mnt/cible/dev

On peut également utiliser la notation “mount -o bind”, le ”-o” indiquant une option.

Voila, il ne vous reste plus qu'à exécuter le “chroot” proprement dit :

# chroot /mnt/cible/

À partir de maintenant les commandes exécutées dans la console agissent sur le système cible, et non plus sur le système en cours d'utilisation (live-cd etc…). On peut donc réinstaller grub2 sans problème (ici on imagine qu'il doit être réinstallé sur le secteur d'amorçage (“MBR”) du premier disque) :

# grub-install /dev/sda

N'oubliez pas de mettre à jour le grub.cfg par la suite avec, au choix :

# update-grub2 # grub-mkconfig -o /boot/grub/grub.cfg

Vous pouvez également éditer la configuration de grub2, par exemple si vous devez éditer le fichier /etc/default/grub il vous suffit de taper :

# nano /etc/default/grub ou gedit à m aplace de nano…

Pour quitter le “chroot”, tapez simplement “exit” dans la console, ou utilisez la combinaison de touche [ctrl][c].

Si par (excès de) sécurité vous voulez démonter les partitions du système cible avant de redémarrer, utilisez simplement “umount” :

# umount /mnt/cible/dev # unmount /mnt/cible/boot # umount /mnt/cible

C'est fini, il ne vous reste qu'à redémarrer pour tester vos modifications, et croiser les doigts… ;-)

Utilitaires de récupération

  • Super Grub Disk (alias “SGD”) supporte grub2 dans ses version 1.x.
  • Le polyvalent System Rescue CD intègre Super Grub Disk (“rescue floppy”) parmi les options de démarrage (tapez grubdisk à l'invite de démarrage).
  • Ubuntu “Karmic Koala” utilise par défaut grub2, un live-cd de cette distribution pourra donc être un bon outil de récupération.

ext4 et grub2

Grub2 ne prend pas forcément en charge l'ext4. Il faut tester, pas de soucis sur Ubuntu à partir de la karmic.

liens

linuxpedia grub-pc Sur ce site Multiboot facile avec Grub mots-clés :multiboot_grub

depanner_grub.txt · Dernière modification: 2012/05/08 13:16 (modification externe)
GNU Free Documentation License 1.3
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5