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, 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. 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 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é.