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.