Récupérer un Grub cassé avec un CD live et chroot

Parfois le démarrage de Linux est cassé, on peut toujours investiguer avec un CD live et la commande chroot

Environnement

PC sous Linux Debian 10 Buster

Mise en oeuvre

1- je considère que vous avez la connaissance de votre installation existante, exemple je sais que Debian est sur /dev/sda1 de mon disque dur
2- le Live cd Debian que j’ai utilisé est téléchargé ici

  • Le live cd a bien booté, vous réussissez à ouvrir un terminal dont le prompt est
    user@debian:~$
  • Ah dans la précipitation, vous n’avez pas pensé au clavier et vous vous retrouvez en QWERTY, pour le mettre en AZERTY:

user@debian:~$ setxkbmap fr

Pour cela il faut appuyer sur les touches setxkb,qp fr

  • Vérification de l’état des partitions
user@debian:~$ sudo fdisk -l

Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00038c4c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1            2048  19531775  19529728   9.3G 83 Linux
/dev/sda2  *     19533822 625141759 605607938 288.8G  5 Extended
/dev/sda5        19533824  35237887  15704064   7.5G 82 Linux swap / Solaris
/dev/sda6        35239936 594421759 559181824 266.7G 83 Linux
/dev/sda7       594423808 625141759  30717952  14.7G 83 Linux

Disk /dev/loop0: 829.6 MiB, 869924864 bytes, 1699072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • Dans mon cas le flag boot n’est pas sur la bonne partition, je le veux sur /dev/sda1
user@debian:~$ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00038c4c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1            2048  19531775  19529728   9.3G 83 Linux
/dev/sda2  *     19533822 625141759 605607938 288.8G  5 Extended
/dev/sda5        19533824  35237887  15704064   7.5G 82 Linux swap / Solaris
/dev/sda6        35239936 594421759 559181824 266.7G 83 Linux
/dev/sda7       594423808 625141759  30717952  14.7G 83 Linux


Command (m for help): a
Partition number (1,2,5-7, default 7): 1

The bootable flag on partition 1 is enabled now.
  • on revérifie
Command (m for help): p
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00038c4c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048  19531775  19529728   9.3G 83 Linux
/dev/sda2  *     19533822 625141759 605607938 288.8G  5 Extended
/dev/sda5        19533824  35237887  15704064   7.5G 82 Linux swap / Solaris
/dev/sda6        35239936 594421759 559181824 266.7G 83 Linux
/dev/sda7       594423808 625141759  30717952  14.7G 83 Linux
  • On le retire de /dev/sda2
Command (m for help): a
Partition number (1,2,5-7, default 7): 2

The bootable flag on partition 2 is disabled now.

Command (m for help): p
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00038c4c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048  19531775  19529728   9.3G 83 Linux
/dev/sda2        19533822 625141759 605607938 288.8G  5 Extended
/dev/sda5        19533824  35237887  15704064   7.5G 82 Linux swap / Solaris
/dev/sda6        35239936 594421759 559181824 266.7G 83 Linux
/dev/sda7       594423808 625141759  30717952  14.7G 83 Linux
  • Nickel on écrit ça sur le disque
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

user@debian:~$ sudo fdisk -l

Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00038c4c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048  19531775  19529728   9.3G 83 Linux
/dev/sda2        19533822 625141759 605607938 288.8G  5 Extended
/dev/sda5        19533824  35237887  15704064   7.5G 82 Linux swap / Solaris
/dev/sda6        35239936 594421759 559181824 266.7G 83 Linux
/dev/sda7       594423808 625141759  30717952  14.7G 83 Linux

Disk /dev/loop0: 829.6 MiB, 869924864 bytes, 1699072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • On verifie le MBR
user@debian:~$ sudo dd if=/dev/sda bs=512 count=1 | strings
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000385737 s, 1.3 MB/s
RPf1
Missing operating system.
f`f1
|fRfP
Ht[y9Y[
Multiple active partitions.
|XFSBu	f
Operating system load error.
  • C’est pas bon c’est pas marqué GRUB dedans
  • On chroot
user@debian:~$ sudo mkdir /mnt/chroot

user@debian:~$ sudo mount /dev/sda1 /mnt/chroot
user@debian:~$ sudo mount --bind /dev/ /mnt/chroot/dev
user@debian:~$ sudo mount -t proc /proc /mnt/chroot/proc

user@debian:~$ sudo mount -t sysfs /sys /mnt/chroot/sys

user@debian:~$ sudo chroot /mnt/chroot
root@debian:/# 
  • Là vous notez que le prompt à changé, c’est devenu root@debian:/#
  • On réinstalle grub
root@debian:/# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
root@debian:/# 
  • Et voilà!
  • si besoin est vous pouvez verifier /boot/grub/grub.cfg et si vous ne le trouvez pas saisfaisant faire update-grub
  • On relit le MBR
root@debian:/boot/grub# dd if=/dev/sda bs=512 count=1 | strings
1+0 records in
1+0 records out
512 bytes copied, 0.000205447 s, 2.5 MB/s
RPf1
ZRr=
`|f	
\|f1
GRUB 
Geom
Hard Disk
Read
 Error
  • c’est bien écrit GRUB, ça sent meilleur :joy:

En tout cas ça ma sauvé et j’ai rebooter tranquille sur Debian

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.