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>
Grub s'installe dans le MBR du disque sur lequel on installe Ubuntu.
Le réinstaller à son emplacement par défaut, avec sudo grub-install /dev/sda.
Lancer la commande grub-install en mode admin (sudo).
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..
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.
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)…
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.
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)
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 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.
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
sudo fdisk -l
# pour vous aider à trouver la partition sur laquelle est votre ubuntu
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
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.
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
# 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…
Grub2 ne prend pas forcément en charge l'ext4. Il faut tester, pas de soucis sur Ubuntu à partir de la karmic.
linuxpedia grub-pc Sur ce site Multiboot facile avec Grub mots-clés :multiboot_grub
linux averti grub2 dépanner réinstaller