Réparer Grub en chroot

identifier les partitions

chercher si EFI:

[ -d /sys/firmware/efi ] && echo "EFI boot" || echo "MBR/Legacy boot"

lister les partitions

fdisk -l` pour identifier votre système

exemple MBR

 Type d'étiquette de disque : dos
Périphérique Amorçage    Début       Fin  Secteurs Taille Id Type
/dev/sda1    *            2048  29296639  29294592    14G 83 Linux
/dev/sda2             29298686  95705087  66406402  31,7G  5 Étendue
/dev/sda3             95705088 312580095 216875008 103,4G 83 Linux
/dev/sda5             29298688  87891967  58593280    28G 83 Linux
/dev/sda6             87894016  95705087   7811072   3,7G 82 partition d'échange Linux / Solaris

exemple EFI

Type d'étiquette de disque : gpt
Périphérique    Début       Fin Secteurs Taille Type
/dev/sda1        2048   1050623  1048576   512M Système EFI
/dev/sda2     1050624  42993663 41943040    20G Système de fichiers Linux
/dev/sda3    42993664  50515967  7522304   3,6G Partition d'échange Linux
/dev/sda4    50515968 113430527 62914560    30G Système de fichiers Linux

montage chroot

sur le système live, on crée le répertoire de montage chroot

mkdir -p /mnt/chroot

monter les partitions systemes

MBR type EFI
mount /dev/sda1 /mnt/chroot root mount /dev/sda2 /mnt/chroot
sans objet EFI mount /dev/sda1 /mnt/chroot/boot/efi
si /boot est sur une partition séparée, la monter /boot sans objet

monter les périphériques

for i in /sys /proc /dev; do mount --bind "$i" /mnt/chroot"$i"; done

chrooter

chroot /mnt/chroot

état des lieux

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111,8G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0    20G  0 part /
├─sda3   8:3    0   3,6G  0 part 
└─sda4   8:4    0    30G  0 part

si besoin pour autre chose qu'un grub repair, on monte les partition du fstab

mount -a

état des lieux

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111,8G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0    20G  0 part /
├─sda3   8:3    0   3,6G  0 part 
└─sda4   8:4    0    30G  0 part /home

grub chroot réparation

réinstaller le paquet grub-efi

MBR type EFI
apt-get install --reinstall grub-pc (ré)install si nécessaire apt-get install --reinstall grub-efi

vérfier et installer os-prober si absent

which os-prober || apt install os-prober

install du bootloader

grub-install /dev/sda

**: /dev/sda optionnel si la partition EFI est bien montée en /boot/efi

on re-crée un grub.cfg

update-grub

on peut sortir du chroot et rebooter

exit
reboot

vérifier grub

dd if=/dev/sda bs=512 count=1 | strings | grep -i grub
1+0 enregistrements lus
1+0 enregistrements écrits
512 bytes copied, 0,00104559 s, 490 kB/s
GRUB 

vérifier EFI

file /boot/efi/EFI/debian/grubx64.efi
/boot/efi/EFI/debian/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
efibootmgr --verbose | grep debian
Boot0000* debian HD(1,GPT,d82668a0-175f-487f-b843-8bd6abb090d8,0x800,0x100000)/File(\EFI\debian\grubx64.efi)
efibootmgr --verbose
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0000,0001
Boot0000* debian HD(1,GPT,d82668a0-175f-487f-b843-8bd6abb090d8,0x800,0x100000)/File(\EFI\debian\grubx64.efi)
Boot0001* UEFI: PNY USB 2.0 FD 8192 PciRoot(0x0)/Pci(0x10,0x0)/USB(3,0)/HD(1,MBR,0x4294967250,0x13e4,0x580)AMBO

un fichier .efi doit être visible sur le disque, à priori boot0000, avec une chemin correct

HD(1,GPT,d82668a0-175f-487f-b843-8bd6abb090d8,0x800,0x100000)/File(\EFI\debian\grubx64.efi)

essais

plus d'infos: