Archives pour la catégorie Non classé

Deux méthodes de conversion de Windows Legacy vers UEFI

Souvent, on est confronté au désir de faire passer une installation de Windows en mode bios vers une installation UEFI. Ca implique deux préalables :

  1. Le bios doit être compatible uefi. On s’en assure avant toute manipulation.
  2. Le disque au format mbr devra être converti au format gpt.

Nous allons partir de cette situation : un Windows hérité (bios) sur disque mbr :

Mon image

 1. La méthode directe via mbr2gpt

Microsoft a proposé en effet une commande directe pour faire cette opération. Elle  est documentée sur de nombreux sites, et donc je vais aller assez vite.

On peut la saisir depuis Windows lui-même ou depuis une console WinPE (mon choix). Ce qui  donne en substance pour la première commande :

Mon image

La seconde commande :

Mon image

La conversion se fait sans difficulté, et Windows va démarrer directement dès qu’on aura basculé le bios de Legacy à UEFI. Le seul bémol, c’est que mbr2gpt a placé la partition efi où bon lui a semblé, et il n’a pas créé de partition msr.

Mon image

C’est négligeable et facilement récupérable, mais j’aurais préféré contrôler moi-même ces choix. Je vais donc utiliser une autre méthode, un peu plus technique, mais plus personnalisable.

2. La méthode indirecte via gdisk et bcdboot

En partant de la même situation initiale, nous allons devoir procéder en deux temps. Convertir le disque au format gpt, puis recréer les partitions et fichiers de démarrage.

2.1. Conversion du disque via gdisk

On trouve gdisk sur tous les live-usb Linux  et il existe même une version Windows (que je n’ai pas testée). Je vais utiliser une Mint Xfce pour faire cette première opération. J’en profiterai pour supprimer la partition « reserved » devenue inutile (avec gparted, par exemple)./

Mon disque à convertir étant identifié dans gparted par l’appellation /dev/sda, j’exécute gdisk  pour le modifier :

sudo gdisk /dev/sda

Là, il me confirme que mon disque est bien au format mbr. La simple lettre « w » confirmée par un « y » va permettre de le convertir  :

Mon image

Ici s’arrête l’intervention de gdisk et de Linux. On va pouvoir redémarrer le PC sur une console WinPE ou un disque d’installation de Windows pour finaliser la modification.

2.2. Réparation du démarrage de Windows

A ce stade, il faut démarrer sur une console (ou un support d’installation) jusqu’à obtenir une invite de commandes. On en profite pour basculer le bios en UEFI ; on vérifie depuis WinPE que la conversion en gpt s’est bien faite, ce qui est prouvé par  l’astérisque au retour de « list disk ». On en profite pour vérifier les partitions:

diskpart
list disk
sel disk 0
list part

On n’a plus qu’à créer les partitions que l’on souhaite (une msr de 16 Mio et le reste pour l’EFI) :

create part msr size=16
create part efi

On formate et on assigne une lettre. On peut même vérifier le résultat :

format fs=fat32 quick
assign letter=R
list part

Le tout en images donne ceci :

Mon image

Il ne reste qu’à réparer le démarrage pour l’adapter à l’UEFI. On vérifie les lettres assignées aux volumes (EFI et Windows), et on écrit les fichiers de démarrage :

list vol
exit
bcdboot e:\windows /l fr-fr /s r:

Ce qui donne :

Mon image

On ferme l’invite de commandes et on peut voir que Windows est déjà proposé :

Mon image

Il ne reste plus qu’à démarrer.  Le PC tourne en UEFI avec les partitions telles qu’on les souhaitait.

Mon image

 

Installer ubuntu 21-04 en uefi directement avec Refind

Le lanceur Grub est traditionnellement installé avec Ubuntu, mais ce lanceur est devenu une telle usine-à-gaz qu’on peut être tenté de lui substituer Refind,  qui est bien plus qu’une solution alternative. Beaucoup de tutoriels existent, mais ils sont souvent complexes et peu explicites. Cette démonstration présuppose une installation complète sur un disque vierge. La désactivation du « secure-boot » dans le bios sera préférable.

I. Installation d’Ubuntu sans grub

1. L’installation via ubiquity -b

On démarre bien entendu sur le support d’installation, et on choisit « d’essayer Ubuntu », en profitant bien sûr pour le passer en français :

Mon image

Une fois sur le bureau, on va choisir non pas d’installer via le raccourci proposé, mais en lançant un terminal, et en tapant la commande :

ubiquity -b

Celle-ci va lancer l’installation avec une petite différence : grub ne sera pas installé. Autrement dit, en fin d’installation, Ubuntu ne sera pas capable de démarrer.

Mon image

Les étapes habituelles vont être proposées, et au choix de partitionnement, on va préférer choisir « autre chose » afin de partitionner le disque à notre convenance. Deux partitions au minimum seront  ajoutées par le bouton + :

  • Une partition efi en fat32 de 100 Mo environ

Mon image

  • Une partition racine en ext4 sur le reste du disque. On obtient  le résultat suivant  :

Mon image

A ce stade, on peut poursuivre l’installation que va aller à son terme.  L’installateur va nous proposer de « redémarrer » ou de « continuer à tester » . Nous allons choisir la seconde option, car Ubuntu ne fonctionnerait pas en l’état..

2. Etat des lieux au terme de l’installation

Le plus simple est de faire le point via un terminal, pour estimer la situation :

ubuntu@ubuntu:~$ sudo fdisk -l |grep "/dev/sda"
Disque /dev/sda : 16 GiB, 17179869184 octets, 33554432 secteurs
/dev/sda1      2048   194559   192512    94M Système EFI
/dev/sda2    194560 33552383 33357824  15,9G Système de fichiers Linux

Nous avons bien deux partitions, sda1 et sda2, l’une pour l’EFI, l’autre pour notre Ubuntu

ubuntu@ubuntu:~$ sudo efibootmgr
BootCurrent: 0001
BootOrder: 0000,0001,0002,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network
Boot0003* EFI Internal Shell (Unsupported option)

Aucune entrée n’a été créée dans la NVram du bios-uefi. Notre Linux n’est pas fonctionnel.

II. Installation de Refind

1. Téléchargement de Refind

En fait, le terme installation n’est pas approprié. Nous allons simplement télécharger les fichiers nécessaires au démarrage, et ce directement sur notre live-usb. La procédure est assez simple, parce qu’elle est automatique et en trois commandes:

ubuntu@ubuntu:~$ sudo add-apt-repository universe
Adding component(s) 'universe' to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel.

Je vous épargne les lignes affichées pour passer à la seconde commande :

ubuntu@ubuntu:~$ sudo apt update
Ign :1 cdrom://Ubuntu 21.04 _Hirsute Hippo_ - Alpha amd64 (20210116) hirsute InRelease
Atteint :2 cdrom://Ubuntu 21.04 _Hirsute Hippo_ - Alpha amd64 (20210116) hirsute Release
Atteint :4 http://archive.ubuntu.com/ubuntu hirsute InRelease
Atteint :5 http://archive.ubuntu.com/ubuntu hirsute-updates InRelease  
Atteint :6 http://security.ubuntu.com/ubuntu hirsute-security InRelease
Lecture des listes de paquets... Fait               
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait

Idem. Et enfin  la dernière :

ubuntu@ubuntu:~$ sudo apt install refind
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les NOUVEAUX paquets suivants seront installés :
  refind
0 mis à jour, 1 nouvellement installés, 0 à enlever et 1073 non mis à jour.

Une fenêtre nous proposant d’installer Refinf en partition ESP. Il suffira de décliner cette proposition.

Refind, une fois téléchargé, verra tous ses dossiers importants  installés dans /usr/share/refind. On pourra le vérifier :

ubuntu@ubuntu:~$ ls /usr/share/refind/*
/usr/share/refind/refind-install

/usr/share/refind/banners:
refind_banner-alpha.png  refind_banner.png  refind_banner.svg

/usr/share/refind/fonts:
liberation-mono-regular-12.png  nimbus-mono-14.png  ubuntu-mono-14.png
liberation-mono-regular-14.png  nimbus-mono-16.png  ubuntu-mono-16.png
liberation-mono-regular-24.png  nimbus-mono-24.png  ubuntu-mono-24.png
liberation-mono-regular-28.png  nimbus-mono-28.png  ubuntu-mono-28.png
mkfont.sh                       README.txt
nimbus-mono-12.png              ubuntu-mono-12.png

/usr/share/refind/refind:
drivers_x64  icons  refind.conf-sample  refind_x64.efi  tools_x64
ubuntu@ubuntu:~$

En dernière ligne s’affiche un fichier « sample » que nous allons modifier immédiatement :

sudo mv /usr/share/refind/refind/refind.conf-sample /usr/share/refind/refind/refind.conf

Nous avons tous les outils nécessaires pour installer Refind sur la partition efi

2. Installation de Refind en partition efi

2.1. Cas général

Si le PC n’est pas verrouillé au niveau du bios, il est assez simple d’installer Refind en montant la partition sda1 (EFI), en créant un dossier provisoire /efi/refind, et en y copiant simplement les fichiers nécessaires :

ubuntu@ubuntu:~$ sudo mount /dev/sda1 /mnt/sda1
ubuntu@ubuntu:~$ sudo mkdir -p /mnt/sda1/efi/refind
ubuntu@ubuntu:~$ sudo cp -rv /usr/share/refind/refind/* /mnt/sda1/efi/refind 
'/usr/share/refind/refind/drivers_x64' -> '/mnt/sda1/efi/refind/drivers_x64' 
'/usr/share/refind/refind/drivers_x64/btrfs_x64.efi' -> '/mnt/sda1/efi/refind/drivers_x64/btrfs_x64.efi' 
'/usr/share/refind/refind/drivers_x64/ext2_x64.efi' -> '/mnt/sda1/efi/refind/drivers_x64/ext2_x64.efi' 
'/usr/share/refind/refind/drivers_x64/ext4_x64.efi' -> '/mnt/sda1/efi/refind/drivers_x64/ext4_x64.efi' 
'/usr/share/refind/refind/drivers_x64/hfs_x64.efi' -> '/mnt/sda1/efi/refind/drivers_x64/hfs_x64.efi'

Nous pouvons constater que seul le sous-dossier /refind aura été nécessaire. A nouveau, je passe sur la liste complète des fichiers copiés. Notre Refind serait sans doute déjà opérationnel dans la plupart des cas. Pour être sûr du démarrage de Refind, nous allons ajouter une entrée de démarrage la  NVram du bios-uefi :

ubuntu@ubuntu:~$ sudo efibootmgr --create --disk /dev/sda --part 1 --label "Refind-efiboomgr" --loader "efi\refind\refind_x64.efi"
BootCurrent: 0001
BootOrder: 0004,0000,0001,0002,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network
Boot0003* EFI Internal Shell (Unsupported option)
Boot0004* Refind-efiboomgr
ubuntu@ubuntu:~$

Si le bios UEFI n’est pas « verrouillé », l’entrée sera ajoutée automatiquement. On n’a plus qu’à tester en redémarrant enfin sur la version installée :
Mon image

2.2. Cas particuliers

Certains PC, plus ou moins verrouillés, n’autorisent pas l’écriture en NVRam et empêchent de démarrer tant sur Grub que sur Refind. On peut rencontrer pas mal de situations qui demanderaient chacune  des précisions. La plus courante est l »obligation d’ajouter une entrée Ubuntu depuis le bios  lui-même.

3. Paramétrages de Refind

En allant sur le site de Rod Smith (l’auteur) ou sur d’autres tutoriels comme celui du site Ubuntu, on pourra paramétrer Refind pour le rendre plus fonctionnel. Je n’entre pas dans le détail, mais je montre simplement ce que propose l’ajout d’un thème trouvé en ligne :

Mon image

Installations automatiques hybrides sous Ubuntu 21.04

Depuis la version 20.10, on peut constater qu’il est de plus en plus difficile d’installer une distribution Ubuntu en mode Legacy. La question a déjà été traitée dans ce sujet par malbo pour cette version 20.10. Il a constaté l’évolution de l’installation de grub : ce qui est vrai pour Ubuntu le sera probablement pour ses dérivées. La version 21.04 suit malheureusement le même chemin.

Je fais rarement des tests sur les distributions non officielles, mais cette fois, je vais faire une exception : tester l’installation d’une Ubuntu 21.04 en mode Legacy, sur un disque mbr (dos). 

1. Installation automatique d’Ubuntu 21.04

Je ne détaille pas cette possibilité qui est bien expliquée par malbo sur la version 20.10. L’installateur Ubiquity ne laisse guère le choix. Soit « effacer le disque intégralement », ce qui convertit le disque au format gpt, et donc conduit à une installation UEFI ; soit passer par « autre chose », et accepter la création d’une partition efi, ce qui conduit au même résultat.  On a un exemple de ce résultat dans le rapport boot-info de ce sujet .

On constate que le PC fonctionne en uefi :

BIOS is EFI-compatible, and is setup in EFI-mode for this installed-session.

Le disque est pourtant au format dos :

fdisk -l (filtered): ___________________________________________________________

Disk sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk identifier: 0x5de0dddf
Type d'étiquette de disque : dos
      Boot      Start        End    Sectors   Size Id Type
sda1             2048   48828219   48826172  23.3G 83 Linux
sda2         48830462 1953523711 1904693250 908.2G  5 Extended
sda5         48830464   52733951    3903488   1.9G 82 Linux swap / Solaris
sda6         52736000 1947267249 1894531250 903.4G 83 Linux
sda7  *    1947269120 1953523711    6254592     3G ef EFI (FAT-12/16/32)

Enfin, la partition EFI est activée par un drapeau boot, et pourtant elle est incluse dans une partition étendue. Tout ceci est assez surprenant. Et pourtant, c’est fonctionnel. Mais Windows, en dual-boot, doit peu aimer cette situation.

2. Tests manuels d’installation

2.1. Forçage de l’installation en mode Legacy sans partition efi 

Le Bios réglé en mode Legacy, avec un disque dos. Je force la création d’une petite partition NTFS pour simuler l’idée  que le disque n’est pas vierge, et je crée avec Gparted  une partition ext4 que j’associe à / pour mon installation d’Ubuntu. Je passe outre un message d’avertissement me signalant l’absence de partition EFI, ce qui me conduit à une erreur GRUB en fin  d’installation. Je teste néanmoins un redémarrage, et là, surprise, Ubuntu 21.04 démarre. Le retour de quelques commandes propose ceci  (car boot-repair est inopérant) :

test@test-virtual-machine:~$ sudo od -tx1z -Ax -N 512 /dev/sda |grep -i rub
000180 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 47 65  >}.......GRUB .Ge<

test@test-virtualmmachine:~$ cat /etc/issue
Ubuntu Hirsute Hippo (development branch) \n \l

test@test-virtual-machine:~$ [ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non-EFI"
Session non-EFI

test@test-virtual-machine:~$ sudo fdisk -l
Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sda1    *           2048  4028415  4026368   1,9G  7 HPFS/NTFS/exFAT
/dev/sda2             4028416 62914559 58886144  28,1G 83 Linux

test@test-virtual-machine:~$ dpkg --get-selections | grep grub
grub-common					install
grub-efi-amd64-bin				install
grub-efi-amd64-signed				install
grub-gfxpayload-lists				install
grub-pc						install
grub-pc-bin					install
grub2-common					install

Un grub a bien été installé dans le mbr, malgré le message d'erreur. Les versions Legacy et UEFI de Grub sont installées, et l'installation fonctionne sans partition efi. Mais elle n'est pas allée à son terme. On peut prévoir des soucis à venir

 2.2. Acceptation de la partition efi, avec création manuelle en partition primaire 

Toujours en mode Legacy, sur disque ms-dos, avec une partition NTFS présente, je crée cette fois la partition efi souhaitée (et je force son installation en primaire via « autre chose« , contrairement à ce qui est proposé par défaut pour être sûr de booter également en UEFI). L’installation se fait sans heurt.

Quelques commandes en Legacy :

Test@test-virtual-machine:~$ sudo od -tx1z -Ax -N 512 /dev/sda |grep -i rub
000180 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 47 65  >}.......GRUB .Ge<

test@test-virtual-machine:~$ [ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non-EFI"
Session non-EFI

test@test-virtual-machine:~$ sudo parted -l
Table de partitions : msdos
Drapeaux de disque : 
Numéro  Début   Fin     Taille  Type      Système de fichiers  Fanions
 1      1049kB  2063MB  2062MB  primary   ntfs
 2      2064MB  32,1GB  30,0GB  extended
 5      2064MB  32,1GB  30,0GB  logical   ext4
 3      32,1GB  32,2GB  149MB   primary   fat32                démarrage, esp

test@test-virtual-machine:~$ dpkg --get-selections | grep grub
grub-efi-amd64-signed				install
grub-pc						install

On constate que les deux versions de Grub sont installées, et qu'un Grub est toujours présent dans le mbr. Donc, Ubuntu peut fonctionner en mode Legacy.

Quelques commandes en UEFI:  

test@test-virtual-machine:~$ [ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non-EFI"
Session EFI

test@test-virtual-machine:~$ sudo efibootmgr -v
BootCurrent: 0000
BootOrder: 0004,0000,0001,0002,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
Boot0004* ubuntu	HD(3,MBR,0x72e662bb,0x3bb8800,0x47000)/File(\EFI\ubuntu\shimx64.efi)

La même installation fonctionne également dans le mode UEFI. Une entrée « Boot4 Ubuntu » s’est créée spontanément au premier démarrage en UEFI. L’installation est donc opérationnelle sur un PC hybride. Mais la partition efi reste montée dans fstab, ce qui signifie qu’on ne peut supprimer la partition efi dans opérer une modification.

 2.3. Acceptation de la partition efi, avec création automatique en partition logique

L’installation par défaut proposant la création d’une partition EFI logique, au sein d’une partition étendue. Il n’est pas nécessaire de tester une nouvelle fois en Legacy, car l’installation est identique dans ce mode. La question est : cela bootera-t-il en UEFI ?

Test@test-virtual-machine:~$ sudo efibootmgr -v 
BootCurrent: 0000
BootOrder: 0005,0004,0000,0001,0002,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
Boot0004* ubuntu	HD(3,MBR,0x72e662bb,0x3bb8800,0x47000)/File(\EFI\ubuntu\shimx64.efi)
Boot0005* ubuntu	HD(2,MBR,0x72e662bb,0x3d7ffe,0x37e0802)/HD(2,MBR,0x0,0x3b2a000,0x8e800)/File(\EFI\ubuntu\shimx64.efi)

test@test-virtual-machine:~$ sudo ls /boot/efi/EFI/Boot
BOOTX64.EFI  fbx64.efi	mmx64.efi

test@test-virtual-machine:~$ sudo fdisk -l
Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1                 2048  4028415  4026368   1,9G  7 HPFS/NTFS/exFAT
/dev/sda2              4030462 62621695 58591234  27,9G  5 Étendue
/dev/sda5              4030464 62035967 58005504  27,7G 83 Linux
/dev/sda6    *        62038016 62621695   583680   285M ef EFI (FAT-12/16/32)

Sur la machine virtuelle, tout s’est très bien passé, même avec une partition efi logique. L’entrée « Boot5 Ubuntu » s’est créée.  Mais c’est sur Vmware, dont c’est très « théorique ». Avec les dual-boot Windows et les Nvram plombées, ça promet de nombreux plantages. En  voici un premier exemple : https://bugs.launchpad.net/ubuntu/+source/usb-creator/+bug/1912044

 3. Une installation complète réussie en Legacy traditionnel

L’idée est d’aboutir au résultat du point 2.1, mais en finalisant l’installation. Première opération, lancer le live-usb d’Ubuntu en mode Legacy-bios, et choisir « essayer Ubuntu« . On commence par préparer son disque pour une installation traditionnelle :

3.1. Création d’une partition unique en ext4, sur disque ms-dos

L’opération assez classique est faite depuis Gparted, intégré au live Ubuntu :Mon image

3.2. Installation d’Ubuntu sans Grub

Au lieu de cliquer sur l’icone d’installation, je choisis de passer par un Terminal, et de taper :

ubiquity -b 

Cette commande indique à Ubiquity qu’on ne veut pas installer Grub tout de suite.  On suit les indications habituelles, jusqu’à la proposition « Autre chose« , qu’on sélectionne. Là, on indique à Ubiquity qu’on veut que la partition racine soit liée à la partition ext4 qu’on a préalablement créée :

Mon image

Il suffit de presser « continuer » pour aboutir à cet avertissement : on l’ignore tout simplement en continuant malgré tout.

Mon image

Et on a eu bien raison, car l’installation va cette fois à son terme, sans encombre.

Mon image

Le souci, c’est qu’on n’a aucun grub pour démarrer, même si les fichiers nécessaires sont visiblement bien présents pour l’installation.

Mon image

Il nous faut donc finit d’installer grub. Je choisis de le faire par le biais d’un chroot en « continuant à tester » avec le live d’Ubuntu.

3.3. Mise en place de Grub Legacy dans le mbr

Le principe est de monter les outils pour installer grub, et on peut le faire de deux manières. En redémarrant sur Super Grub 2 disk qui saura lancer notre installation sans grub, ou en chrootant depuis le live USB qu’on n’a pas quitté. Je choisis la seconde option en m’appuyant sur ceci. La procédure est fiable, et fonctionne plutôt sans surprise.

La première étape conduit à ceci :

Mon image

Il ne reste plus qu’à installer créer le fichier grub.cfg et à installer grub dans le mbr  ; deux commandes suffisent :

Mon image

La troisième commande vérifie que grub a bien été ajouté dans le mbr. Et au redémarrage, nous obtenons une Ubuntu 21.04 toute propre et installée en mode Legacy.

Mon image

Bilan : pas de partition fat32 active parasite, pas de fichier fstab à modifier, et pas d’entrées « uefi » dans le menu grub. On est dans du classique.

Créer une clé d’installation de Windows UEFI et Legacy depuis LinuxMint

Sous Windows, la création de clé USB d’installation est plutôt facile : on peut utiliser l’outil maison de M$ appelé « Média Creation Tools » (MCT) ou des logiciels de création tels que Rufus qui font le travail plutôt correctement.

Sous Linux, c’est moins évident. Des outils tels que Etcher, Ventoy, Woeusb, voire la commande dd existent, mais ils demandent pas mal de manipulations et on n’est pas certain du résultat. Par ailleurs, ces outils créent un format particulier sur la clé que seuls les spécialistes savent récupérer.

S’ajoute à ces difficultés le problème des fichiers de plus de 4 Go, dont on sait qu’ils ne sont pas utilisables sur les partitions fat32, format « attendu » pour l’UEFI. Or, /source/install.wim peut dépasser les 4 Go.

L’idée de cette démo est de fabriquer une clé qui soit l’exacte réplique d’une clé d’installation faite avec l’outils M$.

I. Observation d’une clé opérationnelle fabriquée sous Windows avec MCT

Le plus simple est d’en voir des captures d’écran

1.1. Le contenu de la clé

Mon image

On peut noter qu’on a bien les tous les éléments pour booter sur DVD, sur clé en Legacy et en UEFI.

1.2. Vue du partitionnement depuis gparted

Mon image

Le clé est bien au format mbr (ms-dos) et la partition en fat32 s’est vu attribuer les drapeaux boot et lba.

1.3. Vue depuis un rapport boot-info

 => Windows 7/8/2012 is installed in the MBR of /dev/sdb.

sdb1: __________________________________________________________________________
    File system:       vfat
    Boot sector type:  Windows 8/2012: FAT32
    Boot files:        /efi/boot/bootx64.efi /efi/microsoft/boot/cdboot.efi 
                       /efi/microsoft/boot/cdboot_noprompt.efi 
                       /efi/microsoft/boot/memtest.efi /bootmgr /boot/bcd

fdisk -l (filtered): ___________________________________________________________
Disk sdb: 7.3 GiB, 7811891200 bytes, 15257600 sectors
Disk identifier: 0x0238cbf8
      Boot Start      End  Sectors  Size Id Type
sdb1  *     2048 15257599 15255552  7.3G  c W95 FAT32 (LBA)

La clé s’appuie bien un mbr adapté à Windows, elle possède les fichiers de démarrage pour L’UEFI. Elle sait donc démarrer ne Legacy et en UEFI. La suite de la démo va s’efforcer de reproduire exactement le même schéma, tant pour le partitionnement que pour le contenu.

2. Création d’une clé d’installation avec une ISO de Windows contenant un fichier /sources/install.wim  inférieur à 4 Go

Le souci des images iso de Windows 10, c’est qu’elles contiennent quasi toutes les versions de l’OS, ce qui conduit à un alourdissement des fichiers qui pour certains, dépassent les 4 Go. Or, le format fat32 ne sait pas gérer ces fichiers. On peut donc récupérer sur ce site des images iso contenant un fichier /source/install.esd réduit à ce dont on a besoin. C’est mon choix pour cette partie de démo. Dans le point 3, nous verrons le second cas.

2.1. Partitionnement de la clé usb

Le plus simple est d’utiliser gparted qu’on peut installer facilement sur LinuxMint, depuis la logithèque. On l’exécute, et on insère une clé USB vierge dont on voit la constitution ici:

Mon image

Comme l’image l’indique, on va donc créer une nouvelle table de partitions de type ms-dos (qui signifie « mbr ») car on veut qu’elle boote aussi bien en Legacy qu’en UEFI.

Rem. Pour une clé purement UEFI, on choisirait gpt, et toutes les manipulations sur le mbr qui vont suivre au point 2.3  seraient inutiles, car le mbr n’est pas utilisé dans ce mode. 

On crée une partition fat32 sur l’ensemble de la clé, et par clic droit, on lui associe les drapeaux boot et lba, comme pour la clé faite sous Windows.

Mon image

On peut dès lors ajouter le contenu complet de l’ISO de Windows 10 qu’on ouvre avec le gestionnaire d’archives, et qu’on décompresse en direction de la clé USB.

Remarque 1 : certains gestionnaires d’archive par défaut ne fonctionnent pas et peinent à lire ou à extraire le contenu de l’ISO W10. Le gestionnaire d’archives de Mate, « Engrampa », fonctionne parfaitement.

Remarque 2 : On peut aussi le faire depuis un terminal. Si l’iso s’appelle Windows10.iso et qu’elle est dans le dossier /home/ikewdu/Bureau :

sudo mkdir /media/iso
sudo mount -o loop /home/ikewdu/Bureau/windows10.iso /media/iso

Et on n’a plus qu’à copier le contenu du dossier /media/iso vers la clé USB

2.2. Résultats de l’opération de formatage et d’extraction de l’ISO Windows

La clé semble identique à celle créé sous Windows (le contenu de la clé est plus léger chez moi, car j’ai extrait le contenu de l’ISO de Dart, dont j’avais besoin pour un dépannage) :

Mon image

On vérifie avec un rapport boot-info :

=> libparted MBR boot code is installed in the MBR of /dev/sdb.

sdb1: __________________________________________________________________________

File system:       vfat
    Boot sector type:  Windows 8/2012: FAT32
    Boot files:        /efi/boot/bootx64.efi /efi/microsoft/boot/cdboot.efi 
                       /efi/microsoft/boot/cdboot_noprompt.efi 
                       /efi/microsoft/boot/memtest.efi /bootmgr /boot/bcd
fdisk -l (filtered): ___________________________________________________________ Disk sdb: 7.3 GiB, 7811891200 bytes, 15257600 sectors Disk identifier: 0x41b88db7 Boot Start End Sectors Size Id Type sdb1 * 2048 15255551 15253504 7.3G c W95 FAT32 (LBA)

Il n’y a qu’une différence, mais elle est de taille : la clé contient « libparted » dans le mbr et non les éléments nécessaires à Windows.

Bilan : la clé sera fonctionnelle en UEFI car le PC va trouver /efi/boot/bootx64.efi, mais pas en Legacy, car « Libparted » ne sera pas capable de lancer /bootmgr.

2. 3. Adaptation du mbr à Windows

On a besoin pour rectifier le mbr d’ajouter un outil à notre Linux Mint : il s’agit de ms-sys. Il permet de réécrire le mbr de toutes les manières possibles : on le trouve ici.

On choisit la dernière version, et on extrait le dossier contenu dans le  fichier compressé qu’on place par exemple sur le bureau :

Mon image

On installe le logiciel en suivant les recommandations du concepteur du logiciel :

ikewdu@ikewdu-fixe ~ $ cd Bureau
ikewdu@ikewdu-fixe ~/Bureau $ cd ms-sys-2.7.0
ikewdu@ikewdu-fixe ~/Bureau/ms-sys-2.7.0 $ make
mkdir -p build/dep
cc -MM -O2 -ansi -pedantic -Wall -c -I inc -D PACKAGE=\"ms-sys\" -D LOCALEDIR=\"/usr/local/share/locale\" -idirafter include-fallback -D_FILE_OFFSET_BITS=64 -MT build/dep/partition_info.d src/partition_info.c > build/dep/partition_info.d
mkdir -p build/obj
mkdir -p build/bin
cc -O2 -ansi -pedantic -Wall -c -I inc -D PACKAGE=\"ms-sys\" -D LOCALEDIR=\"/usr/local/share/locale\" -idirafter include-fallback -D_FILE_OFFSET_BITS=64 -o build/obj/partition_info.o (...)

Je fais l’impasse sur la liste des processus d’installation, pour ne proposer que la seconde commande :

ikewdu@ikewdu-fixe ~/Bureau/ms-sys-2.7.0 $ su
Mot de passe : 
ikewdu-fixe ms-sys-2.7.0 # make install
install -d /usr/local/bin
install -m 755 build/bin/ms-sys /usr/local/bin/ms-sys (...)

Idem. L’installation est faite, il ne reste plus qu’à réécrire le mbr.  En tapant ms-sys, on obtient toutes les options disponibles :

ikewdu@ikewdu-fixe ~ $ ms-sys
Utilisation :
 ms-sys [paramètres] [périphérique]
Paramètres :
 -1, --fat12 Écrit un secteur de démarrage pour FAT12 de type disquette
 -2, --fat32nt5 Write a FAT32 partition NT5.0 boot record to device (etc.)

Deux d’entre elles m’intéressent :

-8, --fat32nt6 Write a FAT32 partition NT6.0 boot record to device-7, 
-7  --mbr7 Écrit un Master Boot Record de type Windows 7

On va donc les appliquer à la clé USB :

ikewdu@ikewdu-fixe ~ $ sudo ms-sys -8 /dev/sdb1
[sudo] Mot de passe de ikewdu
Secteur de démarrage FAT32 NT6.0 écrit avec succès sur /dev/sdb1
ikewdu@ikewdu-fixe ~ $ sudo ms-sys -7 /dev/sdb
Master Boot Record de type Windows 7 écrit avec succès sur /dev/sdb
ikewdu@ikewdu-fixe ~ $

On vérifie avec boot-info que l’opération s’est bien passée :

 => Windows 7/8/2012 is installed in the MBR of /dev/sdb.

Il ne reste plus qu’à tester la clé. Et effectivement, le menu de démarrage d’un autre PC UEFI / Legacy me propose les deux formats de boot pour la clé :

Mon image

3. Création d’une clé avec un fichier wim de plus de 4 Go

On va maintenant imaginer qu’on est confronté à une image ISO de Windows qui contient un fichier install.wim supérieur à 4 Go. Comme c’est le cas ici.

On rappelle que le fat32 ne tolère pas de dépasser cette limite de 4 Go. On aurait donc la solution de créer une clé usb avec une partition NTFS, mais on risque de ne pas booter en UEFI. Une solution existe pour régler ce souci.

3.1. Préparation de la clé USB

A nouveau, on utilise gparted. On recrée une table de partitions ms-dos (comme en 2.1), mais cette fois, on va créer deux partitions : une partition fat32 de 1 Go à laquelle on appliquera les drapeaux boot et lba, et une simple partition NTFS sur le reste de la clé. On aboutira à ceci :

Mon image

On en profite, puisqu’on a vu comment faire au point 2.3.,  pour réparer le mbr afin de le rendre compatible avec Windows. C’est la partition /dev/sdb1 qui est concernée :

ikewdu@ikewdu-fixe ~ $ sudo ms-sys -8 /dev/sdb1
[sudo] Mot de passe de ikewdu : 
Secteur de démarrage FAT32 NT6.0 écrit avec succès sur /dev/sdb1
ikewdu@ikewdu-fixe ~ $ sudo ms-sys -7 /dev/sdb
Master Boot Record de type Windows 7 écrit avec succès sur /dev/sdb
ikewdu@ikewdu-fixe ~ $

La clé est prête et bootable. Reste à installer les fichiers de Windows 10 issus de l’image ISO

3.2. Décompression et adaptation de la clé USB à Windows 10

Pour cette partie, je m’inspire et j’adapte ce que propose ce tutoriel.

La première chose à faire est d’ouvrir l’image ISO avec le gestionnaire d’archives, et de copier le contenu intégral sur la partition NTFS, autrement dit, dans mon cas, /dev/sdb2 :

Mon image

Lorsque c’est terminé, on copie les fichiers bootmgr et bootmgr.efi, puis les dossiers boot et efi de la partition NTFS (/dev/sdb2) vers la partition fat32 (/dev/sdb1).

Mon image

Enfin, on crée sur la partition fat32 (/dev/sdb1) un nouveau dossier appelé sources, on y copie le seul fichier boot.wim (c’est le fichier qui contient le programme d’installation de Windows) qui se trouve dans le dossier sources de la partition NTFS (/dev/sdb2). Le résultat est le suivant :

Mon image

Nb. J’ai même ajouté « setup.exe » dans mon élan, mais ce n’est pas préjudiciable.

La clé est prête : elle va booter, lancer le programme d’installation, soit en Legacy, soit en UEFI (test fait sur deux PC), et le problème des fichiers supérieurs 4 Go ne sera plus pénalisant.

Contourner l’erreur d’installation de grub-EFI dans /target/

De nombreux sujets sont ouverts sur les forums pour signaler que l’installation d’Ubuntu (entre autres) sur certains PC en UEFI conduit à une erreur en fin de procédure, ce qui rend l’OS inutilisable. On rencontre de nombreux exemples qui ressemblent à ceci :

« Echec de l’installation  de GRUB »
Le paquet GRUB-efi-amd64 n’a pas pu être installé dans /target/. En l’absence du programme de démarrage GRUB, le système installé ne pourra pas démarrer.

L’objet de cette démo est de présenter un moyen de contournement basé sur une installation en simple boot, mais il n’est pas substituable à tous les cas de verrouillage.

Donc, cette démo est informative, et on ne la suit qu’à ses risques et périls. 

I. Présentation de la situation

En image, c’est plus parlant. Voici un exemple d’installation défailllante.

Mon image

Les raisons de ce souci sont multiples… ça peut être

  • la partition efi qui est absente ou non inscriptible
  • la version de Grub qui n’est pas bonne
  • la NVram qui est plombée par le constructeur.
  • Une autre raison spécifique à la marque du PC.

Les pistes sont nombreuses, et c’est souvent difficile à résoudre. C’est même parfois définitivement bloquant. Par ailleurs, on peut être tenté de vouloir réparer l’installation en forçant l’installation de grub, mais c’est une piste que je déconseille.

En effet, il faut savoir que des outils de lancement sur USB comme SG2D et Refind parviennent à lancer la version mal installée depuis le noyau grub, mais on aboutit à ceci :

Mon image

Cette erreur s’explique par le fait que certaines commandes dpkg, certaines désinstallations, entre autres, ne sont pas allées à leur terme. Dès lors, on a sous la main une installation bancale. Je préconise donc de réinstaller intégralement, mais d’une autre manière.

II. Installation de Xubuntu en UEFI sans Grub

1. Les étapes de l’installation

Je choisis Xubuntu pour une question de légèreté, car je fais cette démo depuis un PC virtuel. Par ailleurs, je fais cette démo sur une installation en simple boot (sans Windows) pour une question de clarté. Je parlerai du dual-boot avec Windows au fil des étapes.

J’ai expliqué comment faire une installation sans Grub dans ce sujet, mais je vais en reprendre les grandes lignes.

  • Avec gparted, on crée une table de partitions gpt, format attendu pour une installation en UEFI (à noter que pour avoir le clavier en français, un setxkbmap fr préalable dans un terminal ne sera pas superflu).

Mon image

On en profite pour créer  deux partitions. Une partition en fat32 de 100 Mio environ à laquelle on assigne les drapeaux esp et boot pour en faire une partition EFI (dans le cas d’un dual boot, celle-ci existant déjà pour lancer Windows, on n’aura pas besoin créer cette partition efi en fat32). Puis on crée une partition ext4 sur le reste du disque. On aura une structure proche de ceci (capture simplement illustrative, car issue d’une autre installation… ce qui explique le contenu et l’ordre des partitions)

Mon image

Notre disque est prêt pour l’installation.

On vérifie qu’on est bien en mode UEFI pour notre installation via la commande efibootmgr qui ne doit pas retourner d’erreur. Si on a une erreur, c’est que notre Live USB est exécuté dans un mauvais mode.

***  Alternative à cette commande :

[ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non-EFI"

Elle doit retourner  « Session EFI« . Si c’est le cas, on passe à la suite.

  • Installation via le terminal

Au lieu d’utiliser le raccourci sur le bureau, on lance un terminal et on saisit

ubiquity -b

Mon image

Les étapes habituelles de l’installation sont proposées, et au moment du choix du type d’installation, on décoche « LVM » et le cryptage, et on choisit « autre chose ». On va simplement utiliser l’option « modifier » pour attribuer à la partition ext4 le point de montage / et on coche le formatage si ce n’est pas automatique (l’idée est de supprimer l’ancienne installation si elle préexiste).

Et c’est parti :

Mon image

Cette fois, l’installation va effectivement à son terme. Je vais en profiter pour faire le point sur le résultat, avant de passer à la suite.

2. Les constats de l’installation via la commande ubiquity -b

La meilleur chose à faire, c’est de lire un rapport boot-info de la situation initiale après cette installation sans grub. On y constate plusieurs choses :

sda1: __________________________________________________________________________

    Operating System:  
    Boot files:        /efi/ubuntu/fwupx64.efi
  • La partition EFI a tout de même enregistré un dossier Ubuntu. On y trouve un fichier un peu obscur qui sert à la mise à jour de Xubuntu.
=================== efibootmgr -v
BootCurrent: 0001
BootOrder: 0004,0000,0001,0002,0003
Boot0004* Windows Boot Manager	HD(1,GPT,13944985-e511-4a06-852e-2787ecc204c5,0x800,0x41800)/File(EFIMicrosoftBootbootmgfw.efi)
  • La Nvram n’a pas enregistré d’entrée Ubuntu, mais on trouve (comme sur beaucoup de PC) une entrée « Windows Boot Manager » qui correspond au démarrage d’un ancien Windows, et ce malgré sa désinstallation. On pourrait aussi ne plus rien trouver en relation au disque dur. Cela dépend des PC.
=============================== sda2/etc/fstab: ================================

--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
# / was on /dev/sda2 during installation
UUID=1a575471-811e-4bd3-babe-2f56e3685750 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=9AD7-9D52  /boot/efi       vfat    umask=0077      0       1
/swapfile                                 none            swap    sw              0       0
--------------------------------------------------------------------------------
  • Le fichier fstab montre que la partition efi qu’on a créée est bien montée, ce qui évitera les montages manuels.

On va s’assurer que Grub ne s’est pas installé en passant la commande

ikewdu@ikewdu-virtual-machine:~$ dpkg --get-selections | grep grub
grub-common                    install
grub-gfxpayload-lists          install
grub-pc                        install
grub-pc-bin                    install
grub2-common                    install
ikewdu@ikewdu-virtual-machine:~$

Et surprise ! On voit que l’installation a tout de même mis en place les paquets propres à grub-pc, ce qui ne nous convient absolument pas. On va donc devoir le supprimer, et pour cela, il sera plus simple de lancer notre noyau Linux pour rectifier tout ça.

III. Suppression de grub-pc et installation de grub-efi

1. Démarrage du noyau Linux installé

Pour faire toutes les opérations qui vont suivre, on va éviter de passer par un chroot en utilisant deux outils bien pratiques pour lancer notre Xubuntu installée : Refind ou Supergrub2disk.

J’ai expliqué dans ce sujet la procédure pour créer l’un ou l’autre de ces outils, mais on peut également suivre les préconisations du site du concepteur de Refind ou celles de Malbo, pour SG2D, dans ce tuto très complet.

L’important, c’est de pouvoir lancer cette version installée depuis un CD-Rom ou une clé USB. Si on n’y parvient pas, il faudra utiliser la  procédure de chroot, plus complexe mais bien documentée sur le site Ubuntu.

2. Désinstallation des traces de grub-pc

La désinstallation se fait en deux étapes : on purge le système des fichiers grub dont on ne veut pas, puis on supprime le dossier Ubuntu de la partition efi.

  • La première partie se limite à
ikewdu@ikewdu-virtual-machine:~$ sudo apt purge grub*
[sudo] Mot de passe de ikewdu : 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
[...]
ikewdu@ikewdu-virtual-machine:~$ dpkg --get-selections | grep grub
ikewdu@ikewdu-virtual-machine:~$
  • Quant à la seconde, on la résout en lançant  en admin l’explorateur de fichiers (sudo nautilus, sudo thunar, sudo nemo selon la distribution qu’on utilise), puis en supprimant dans /boot/efi/EFI le dossier Ubuntu.

Mon image

  • On peut aussi passer par la commande
rm -r /boot/efi/EFI/ubuntu

Ainsi, nous disposons d’une installation totalement vidée de toute trace de Grub. On peut le vérifier avec un nouveau rapport boot-info.

sda1: __________________________________________________________________________
  Operating System:  
  Boot files:

  boot-info is executed in installed-session (Ubuntu 18.04.1 LTS, bionic, Ubuntu, x86_64)

=================== efibootmgr -v
BootCurrent: 0001
BootOrder: 0004,0000,0001,0002,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0) 
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x1,0x0)/
Boot0003* EFI Internal Shell 
Boot0004* Windows Boot Manager HD(1,GPT,13944985-e511-4a06-852e-2787ecc204c5,0x800,0x41800)/File(EFIMicrosoftBootbootmgfw.efi)

On a bien supprimé grub intégralement (notamment de la partition efi), la NVram n’est pas modifiée et pourtant, on a booté sur la version installée.

3. Installation de grub-EFI

Il s’agit en effet de mettre en place la bonne version. Comme de nombreux PC génèrent l’erreur initiale parce que la NVram est verrouillée, on va faire en sorte de n’y rien écrire.

Mais cette fois, on doit passer par un terminal. On peut déjà vérifier quels paquets de grub sont disponibles :

ikewdu@ikewdu-virtual-machine:~$ dpkg --list grub*
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom            Version      Architecture Description
+++-==============-============-============-=================================
un  grub           <aucune>     <aucune>     (aucune description n'est disponi
ii  grub-common    2.02-2ubuntu amd64        GRand Unified Bootloader (common 
un  grub-coreboot  <aucune>     <aucune>     (aucune description n'est disponi
un  grub-doc       <aucune>     <aucune>     (aucune description n'est disponi
un  grub-efi       <aucune>     <aucune>     (aucune description n'est disponi
un  grub-efi-amd64 <aucune>     <aucune>     (aucune description n'est disponi
un  grub-efi-ia32  <aucune>     <aucune>     (aucune description n'est disponi
un  grub-efi-ia64  <aucune>     <aucune>     (aucune description n'est disponi
un  grub-emu       <aucune>     <aucune>     (aucune description n'est disponi
ii  grub-gfxpayloa 0.7          amd64        GRUB gfxpayload blacklist
un  grub-ieee1275  <aucune>     <aucune>     (aucune description n'est disponi
un  grub-legacy    <aucune>     <aucune>     (aucune description n'est disponi
un  grub-legacy-do <aucune>     <aucune>     (aucune description n'est disponi
un  grub-linuxbios <aucune>     <aucune>     (aucune description n'est disponi
ii  grub-pc        2.02-2ubuntu amd64        GRand Unified Bootloader, version
ii  grub-pc-bin    2.02-2ubuntu amd64        GRand Unified Bootloader, version
un  grub-xen       <aucune>     <aucune>     (aucune description n'est disponi
un  grub-yeeloong  <aucune>     <aucune>     (aucune description n'est disponi
un  grub2          <aucune>     <aucune>     (aucune description n'est disponi
ii  grub2-common   2.02-2ubuntu amd64        GRand Unified Bootloader (common 
ikewdu@ikewdu-virtual-machine:~$

On voit que grub-efi et grub-efi-amd64 sont disponibles. Je vais me contenter du second.

Remarque : en machine virtuelle, je n’ai pas de boot-secure.  Si on avait un boot secure actif, on récupérerait aussi shim et shim-signed pour obtenir le fichier shimx64.efi.

ikewdu@ikewdu-virtual-machine:~$ sudo apt install grub-efi-amd64
[sudo] Mot de passe de ikewdu : 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  grub-common grub-efi-amd64-bin grub2-common os-prober
Paquets suggérés :
  multiboot-doc grub-emu xorriso desktop-base
Les NOUVEAUX paquets suivants seront installés :
  grub-common grub-efi-amd64 grub-efi-amd64-bin grub2-common os-prober
[...]
Paramétrage de grub-efi-amd64-bin (2.02-2ubuntu8.15) ...
Paramétrage de grub2-common (2.02-2ubuntu8.15) ...
Paramétrage de os-prober (1.74ubuntu1) ...
Paramétrage de grub-efi-amd64 (2.02-2ubuntu8.15) ...

Creating config file /etc/default/grub with new version
Traitement des actions différées (« triggers ») pour ureadahead (0.100.0-20) ...
ikewdu@ikewdu-virtual-machine:~$

L’installation des paquets s’est bien déroulée.  Comme je suspecte ma NV-ram d’être à l’origine du plantage, je vais demander une installation sans écriture en NVram avec /boot/efi comme cible de mon installation :

ikewdu@ikewdu-virtual-machine:~$ sudo grub-install -v --no-nvram --efi-directory=/boot/efi
grub-install : information : writing 1032 bytes of a fixup block starting at 0xc000.
grub-install : information : reading /usr/lib/grub/x86_64-efi/fshelp.mod.
grub-install : information : reading /usr/lib/grub/x86_64-efi/ext2.mod.
grub-install : information : reading /usr/lib/grub/x86_64-efi/part_gpt.mod.
grub-install : information : kernel_img=0x55ac30c73730, kernel_size=0x18c00.
grub-install : information : the core size is 0x1cc90.
grub-install : information : writing 0x1e000 bytes.
grub-install : information : copying `/boot/grub/x86_64-efi/core.efi' -> `/boot/efi/EFI/ubuntu/grubx64.efi'.
grub-install : information : copying `/boot/grub/x86_64-efi/core.efi' -> `/boot/efi/EFI/BOOT/BOOTX64.EFI'.
grub-install : information : copying `/usr/lib/shim/fbx64.efi' -> `/boot/efi/EFI/BOOT/fbx64.efi'.
grub-install : information : impossible d'ouvrir « /usr/lib/shim/fbx64.efi » : Aucun fichier ou dossier de ce type.
Installation terminée, sans erreur
ikewdu@ikewdu-virtual-machine:~$

Et enfin, on écrit le fichier grub.cfg

ikewdu@ikewdu-virtual-machine:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-4.15.0-96-generic
Image mémoire initiale trouvée : /boot/initrd.img-4.15.0-96-generic
Image Linux trouvée : /boot/vmlinuz-4.15.0-29-generic
Image mémoire initiale trouvée : /boot/initrd.img-4.15.0-29-generic
Adding boot menu entry for EFI firmware configuration
fait
ikewdu@ikewdu-virtual-machine:~$

Notre installation est prête à fonctionner si le PC est capable de sélectionner l’entrée Ubuntu au moment du démarrage. Beaucoup de PC sont capables de le faire. Imaginons que le notre ne soit pas en mesure de réussir.

IV. Utiliser l’entrée « WBM » pour lancer notre Linux

Comme souvent, quand le boot du PC est verrouillé sur « Windows Boot Manager », il faut faire croire au bios qu’il va lancer Windows.

On constate dans le second rapport boot-info que l’installation de grub-efi a créé deux dossiers : un dossier boot et un dossier ubuntu, mais aucune entrée en NVram. On va en profiter pour ajouter un dossier Microsoft en parallèle aux deux précédents. Dans  celui-ci, on va créer un dossier boot, et on copie dans ce dossier le fichier grubx64.efi qu’on renomme en bootmgfw.efi.

Ce qui donne ceci :

Mon image

En fait, notre PC va être persuadé qu’il exécute l’entrée « Windows Boot Manager » présente en NVram alors qu’il exécute grubx64.efi.

Remarque :

La plupart des PC savent identifier la présence des fichiers Windows sur la partition EFI au moment du démarrage et ajouteront l’entrée en NVram. Sinon on peut tenter de l’ajouter manuellement si le bios le permet, et en dernier recours via la commande qui ajoute l’entrée « WBM » en partition 1 avec le chemin de nos faux fichiers Microsoft.

sudo efibootmgr -l d /dev/sda -p 1 -L "Windows Boot Manager" -l '\efi\Microsoft\boot\bootmgfw.efi'

Attention ! Dans le cas d’un dual-boot, le fichier bootmgfw.efi existerait déjà, et il faudrait le renommer préalablement en bootmgfw-origine.efi pour ne pas risquer de perdre son Windows.

Remarque : Dans le cas d’un dual-boot, il serait nécessaire de repasser ensuite par un sudo update-grub pour que le lanceur identifie le fichier  bootmgfw-origine.efi et l’ajoute dans la liste de démarrage (non testé).

A ce stade, tout est prêt pour un démarrage sur Ubuntu. Il suffit de tester :

Mon image

Et c’est bon. Un dernier rapport boot-info nous confirme que le PC pense toujours lancer Windows Boot Manager.

sda1: __________________________________________________________________________

    Operating System:  
    Boot files:        /efi/ubuntu/grubx64.efi 
                       /efi/Microsoft/Boot/bootmgfw.efi

=================== efibootmgr -v
BootCurrent: 0004
BootOrder: 0004,0000,0001,0002,0003
Boot0004* Windows Boot Manager PciRoot(0x0)/Pci(0x10,0x0)/SCSI(0,0)/HD(1,GPT,13944985-e511-4a06-852e-2787ecc204c5,0x800,0x41800)/File(EFIMicrosoftBootbootmgfw.efi)

Nous avons bien une partition efi contenant un lanceur Ubuntu (inutilisé) et un faux lanceur Windows qui est actuellement utilisé lors du démarrage. On voit d’ailleurs que Refind lui-même s’y trompe, car lui aussi croit pouvoir lancer un Windows si on l’utilise au boot du PC :

Mon image
Pour parachever le tout, et afin qu’une mise à jour de notre Xubuntu ne vienne pas annuler tout ce travail, on peut bloquer la mise à jour de grub en passant plusieurs commandes :

apt-mark  hold   fwupdate    
apt-mark  hold   grub-efi-amd64
apt-mark  hold   grub-efi

Remarque : pour empêcher le secure-boot et les fichiers signés de se mettre à jour, on pourrait ajouter :

apt-mark  hold   secureboot-db
apt-mark  hold   fwupdate-signed

Donc, on a contourné les verrouillage de la Nvram, mais rien ne garantit que d’autres verrouillages n’entravent pas ce genre de manipulation. Donc, à suivre avec prudence, et à ses risques et périls. 

Contourner avec Refind l’erreur d’installation de Grub sur PC-UEFI

De nombreux sujets sont ouverts sur les forums pour signaler que l’installation d’Ubuntu (entre autres) sur certains PC en UEFI conduit à une erreur en fin de procédure, ce qui rend l’OS inutilisable. On rencontre de nombreux exemples qui ressemblent à ceci :

« Echec de l’installation  de GRUB »
Le paquet GRUB-efi-amd64 n’a pas pu être installé dans /target/. En l’absence du programme de démarrage GRUB, le système installé ne pourra pas démarrer

En image, c’est plus parlant. Voici un exemple d’installation défailllante.

Mon image

Les raisons de ce souci sont multiples… ça peut être

  • la partition efi qui est absente ou non inscriptible
  • la version de Grub qui n’est pas bonne
  • la NVram qui est plombée par le constructeur…

Les pistes sont nombreuses, et c’est souvent difficile à résoudre. C’est même parfois définitivement bloquant.

L’idée de cette démo n’est pas de donner de solution « à tout prix », mais de proposer des pistes de contournement. On pourrait le faire avec Grub (proposé prochainement), mais on peut aussi utiliser Refind, le lanceur créé par Rod Smith à partir de Refit.

Pourquoi ce choix ? Il fonctionne bien, il est assez ergonomique, et il est facile à gérer.

Je rédige cette démo en même temps que je traite (bien ou mal) ce cas qui est typique des blocages qu’on rencontre. L’installation est impeccable, et ça échoue à la fin.

I. Situation initiale : faire une installation sans grub

1. La situation de départ

On va partir d’un Windows 10 installé en dual-boot avec une Mint (que je ne prends pas en compte) sur un disque unique. L’idée est d’installer Xubuntu (plus légère en PC virtuel) sur un second disque. Le gestionnaire de disque présente ceci :

Mon image

On dispose bien d’un PC en UEFI avec disques GPT. Une partition efi étant présente sur le disque 0, on n’en créera pas d’autre.

Le disque 1 servira à l’installation d’Ubuntu . Ainsi, le logiciel EasyUEFI montre que pour l’instant, seul « Windows Boot Manager » est enregistré en NVRAM. c’est la partition 2 du disque 0 qui gère le démarrage.

Mon image

C’est d’ailleurs confirmé par la commande efibootmgr, saisie sur le liveUSB de Xubuntu :

xubuntu@xubuntu:~$ efibootmgr
BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0010,000C,000D,0011,0007,000E
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network
Boot0003* EFI Internal Shell (Unsupported option)
Boot0007* EFI Network
Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000A* EFI Network
Boot000B* EFI Internal Shell (Unsupported option)
Boot000C* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot000D* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000E* EFI Internal Shell (Unsupported option)
Boot0010* Windows Boot Manager
Boot0011* EFI VMware Virtual SCSI Hard Drive (1.0)

2. Installation de Xubuntu sans Grub

On va démarrer sur le live-USB d’installation d’Ubuntu en mode « essayer Ubuntu » pour obtenir un bureau, et on va lancer un terminal pour déclencher l’installation dans un mode particulier, à savoir sans Grub. On va taper :

ubiquity -b

On obtient un classique processus d’installation qui apparaît ici :

Mon image

Comme je ne veux pas créer de partition efi, je vais passer par « autre chose« , et créer sur /dev/sdb une simple partition ext4 avec comme point de montage « /« . Pour une installation « sans Windows », cas que je ne traite pas car peu fréquent, je créerais bien sûr une partition efi. Mais dans mon cas, cette partition EFI existe déjà sur le premier disque nommé ici /dev/sda

Par conséquent, je sélectionne  l’espace libre  sur /dev/sdb, puis je clique sur + et je crée une partition ext4 avec montage / sur l’ensemble du disque.

Mon image

Le résultat est le suivant: tout l’espace de /dev/sdb est occupé par ma nouvelle partition en ext4.

Mon image

A ce stade, je lance l’installation qui va se dérouler normalement, et aller cette fois jusqu’à son terme, sans message d’erreur.

Mon image

On obtient un Xubuntu bien installée, mais non exécutable, et sans grub… Un rapport boot-info nous le montre. Les extraits suivants notamment :

Boot Info Script 71f6c5c + Boot-Repair extra info      [Boot-Info 18apr2020]

============================= Boot Info Summary: ===============================

 => Windows 7/8/2012 is installed in the MBR of /dev/sda.
 => No boot loader is installed in the MBR of /dev/sdb.

sda1: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows 8/2012: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        

sda2: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  Windows 8/2012: FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /efi/Microsoft/Boot/bootmgfw.efi 
                       /efi/Microsoft/Boot/bootmgr.efi 
                       /efi/Microsoft/Boot/memtest.efi

sda3: __________________________________________________________________________

    File system:       
    Boot sector type:  -
    Boot sector info: 

sda4: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows 8/2012: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /Windows/System32/winload.exe

=================== efibootmgr -v
BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0010,000C,000D,0011,0007,000E
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
Boot0002* EFI Network	PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/MAC(000c29cab49f,0)
Boot0003* EFI Internal Shell (Unsupported option)	MemoryMapped(11,0x49fcb000,0x4a355fff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0007* EFI Network	PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/MAC(000c290e546d,0)
Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
Boot000A* EFI Network	PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/MAC(000c29cab49f,0)
Boot000B* EFI Internal Shell (Unsupported option)	MemoryMapped(11,0x49fcb000,0x4a355fff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot000C* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(0,0)
Boot000D* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x4,0x0)/Sata(1,0,0)
Boot000E* EFI Internal Shell (Unsupported option)	MemoryMapped(11,0xbefab018,0xbf416017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0010* Windows Boot Manager	HD(2,GPT,ffcaac27-7335-49f8-8028-b198618d7559,0x96800,0x31800)/File(EFIMicrosoftBootbootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
Boot0011* EFI VMware Virtual SCSI Hard Drive (1.0)	PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/SCSI(1,0)

II. La mise en place d’un lanceur : Refind

1. Créer une clé USB de Refind

Refind est un lanceur EFI qui peut remplacer grub. Il est présent dans les paquets d’Ubuntu et peut être installé directement, mais je choisis d’éviter cette solution pour ne pas échouer sur le même écueil qu’avec Grub : un échec avant la fin de la procédure.

Le site du concepteur, bien qu’en anglais, est explicite. Il y présente toutes les déclinaisons de son outil.  Il est nécessaire, dès maintenant, de fabriquer une clé USB Refind, car on va en avoir besoin pour faire démarrer notre Xubuntu. Elle nous servira aussi à récupérer les outils nécessaires pour notre démarrage. 

(La version USB se présente sous forme de fichier zip dans lequel se trouve un fichier img qu’on peut convertir en USB avec la commande dd (Cf. le fichier explicatif joint au zip). On peut aussi utiliser Etcher, Rufus qui savent utiliser la commande dd de manière plus sécurisée.  On peut enfin utiliser la solution proposée dans le TIP, qui explique comment utiliser l’outil d’installation maison de Rod Smith.)

Personnellement, je préfère créer une clé en fat32 bootable moi-même depuis Windows, et y copier le contenu de l’image iso de la version CD, qui a tous les éléments nécessaires au boot en uefi. J’ai expliqué la procédure dans ce sujet.

J’ai ainsi une clé directement opérationnelle pour booter en UEFI. (A noter qu’on peut aussi utiliser SG2D pour lancer son noyau Linux en suivant ma démo pour SG2D dans le lien précédent, ou mieux encore, ce tuto très complet de malbo ).

 2. Démarrage avec la clé USB Refind

Si la clé est correctement faite, il suffit de l’insérer, de la mettre en priorité dans l’ordre de boot du PC, et on arrive à ceci  :

Mon image

 

Refind détecte chez moi un Windows, une vieille version de Mint (on peut les tester), et ma xubuntu au noyau 4.15. Il suffit de la sélectionner avec le clavier et de la lancer.

On est sur notre nouvelle Xubuntu. Cette technique a l’énorme avantage de nous épargner la longue et laborieuse procédure de chroot qu’imposerait un live-CD.

Mais bien évidemment, ce passage par l’usb n’est qu’une solution provisoire… Le but est d’ajouter Refind au démarrage du PC. On pourrait le faire proprement avec des commandes, mais comme je veux simplifier, on va le faire moins proprement en mode graphique.

Pour ce faire, on va lancer l’explorateur de sa distribution en mode administrateur. Comme la version Xubuntu utilise Thunar, on tape la commande :

sudo thunar

Avec Ubuntu, ce serait sudo nautilus. C’est aussi l’occasion de voir et d’explorer le contenu de ma clé USB Refind qui est issu de l’image ISO que j’ai décompressée en entier :

Mon image

On va pouvoir s’en servir pour la suite de notre installation.

III. Les stratégies de dépannage

Je préfère le dire tout de suite, aucune stratégie n’offre la garantie de réussite, car les marques ont tendance à bloquer différemment leurs machines. Donc, je vais présenter les choses de la situation la plus normale à la situation la plus verrouillée.

1. La situation normale: ajout de refind en efi et en NVram

Dans une installation classique (avec grub ou autre), le lanceur de Linux s’installe  à la fois dans la partition efi et en Nvram. On va reproduire cette situation. Le rapport boot-info précédent a montré une chose intéressante. La partition efi est montée par le biais du fichier fstab :

=============================== sdb1/etc/fstab: ================================

--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdb1 during installation
UUID=9a6e9fd2-6cb1-4a51-b1cb-88d74ae4ce04 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda2 during installation
UUID=6205-ABC5 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
--------------------------------------------------------------------------------

On va donc l’explorer avec notre explorateur de fichiers ouvert en superutilisateur. Il suffit de se rendre sur le dossier /boot/efi pour en voir le contenu :

Mon image

On constate qu’on trouve un sous-dossier EFI qui contient lui-même un sous-dossier Microsoft. Nous allons ajouter à côté de ce dossier nommé Microsoft un nouveau dossier appelé Refind.

Dans ce dossier Refind, nous allons ajouter certains éléments contenus dans la clé USB Refind, notamment ceux qui suivent choisis dans le dossier Refind de la clé (:

Mon image

On n’oubliera pas le fichier refind-conf-sample que j’ai oublié sur la capture. Ils seront à copier dans le nouveau dossier Refind de notre partition /boot/efi/EFI/Refind

Le résultat est le suivant :

Mon image

On en profite alors pour renommer le fichier refind.conf-sample en refind.conf

A ce stade, certains PC sont capables de lancer Refind au redémarrage si on choisit de passer par le boot-menu du PC (touche ESC, F9, F11, F12 selon les marques), car ces PC explorent la  partition EFI au démarrage et ils adaptent leur NVram en fonction de ce qu’ils y trouvent.

Mais pour beaucoup d’autres, ce n’est pas le cas, et il faut ajouter soi-même cette entrée par une commande précise.

ikewdu@ikewdu-virtual-machine:~$ sudo efibootmgr -c -d /dev/sda -p 2 -L "Refind" -l '\efi\Refind\refind_x64.efi'
BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0004,0006,000C,000D,0011,0007,000E
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network
Boot0003* EFI Internal Shell (Unsupported option)
Boot0006* Windows Boot Manager
Boot0007* EFI Network
Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000A* EFI Network
Boot000B* EFI Internal Shell (Unsupported option)
Boot000C* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot000D* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000E* EFI Internal Shell (Unsupported option)
Boot0011* EFI VMware Virtual SCSI Hard Drive (1.0)
Boot0004* Refind
ikewdu@ikewdu-virtual-machine:~$

Explication de la commande : on demande l’écriture dans la NVRAM d’une entrée « Refind » qui pointera sur la partition 2 du disque /dev/sda, en suivant le chemin EFI\Refind\Refind_x64.efi.

Si le PC n’est pas bloquant, une entrée Refind a été ajoutée et elle est placée en tête dans la liste de démarrage. Au prochain redémarrage, le PC lancera Refind qui permettra de choisir entre Windows et Xubuntu.

2. Le cas de PC programmés pour booter sur bootx64.efi

On en voit de moins en moins, mais certains PC ne savent démarrer que sur le dossier efi/boot/bootx64.efi. Pour y parvenir, on va utiliser la même stratégie qu’au point précédent, mais au lieu de créer dans /boot/efi/EFI un dossier « refind », on y crée un dossier « boot ».  On y copie les mêmes éléments, et on en profite pour renommer refind_x64.efi en bootx64.efi. On aboutira à cette situation :

Mon image

Et on écrit cette fois en Nvram la ligne suivante:

ikewdu@ikewdu-virtual-machine:~$ sudo efibootmgr -c -d /dev/sda -p 2 -L "Windows Boot Manager" -l '\efi\Boot\bootx64.efi'
BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0004,0006,000C,000D,0011,0007,000E
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot0002* EFI Network
Boot0003* EFI Internal Shell (Unsupported option)
Boot0006* Windows Boot Manager
Boot0007* EFI Network
Boot0008* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot0009* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000A* EFI Network
Boot000B* EFI Internal Shell (Unsupported option)
Boot000C* EFI VMware Virtual SCSI Hard Drive (0.0)
Boot000D* EFI VMware Virtual SATA CDROM Drive (1.0)
Boot000E* EFI Internal Shell (Unsupported option)
Boot0011* EFI VMware Virtual SCSI Hard Drive (1.0)
Boot0004* Windows Boot Manager
ikewdu@ikewdu-virtual-machine:~$

La commande ressemble à la précédente, mais on a simplement simulé une entrée « Windows Boot Manager » en Nvram, pointant vers \EFI\boot\bootx64.efi. Cette entrée suffira à tromper le bios-uefi et sera probablement considérée comme valable sur ce genre de PC.

Remarque pour les points 1 et 2 : de nombreux PC présentent une option dans le bios-UEFI permettant de remplacer avantageusement la commande efibootmgr si elle n’est pas enregistrée. 

3. Le cas de Nvram verrouillée (par Windows bcdedit)

Le problème, c’est que de nombreux PC (portables, surtout) verrouillent la NVram et le bios-UEFI ne présente aucune alternative, et la commande efibootmgr  n’est pas enregistrée par le PC. Bilan, celui-ci continue de démarrer sur Windows.

Nous allons repartir de la situation normale, avec un dossier Microsoft et un dossier REfind. On a ceci après copie du dossier « Refind » sur la partition EFI (Cf. point 1 de cette partie III) :

Mon image

On va faire cette fois une manipulation depuis Windows. On démarre sur Windows. On va utiliser la commande bcdedit pour modifier le chemin de démarrage de Windows : on lance une invite de commandes en mode admin (on tape cmd en zone de recherche, et on ouvre par clic droit) :

C:\windows\system32>bcdedit /set {bootmgr} path efi\refind\refind_x64.efi
L’opération a réussi.

La commande redirige le lanceur bootmgr de Windows vers le chemin de notre dossier Refind sur la partition EFI. On vérifie que la commande a bien redirigé bootmgr vers le lanceur Refind :

C:\windows\system32>bcdedit /v

Gestionnaire de démarrage Windows
---------------------------------
identificateur          {9dea862c-5cdd-4e70-acc1-f32b344d4795}
device                  partition=\Device\HarddiskVolume2
path                    efi\refind\refind_x64.efi
description             Windows Boot Manager
locale                  fr-fr
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
default                 {01187ce9-8426-11ea-9d69-000c290e546d}
resumeobject            {01187ce8-8426-11ea-9d69-000c290e546d}
displayorder            {01187ce9-8426-11ea-9d69-000c290e546d}
                        {a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba}
toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}
timeout                 30

Chargeur de démarrage Windows
-----------------------------
identificateur          {01187ce9-8426-11ea-9d69-000c290e546d}
device                  partition=C:
path                    \windows\system32\winload.efi
description             Windows 10
locale                  fr-fr
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \windows
resumeobject            {01187ce8-8426-11ea-9d69-000c290e546d}
nx                      OptIn
bootmenupolicy          Standard

On peut cette fois démarrer notre Windows et notre Linux sans avoir modifié la Nvram. Le bémol de cette solution est qu’elle risque de devoir être renouvelée à chaque mise à niveau de Windows.

4. Le cas de la NVram verrouillée (par substitution de dossiers)

L’idée est de faire croire au PC qu’on lance un fichier efi pour Windows alors qu’on lui substitue le lanceur Refind. On repart de cette situation initiale déjà rencontrée : on a créé le dossier Refind à côté de celui de Microsoft :

Mon image

On commence par renommer, dans le dossier Refind, le fichier refind_x64.efi en bootmgfw.efi, ce qui correspond au nom du lanceur Windows. :

Mon image

On se rend ensuite dans le dossier Microsoft, et on fait remonter par couper /coller le dossier Boot intégralement au niveau supérieur pour qu’il s’ajoute à Refind et Microsoft :

Mon image

Inversement, on déplace le dossier Refind pour en faire un sous-dossier de Microsoft. On renomme le dossier Refind en Boot :

Mon image

On teste un redémarrage :

Mon image

On constate que l’entrée en Nvram « Windows Boot Manager » fait bien démarrer Refind, qui lui, est capable de lancer Xubuntu et Windows qu’il va chercher dans le dossier /efi/boot. On pzut vérifier que Windows démarre correctement, et une fenêtre EasyUEFI confirme que le PC croit avoir seulement Windows comme moyen pour démarrer :

Mon image

On a exactement le même retour qu’avant l’installation de Xubuntu.

5. Le cas du simple boot avec Nvram verrouillée

Dans le cas d’un simple boot (qui n’est pas mon sujet) avec Nvram verrouillée, une solution très acceptable, proche de la précédente, consiste à

  • créer un dossier Microsoft sur la partition efi,
  • placer le dossier Refind depuis la clé USB dans le /boot/efi/EFI/Microsoft
  • renommer le dossier Refind en Boot pour simuler la structure traditionnelle de Windows.
  • renommer le fichier refind_x64.efi en bootmgfw.efi

Le PC croira exécuter un lanceur Windows, et sera là encore trompé. Je ne développe pas car le principe est le même qu’aux points précédents.

 

Convertir Xubuntu UEFI vers Legacy sans redémarrage

La conversion d’une version installée d’une Xubuntu UEFI sur disque GPT vers une installation Legacy sur disque DOS peut, contre toute attente, être réalisée depuis une version installée sans aucun redémarrage. Tout se fait depuis une série de commandes via un Terminal.

Attention, cette démonstration est réalisée sur un PC virtuel. Les manipulations n’étant pas sans risque, avec un vrai PC, toutes les sauvegardes nécessaires doivent être réalisées au préalable. Et rien ne garantit la réussite du processus.

1. État initial : installation uefi

Un rapport boot-info est le meilleur moyen de voir la situation de départ : rapport boot-info initial.

Le résultat témoigne d’une installation UEFI classique sur un disque au  format GPT (GUID) :

 => No boot loader is installed in the MBR of /dev/sda.

sda1: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /EFI/ubuntu/grub.cfg /EFI/BOOT/fbx64.efi 
                       /EFI/BOOT/mmx64.efi /EFI/ubuntu/grubx64.efi 
                       /EFI/ubuntu/mmx64.efi /EFI/ubuntu/shimx64.efi

GUID Partition Table detected.

Et le boot en UEFI sur Grub  est bien contrôlé par la NVram :

=================== efibootmgr -v
BootCurrent: 0005
BootOrder: 0005,0001,0002,0004,0000,0003
Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0)	PciRoot(0x0)/Pci(0x10,0x0)/SCSI(0,0)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x5,0x0)/Sata(1,0,0)
Boot0002* EFI Network	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x1,0x0)/MAC(000c29852ae6,1)
Boot0003* EFI Internal Shell (Unsupported option)	MemoryMapped(11,0x537cb000,0x53b55fff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0004* cd-rom	PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x5,0x0)/Sata(1,0,0)/CDROM(1,0xde8,0x1d40)/File(efibootbootx64.efi)
Boot0005* ubuntu	HD(2,GPT,3e6d692a-8258-4cd4-ad13-16c3a9ec9a1f,0x800,0x7b000)/File(EFIubuntushimx64.efi)

=================== UEFI/Legacy mode:
BIOS is EFI-compatible, and is setup in EFI-mode for this installed-session.
SecureBoot maybe enabled. (maybe sec-boot, Veuillez indiquer ce message à boot.repair@gmail.com)

L’idée est donc de convertir tout cela en installation en Legacy sans redémarrer le PC, et ce pour éviter de passer par un chroot.

2.  Phase de suppression

2.1  Suppression de Grub version EFI

On fait le point sur ce que l’installation en UEFI a installé en matière de fichiers Grub et Shim :

test@test-virtual-machine:~$ dpkg --get-selections | grep grub
grub-common                    install
grub-efi-amd64                    install
grub-efi-amd64-bin                install
grub-efi-amd64-signed                install
grub2-common                    install

test@test-virtual-machine:~$ dpkg --get-selections | grep shim
shim                        install
shim-signed                    install
shimmer-themes                    install
test@test-virtual-machine:~$

L’objectif est de ne conserver que  grub-common et grub2-common :

test@test-virtual-machine:~$ sudo apt purge grub-efi-amd64-signed shim-signed shim
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
  mokutil
Veuillez utiliser « sudo apt autoremove » pour le supprimer.
Les paquets suivants seront ENLEVÉS :
  grub-efi-amd64-signed* shim* shim-signed*
0 mis à jour, 0 nouvellement installés, 3 à enlever et 219 non mis à jour.
Après cette opération, 9 037 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 199189 fichiers et répertoires déjà installés.)
Suppression de shim-signed (1.39+15+1533136590.3beb971-0ubuntu1) ...
Suppression de grub-efi-amd64-signed (1.115+2.02+dfsg1-12ubuntu2) ...
Suppression de shim (15+1533136590.3beb971-0ubuntu1) ...
(Lecture de la base de données... 199161 fichiers et répertoires déjà installés.)
Purge des fichiers de configuration de shim-signed (1.39+15+1533136590.3beb971-0ubuntu1) ...

La commande sudo apt autoremove étant demandée, on s’exécute :

test@test-virtual-machine:~$ sudo apt autoremove
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants seront ENLEVÉS :
  mokutil
0 mis à jour, 0 nouvellement installés, 1 à enlever et 219 non mis à jour.
Après cette opération, 71,7 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 199161 fichiers et répertoires déjà installés.)
Suppression de mokutil (0.3.0+1538710437.fb6250f-0ubuntu2) ...
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
test@test-virtual-machine:~$

Un bilan de la situation montre qu’il reste encore des choses à supprimer :

test@test-virtual-machine:~$ dpkg --get-selections | grep grub
grub-common                    install
grub-efi-amd64                    install
grub-efi-amd64-bin                install
grub2-common                    install

test@test-virtual-machine:~$ dpkg --get-selections | grep shim
shimmer-themes                    install

On s’exécute à nouveau :

test@test-virtual-machine:~$ sudo apt purge grub-efi-amd64
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  grub-efi-amd64-bin grub2-common
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets suivants seront ENLEVÉS :
  grub-efi-amd64*
0 mis à jour, 0 nouvellement installés, 1 à enlever et 219 non mis à jour.
Après cette opération, 187 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 199155 fichiers et répertoires déjà installés.)
Suppression de grub-efi-amd64 (2.02+dfsg1-12ubuntu2) ...
(Lecture de la base de données... 199151 fichiers et répertoires déjà installés.)
Purge des fichiers de configuration de grub-efi-amd64 (2.02+dfsg1-12ubuntu2) ...
test@test-virtual-machine:~$ 

test@test-virtual-machine:~$ sudo apt purge grub-efi-amd64-bin
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
  grub2-common
Veuillez utiliser « sudo apt autoremove » pour le supprimer.
Les paquets suivants seront ENLEVÉS :
  grub-efi-amd64-bin*
0 mis à jour, 0 nouvellement installés, 1 à enlever et 219 non mis à jour.
Après cette opération, 6 548 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 199151 fichiers et répertoires déjà installés.)
Suppression de grub-efi-amd64-bin (2.02+dfsg1-12ubuntu2) ...
test@test-virtual-machine:~$

Ce qui conduit au résultat qui nous satisfait enfin :

test@test-virtual-machine:~$ dpkg --get-selections | grep grub
grub-common                    install
grub2-common                   install

2.1. Suppression de la partition efi

Celle-ci n’ayant plus aucune utilité, on peut la supprimer. Fdisk fait parfaitement l’affaire :

test@test-virtual-machine:~$ sudo fdisk /dev/sda

Bienvenue dans fdisk (util-linux 2.33.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Commande (m pour l'aide) : p
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Disk model: VMware Virtual S
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 5265C1C1-D016-45AD-9443-44E588498AA9

Périphérique  Début      Fin Secteurs Taille Type
/dev/sda1      2048   505855   503808   246M Système EFI
/dev/sda2    505856 41881599 41375744  19,7G Système de fichiers Linux

Commande (m pour l'aide) : d
Numéro de partition (1,2, 2 par défaut) : 1

La partition 1 a été supprimée.

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Failed to remove partition 1 from system: Périphérique ou ressource occupé

The kernel still uses the old partitions. The new table will be used at the next reboot. 
Synchronisation des disques.

test@test-virtual-machine:~$

Un message d’erreur signale l’échec de la suppression, qui est pourtant bien réelle. Le résultat d’un sudo fdisk -l confirme que les choses se sont bien passées :

test@test-virtual-machine:~$ sudo fdisk -l
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Disk model: VMware Virtual S
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 5265C1C1-D016-45AD-9443-44E588498AA9

Périphérique  Début      Fin Secteurs Taille Type
/dev/sda2    505856 41881599 41375744  19,7G Système de fichiers Linux
test@test-virtual-machine:~$

2.3. Suppression du point de montage de la partition efi

La partition efi n’existant plus, il convient de supprimer ce qui pourrait engendrer un erreur. Pour la démonstration, j’utilise l’éditeur nano. On se contente d’ajouter un # devant le point de montage de la partition efi :

test@test-virtual-machine:~$ sudo nano /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=22e895b7-f8bb-45a0-83c2-51e005a030b0 /               ext4    errors=remoun$
/swapfile                                 none            swap    sw           $
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
# partition efi
#UUID=70C8-C8A7 /boot/efi       vfat    defaults        0       1

A ce stade, on a supprimé tout ce qui est inutile. On peut passer à la conversion du disque :

3. Conversion du disque au format dos (mbr)

L’outil gdisk est idéal pour cette étape. Rappel : les commandes sont simples, mais non sans risque. Des sauvegardes doivent avoir été effectuées au préalable.

test@test-virtual-machine:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): r

Recovery/transformation command (? for help): g

MBR command (? for help): w

Converted 1 partitions. Finalize and exit? (Y/N): y
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
test@test-virtual-machine:~$

On vérifie le résultat. Le disque est bien repassé au mode dos-mbr :

test@test-virtual-machine:~$ sudo fdisk -l
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Disk model: VMware Virtual S
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x00000000

Périphérique Amorçage  Début      Fin Secteurs Taille Id Type
/dev/sda2             505856 41881599 41375744  19,7G 83 Linux
test@test-virtual-machine:~$

Il ne reste plus qu’à réinstaller un grub cohérent pour notre nouvelle configuration.

4. Réinstallation de Grub-pc

4.1. Installation du paquet grub-pc

test@test-virtual-machine:~$ sudo apt install grub-pc
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  grub-gfxpayload-lists grub-pc-bin
Paquets suggérés :
  desktop-base
Les NOUVEAUX paquets suivants seront installés :
  grub-gfxpayload-lists grub-pc grub-pc-bin
0 mis à jour, 3 nouvellement installés, 0 à enlever et 219 non mis à jour.
Il est nécessaire de prendre 1 044 ko dans les archives.
Après cette opération, 3 617 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://fr.archive.ubuntu.com/ubuntu disco/main amd64 grub-pc-bin amd64 2.02+dfsg1-12ubuntu2 [902 kB]
Réception de :2 http://fr.archive.ubuntu.com/ubuntu disco/main amd64 grub-pc amd64 2.02+dfsg1-12ubuntu2 [138 kB]
Réception de :3 http://fr.archive.ubuntu.com/ubuntu disco/main amd64 grub-gfxpayload-lists amd64 0.7 [3 658 B]
1 044 ko réceptionnés en 2s (548 ko/s)        
Préconfiguration des paquets...
Sélection du paquet grub-pc-bin précédemment désélectionné.
(Lecture de la base de données... 198875 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../grub-pc-bin_2.02+dfsg1-12ubuntu2_amd64.deb ...
Dépaquetage de grub-pc-bin (2.02+dfsg1-12ubuntu2) ...
Sélection du paquet grub-pc précédemment désélectionné.
Préparation du dépaquetage de .../grub-pc_2.02+dfsg1-12ubuntu2_amd64.deb ...
Dépaquetage de grub-pc (2.02+dfsg1-12ubuntu2) ...
Sélection du paquet grub-gfxpayload-lists précédemment désélectionné.
Préparation du dépaquetage de .../grub-gfxpayload-lists_0.7_amd64.deb ...
Dépaquetage de grub-gfxpayload-lists (0.7) ...
Paramétrage de grub-pc-bin (2.02+dfsg1-12ubuntu2) ...
Paramétrage de grub-gfxpayload-lists (0.7) ...
Paramétrage de grub-pc (2.02+dfsg1-12ubuntu2) ...

A mi-installation, une fenêtre s’ouvre demandant où placer grub. On choisit /dev/sda :

 ┌───────────────────────┤ Configuration de grub-pc ├────────────────────────┐
 │ Le paquet grub-pc est en cours de mise à jour. Ce menu permet de choisir  │ 
 │ pour quels périphériques vous souhaitez exécuter la commande              │ 
 │ grub-install automatiquement.                                             │ 
 │                                                                           │ 
 │ Il est en général recommandé d'exécuter grub-install automatiquement,     │ 
 │ afin d'éviter la situation où l'image de GRUB est désynchronisée avec     │ 
 │ les modules de GRUB ou le fichier grub.cfg.                               │ 
 │                                                                           │ 
 │ Si vous n'avez pas la certitude du périphérique utilisé comme             │ 
 │ périphérique d'amorçage par le BIOS, il est en général conseillé          │ 
 │ d'installer GRUB sur l'ensemble des périphériques.                        │ 
 │                                                                           │ 
 │ Veuillez noter que GRUB peut également être installé sur les secteurs     │ 
 │ d'amorçage de partitions. Certaines partitions où cela pourrait être      │ 
 │ nécessaire sont indiquées ici. Cependant, cela impose que GRUB utilise    │ 
 │ le mécanisme « blocklist », ce qui le rend moins fiable et n'est donc     │ 
 │ pas recommandé.                                                           │ 
 │                                                                           │ 
 │ Périphériques où installer GRUB :                                         │ 
 │                                                                           │ 
 │    [x] /dev/sda (21474 Mo; VMware_Virtual_S)                              │ 
 │    [ ] /dev/sda2 (21184 Mo; VMware_Virtual_S)                             │ 
 │                                                                           │ 
 │                                                                           │ 
 │                                  <Ok>                                     │ 
 │ __________________________________________________________________________

L’installation se termine ainsi :

Creating config file /etc/default/grub with new version
Installation pour la plate-forme i386-pc.
Installation terminée, sans erreur.
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.0.0-27-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-27-generic
Image Linux trouvée : /boot/vmlinuz-5.0.0-13-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-13-generic
fait
Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
test@test-virtual-machine:~$

4. 2. Installation de grub et mise à jour

test@test-virtual-machine:~$ sudo grub-install /dev/sda
Installation pour la plate-forme i386-pc.
Installation terminée, sans erreur.

test@test-virtual-machine:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.0.0-27-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-27-generic
Image Linux trouvée : /boot/vmlinuz-5.0.0-13-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-13-generic
fait
test@test-virtual-machine:~$

5. Vérifications de l’installation

5.1. Vérifications avant un redémarrage

C’est le moment de faire un nouveau rapport boot-info avant de redémarrer le PC : boot-info avant redémarrage.

On constate que plusieurs choses ont changé :

  • Un grub a bel et bien été ajouté dans le mbr
============================= Boot Info Summary: =============================== 
=> Grub2 (v2.00) is installed in the MBR of /dev/sda and looks at sector 1 of the 
same hard drive for core.img. core.img is at this location and looks for 
(,msdos2)/boot/grub. It also embeds following components:
  • Le disque est bien reconnu comme un disque dos dans grub.cfg
set root='hd0,msdos2'

Mais, on a encore de nombreuses traces de notre démarrage en UEFI, notamment les points de montage et l’enregistrement du démarrage :

================================ Mount points: ================================= 
Device Mount_Point Type Options 
/dev/sda1 /boot/efi vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) 
/dev/sda2 / ext4 (rw,relatime,errors=remount-ro)

=================== UEFI/Legacy mode: 
BIOS is EFI-compatible, and is setup in EFI-mode for this installed-session.

Mais Grub a compris que notre installation est passée en mode Legacy

=================== Suggested repair 
The default repair of the Boot-Repair utility would reinstall the grub2 of sda2 
into the MBR of sda. 
Grub-efi would not be selected by default because: no-win-efi

Si on souhaitait réparer, ce qui n’est pas nécessaire, la réparation serait satisfaisante. Nous nous contenterons de redémarrer.

5.2. Vérification après redémarrage

Le redémarrage se fait bien sûr en mode Legacy, après modification du bios. Un nouveau rapport boot-info nous dévoile la situation finale : boot-info final.

  •  Xubuntu est bien exécuté en mode Legacy
=================== UEFI/Legacy mode: 
This installed-session is not in EFI-mode. 
SecureBoot disabled

sda	: not-GPT,	BIOSboot-not-needed,	has-no-EFIpart, 	not-usb,	not-mmc, has-os,	2048 sectors * 512 bytes

Les traces de l’installation en uefi ont intégralement disparu.

 

Convertir une Xubuntu 19.04 de mbr à gpt

Si on a un PC récent qui supporte l’UEFI et qu’on a installé son Linux en Legacy, on peut être intéressé par une conversion d’un disque dos (mbr) vers le format gpt, mais on n’a pas forcément envie de réinstaller son OS.

Avec Windows, il existe une commande « clé en main », mais avec Ubuntu, Comment faire ?

1. Situation de départ

On part d’une installation d’Ubuntu 19.04 64 bits faite en Legacy sur un disque au format dos (autrement dit mbr). Je n’ai pas jugé nécessaire de faire un rapport boot-info, et je me suis contenté d’une capture d’écran de ce que gparted présente dans le cas d’une installation simple :

Mon image

On note que l’installation ne comporte qu’une seule partition ext4 (contenant le système et le /home), et que le disque est au format dos (mbr).

2. Les modifications depuis le liveCD

Aucune modification sérieuse n’étant possible depuis une version, installée, on va redémarrer sur le liveCD (en mode Legacy ou UEFI, c’est sans importance pour l’instant) afin de procéder aux principales modifications.

2.1. Conversion du disque au format gpt

Pour cette opération, on va utiliser le partitionneur gdisk. On lui associe le disque concerné, en l’occurrence /dev/sda :

sudo gdisk /dev/sda

Une série d’informations nous signale que nous sommes en présence d’un disque mbr. Une commande est attendue. Un simple « w » confirmé par un « y » va suffire à convertir le disque au format gpt :

Mon image

 

Et c’est tout ! Le disque est instantanément converti au format GPT par gdisk.

2.2. Ajout d’une partition EFI

2.2.1. Rétrécissement de la partition Ubuntu

Il est bien clair que la conversion n’aurait aucun intérêt sans partition EFI. Il va falloir la créer. L’option choisie ici est de la placer en tête de disque. Avec gparted, on va donc rétrécir la partition Ubuntu par la gauche.

Mon image

Les fichiers étant déplacés, l’opération dure un certain temps, comme le montre la seconde capture d’écran :

Mon image

2.2.2. Création d’une partition fat32

Sur l’espace libre du disque qui est bel et bien passé au format gpt, on va choisir de créer une partition  principale formatée en fat32.

Mon image

Elle recevra automatiquement l’identifiant /dev/sda2 de manière assez logique, ce que montre la capture d’écran qui suit.

2.2.3. Attribution du statut efi à la partition fat32

Lorsque c’est fait, on lui attribue par clic droit les drapeaux boot et esp (ils sont conjoints) :

Mon image

Notre disque est prêt sur le plan de sa structure d’ensemble. Mais pour l’instant, notre Ubuntu n’est toujours pas capable de fonctionner en UEFI.

2.3. Ajout de l’UUID de la partition efi dans le fichier fstab

Pour éviter de passer ultérieurement par un montage manuel de la partition efi dans /boot/efi, il sera judicieux de l’automatiser tout de suite. La partition efi créée ayant reçu automatiquement une UUID (une idenfication)  : autant s’en servir. La commande suivante est là pour nous renseigner :

blkid

L’UUID de la partition /dev/sda2 étant 3C87-F1BE (Cf. image suivante), il va falloir copier cette référence, et l’ajouter au fichier /etc/fstab. Pour ce faire, on va créer un nouveau dossier, monter la partition Ubuntu dans ce dossier, et ouvrir le fichier fstab avec l’éditeur de texte de sa distribution (ici, c’est « mousepad« ) en administrateur en saisissant :

sudo mkdir /mnt/sda1
sudo mount /dev/sda1 /mnt/sda1
sudo mousepad /mnt/sda1/etc/fstab

Et dans le fichier texte qui s’est ouvert, on ajoute les deux lignes suivantes :

# partition efi
UUUID=3C87-F1BE      /boot/efi      /vfat     /defaults     0      1

On indique en fait au système qu’il  doit monter automatiquement cette partition dans /boot/efi à chaque démarrage d’Ubuntu. L’ensemble donne ceci :

Mon image

A ce stade, notre disque et notre système sont prêts pour la dernière étape : la modification de grub.

3. Passage de Grub pour Legacy à Grub pour UEFI

3.1. Démarrage du système en UEFI via un outil externe

Maintenant, il faut modifier son bios pour le passer du mode Legacy au mode UEFI (ici, chaque marque étant particulière, il est impossible de donner une explication sinon que ça se joue généralement dans l’onglet « boot »).

Lorsque c’est fait, on doit pouvoir lancer son LiveCD en mode UEFI. Mais ce moyen étant fastidieux (car on devra passer par un chroot pour réécrire grub, ce qui augmentera le nombre de commandes), on peut choisir d’utiliser le CD de « REfind » ou de « SuperGrub2disk » qui sont capables de lancer notre Ubuntu installé directement en UEFI via son noyau. C’est le cas ici avec le CD REfind :

Mon image

Grâce à lui, nous allons travailler directement en UEFI sur la version installée. En choisissant l’option proposée, nous nous retrouvons sur le bureau de notre Ubuntu 19.04 en version installée.

3.2. Suppression des fichiers grub

L’installation d’Ubuntu Legacy ayant inséré des fichiers grub pour ce mode, il convient de les supprimer. La commande est la suivante :

sudo apt purge grub-pc

La commande  nous invitant à ajouter la commande suivante,  nous nous exécutons :

sudo apt autoremove

Le résultat des deux commandes est le suivant :  

Mon image

A cet instant, l’installation ne possède plus aucun Grub installé. On pourrait très bien le remplacer par Elilo, Refind ou autre lanceur capable de fonctionner en UEFI. Restons-en à Grub.

3.3. Installation des fichier efi de Grub

Cette partie est la plus délicate, car de version en version de Grub, on est confronté à des variantes, et pour trouver des informations fiables, ce n’est pas toujours simple. Cette fois, j’ai trouvé les commandes assez rapidement (dans mes propres essais précédents, en fait), pour récupérer les paquets nécessaires :

sudo apt install grub-efi-amd64-signed shim shim-signed

Mon image

Grub et Shim sont nécessaires, notamment si on utilise un PC avec le secure-boot activé. Puis, installation de grub et mise à jour :

sudo grub-install /boot/efi
sudo update-grub

L’installation de tout cela se déroule sans encombre :

Mon image

Notre Ubuntu est prêt à fonctionner. Un redémarrage confirme que tout s’est bien passé. Et de même pour le rapport boot-info récapitulatif.

A noter que l’opération inverse est également faisable, et qu’on peut le faire avec Windows, et même avec un dual-boot.

Ubuntu sur USB ou disque indépendant de Windows en UEFI

Une des demandes fréquentes sur les forums est de savoir comment installer en mode UEFI un Linux sur un support USB ou sur un disque secondaire, sans impacter  l’état et le fonctionnement de son Windows préinstallé. On pourra faire la même expérience pour une installation en Legacy.

I. Installation standard sur un disque secondaire de Xubuntu 19-04

On va partir d’un Windows 10 (pré)installé auquel on ajoute un disque secondaire destiné à recevoir une installation Linux. Le disque secondaire a été préalablement formaté et converti au format gpt depuis ce même Windows, mais c’est parfaitement faisable depuis Linux, avec le logiciel gparted.

La situation initiale est donc la suivante :

Mon image

 1. Essai échoué (!!!) d’installation directe avec l’outil Ubuntu intégré

La première chose à faire est de booter en uefi sur le LiveUSB. On peut vérifier qu’on est bien dans ce mode via la commande suivante qui doit retourner « session efi » :

[ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non-EFI"

Si c’est bien le cas, on lance le processus d’installation, jusqu’à obtenir un choix proposant plusieurs types d’installation. Pour maîtriser au mieux la situation, on choisit « autre chose ». Dans mon cas, j’obtiens ceci :

Mon image

Le disque sdb est mon disque vide, je vais donc l’utiliser pour créer deux partitions (avec la touche +) : une partition efi de 100 Mo en fat32, et une partition ext4 avec le point de montage / avec le reste.

Ce qui donne ceci :

Mon image

Avant de lancer le processus, je précise à mon installateur de choisir sdb pour y placer grub pour être sûr de ne pas me retrouver avec un grub dans sda.

Mon image

Comme tout semble bon, on se lance. L’installation se fait de la manière habituelle et au redémarrage, on trouve un grub qui me propose de lancer tout ce que j’ai dans le PC, ce qui déjà n’est pas exactement ce que je souhaitais. Des entrées inutiles insérées dans grub vont être à supprimer.

Mon image

Ensuite, le passage par un rapport boot-info me présente d’autres surprises :

sda2: File system:       vfat
    Operating System:  
    Boot files:        /EFI/ubuntu/grubx64.efi /EFI/ubuntu/mmx64.efi 
                       /EFI/ubuntu/shimx64.efi 
                       /EFI/Microsoft/Boot/bootmgfw.efi 

sdb2: File system:       vfat
    Boot sector type:  FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:

Mes fichiers grub se sont logés, malgré ma demande (!!!), non pas dans la partition efi de mon disque sdb mais dans sda2 , qui est d’ailleurs montée dans fstab.

=================="blkid" output: 
/dev/sda2        6205-ABC5                              vfat       
/dev/sdb2        0EE5-E1D5                              vfat

=================== sdb3/etc/fstab: 
UUID=1c312bcb-c662-47de-913d-558d3696bc9b /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda2 during installation
UUID=6205-ABC5  /boot/efi       vfat    umask=0077      0       1
/swapfile                                 none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

Là encore, les choses ne sont pas celles attendues. Comment réparer cela ?

2. Réparation des dysfonctionnements liés à l’installation directe

La première chose à faire, c’est de faire comprendre à Ubuntu qu’on veut utiliser la partition efi de sdb et non celle de sda. Pour ce faire, on va modifier le fichier /etc/fstab pour que soit montée au démarrage suivant la bonne partition. Le résultat de blkid dans boot-info nous donne son uuid. Il suffit donc de réaliser une simple substitution, en l’occurrence :

Mon image

Une fois la chose faite, on va redémarrer Ubuntu pour que ce montage soit appliqué. On pourra vérifier que la partition sdb2 est bien montée en allant voir le contenu de /boot/efi qui doit être vide.

Mon image

On peut donc passer à la suite : on réinstalle grub via la commande :

sudo grub-install

Puis, on désactive le fichier 30_os-prober pour ne plus exécuter les entrées non désirées.

sudo chmod -x /etc/grub.d/30_os-prober

Et enfin, on met grub à jour :

sudo update-grub

Le résultat est le suivant :

Mon image

Au redémarrage, on a bien une entrée pour Ubuntu et les entrées inutiles ont disparu. Il nous reste à nettoyer les entrées obsolètes de grub dans la partition efi de sda, en l’occurrence (selon mon rapport boot-info)  sda2. On monte la partition, et on supprime le dossier ubuntu et on vérifie le résultat. Si c’est bon, on démonte la partition.

sudo mkdir /mnt/sda2
sudo mount /dev/sda2 /mnt/sda2
sudo rm -fr /mnt/sda2/EFI/ubuntu
ls /mnt/sda2/EFI
sudo umount /mnt/sda2
sudo rm -fr /mnt/sda2

En image, on obtient ceci :

Mon image

Notre Ubuntu est bien installé de manière autonome sur la clé, ce que confirme notre nouveau rapport boot-info.

La partition sda2 est débarrassée des fichiers grub :

sda2: File system:       vfat
    Operating System:  
    Boot files:        /EFI/Boot/bootx64.efi /EFI/Boot/fbx64.efi 
                       /EFI/Boot/mmx64.efi /EFI/Microsoft/Boot/bootmgfw.efi 
                       /EFI/Microsoft/Boot/bootmgr.efi 
                       /EFI/Microsoft/Boot/memtest.efi

Ils sont bien présents sur sdb2 :

sdb2: File system:       vfat
    Operating System:  
    Boot files:        /EFI/ubuntu/grub.cfg /EFI/BOOT/fbx64.efi 
                       /EFI/BOOT/mmx64.efi /EFI/ubuntu/grubx64.efi 
                       /EFI/ubuntu/mmx64.efi /EFI/ubuntu/shimx64.efi

Et le démarrage prend bien en priorité mon installation de Linux, puis celle de Windows, chacun étant sur une partition efi différente :

=================== efibootmgr -v
BootCurrent: 0005
Timeout: 2 seconds
BootOrder: 0005,0010,000C,000D,000E,000F,0011

Boot0005* ubuntu	HD(2,GPT,dae2fbc5-e304-42f5-840c-1054ae1500f8,0x8000,0x2f800)/File(EFIubuntushimx64.efi)
Boot0010* Windows Boot Manager	HD(2,GPT,ffcaac27-7335-49f8-8028-b198618d7559,0x96800,0x31800)/File(EFIMicrosoftBootbootmgfw.efi)

Si on débranche, supprime, ou formate le disque sdb, Windows reprendra la main automatiquement comme avant l’installation d’Ubuntu, ce qui est nécessaire pour effectuer la seconde démo.

Mais n’était-il pas possible d’éviter toute cette fastidieuse manipulation ?

II. Installation d’Ubuntu sur disque externe ou usb sans réparation

La situation de départ est la même que pour le point I. A savoir, on dispose d’un disque vierge sur lequel on souhaite installer Ubuntu en uefi de manière indépendante :

Mon image

Cette fois, on va d’abord passer par gparted pour effectuer quelques modifications sur le disque sda. En cliquant droit sur la partition efi, ici sda2, et en choisissant l’option « manage flags« , on peut modifier la partition efi pour qu’elle semble n’être qu’une partition de données en fat32. On décoche l’option boot et l’option esp. Le résultat sera conforme à ceci :

Mon image

Mais attention !!!!

A cet instant, Windows n’est plus capable de booter !!! Nous devrons le réparer pour le rendre à nouveau fonctionnel !!!!

On va dès lors retenter une installation dans les mêmes conditions qu’au point 1. Type de partitionnement : « Autre chose« . Et on crée une partition efi de 100 Mo en fat32 et une partition ext4 avec point de montage / sur le reste du disque. On choisit /dev/sdb pour y placer son grub.

L’installation se fait sans problème, et on n’a plus qu’à faire un rapport boot-info pour voir le résultat.

La situation est nettement meilleure. Les fichiers grub sont bien installés dans la bonne partition (sdb1) et la NVram est programmée pour démarrer sur cette installation toute fraîche. Mais il reste plusieurs choses à corriger :

  • Windows ne pouvant plus démarrer, on va réactiver les drapeaux ESP et Boot pour redonner à sda2 son statut efi avec l’option « manage flags » par clic droit sur sda2. Il sera alors possible de redémarrer pour régler le second problème :

 Mon image

  • Dans mon cas, puisque j’ai d’autres Linux déjà installés, Grub s’est paramétré pour lancer les noyaux de Fedora et Mint présents sur sda, ce que je ne souhaite pas : on va donc désactiver os-prober, comme on l’a fait dans le premier point, via la commande sudo chmod  et on met grub à jour :

Mon image

Cette situation ne se produira pas si on n’a pas d’autre Linux sur le PC. La situation finale est alors la même qu’au premier point. Notre Linux pourra booter sans nuire à Windows qui reprendra la main dès que ce disque sdb sera débranché.