dimanche 5 novembre 2023

Disque externe bootable legacy et uefi

J'ai un disque dur externe usb que j'ai formaté de manière à ce qu'il puisse booter aussi bien de manière traditionnelle (legacy)  que en mode uefi:

toto@aldebaran:~$ sudo fdisk -l /dev/sda
[sudo] Mot de passe de toto: 
Disque /dev/sda : 447,13 GiB, 480103981056 octets, 937703088 secteurs
Disk model: 80G2G0A-00JH30  
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 6B6A3B5A-81C8-479D-B261-B4733B4D0D70

Périphérique     Début       Fin  Secteurs Taille Type
/dev/sda1         2048      4095      2048     1M Amorçage BIOS
/dev/sda2         4096   2101247   2097152     1G Système EFI
/dev/sda3      2101248  18878463  16777216     8G Partition d'échange Linux
/dev/sda4     18878464 102764543  83886080    40G Système de fichiers Linux
/dev/sda5    102764544 186650623  83886080    40G Système de fichiers Linux
/dev/sda6    186650624 937701375 751050752 358,1G Système de fichiers Linux
michel@pc-linuxshop-A7K57UJU:~$ 

Grub s'installe dans sda1 dans le cas d'un amorçage en mode traditionnel, sda2 est monté dans /boot/efi pour un amorçage en mode UEFI.
J'ai installé un système linux (linux mint)  sur ce disque USB, à partir d'un laptop dont le boot est legacy.
Pas de souci lorsqu'il est branché sur un ordinateur qui s'amorce à l'ancienne. Par contre si ce disque dur externe est branché sur un ordinateur dont l'amorçage est UEFI, il n’apparaît pas dans la liste des périphériques sur les quels on peut booter.
Depuis un ordinateur UEFI où est installé Ubuntu (22.04), je lance les commandes suivantes:

sudo mount /dev/sda4 /mnt
sudo mount /dev/sda2 /mnt/boot/efi 
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done  
sudo mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
sudo chroot /mnt
grub-install 
update-grub
exit  
sudo umount /dev/sda2
sudo umount /dev/sda4

(/dev/sda4 contient la racine de linx mint avec lequel je veux démarrer mon disque USB.)
Mais déception: ça ne fonctionne pas.
Le disque possède le drapeau pmbr_boot, ce qui pose problème.
Il faut enlever ce drapeau:

toto@aldebaran:~$ sudo parted /dev/sda
(parted) disk_set pmbr_boot off
(parted) quit

Et voilà, le problème est résolu.