Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/04/2022, à 17:32

Diamant40

Installation d'Ubuntu 21.10 échoue

Bonjour,
J'essaie (pour tester) d'installer Ubuntu 21.10 mais cela échoue
Je crois qu'il y a un souci dans les partitions du disque sda car Ubuntu veut installer sur Sda 7 mais celle ci est incluse dans la partition étendue Sda 3 qui inclue sda5 (win 10), sda6, et sda7 et je ne vois pas pourquoi.
J'ai d'ailleurs d'autres soucis au lancement de Win 7
Je vous joins l'image de Gparted.
https://zupimages.net/viewer.php?id=22/14/ji3y.png
ji3y.png
Merci pour vos avis


Chacun à sa place, chaque chose en son temps, et tout ira bien.

Hors ligne

#2 Le 07/04/2022, à 17:49

iznobe

Re : Installation d'Ubuntu 21.10 échoue

Bonjour , si tu ne dis pas pourquoi ca echoue ca va pas etre facile de dire quoi faire .
Vu l ' image de gparted , tu n' as qu ' une seule et unqiue partition ou ubuntu peut s ' installer et c' sda7 ( la seule en ext4 ) format compatible avec ubuntu .

Le probleme doit etre ailleurs .
lors de l ' etape du partitionnement , il te suffit de selectionner " autre chose " , puis tu indiques alors la partition sda7 comme partition a utilisé .
tu lui attribues le point de montage " / " .
tu ne touches a rien d ' autre , et tu valides tout .
Normalement ca devrait s ' installer . sinon il faut donner plus d' infos sur le moment ou ca ne va pas : ce que tu vois a l' ecran , si un message apparait  , nous dire lequel  , bref le maximum d' infos possibles .

Dernière modification par iznobe (Le 07/04/2022, à 17:50)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 07/04/2022, à 17:58

Qid

Re : Installation d'Ubuntu 21.10 échoue

iznobe a écrit :

tu indiques alors la partition sda7 comme partition a utilisé .
tu lui attribues le point de montage " / " .
tu ne touches a rien d ' autre , et tu valides tout .
Normalement ca devrait s ' installer .

Je suis assez d'accord avec ça... Perso je me demande juste ce que fait une partition de boot en théorie efi au milieu de tout ce bazar...


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#4 Le 07/04/2022, à 20:21

Diamant40

Re : Installation d'Ubuntu 21.10 échoue

Bonsoir et merci de vous intéresser à ce petit problème...
L'installation se déroule bien jusqu'à presque la fin:
On arrive à l'exécution de grub-install/dev/sda.
Et là: "impossible d'installer GRUB dans /dev/sda"
Grub-install a échoué. (sans plus de détails) Erreur fatale.
Ubuntu est installé en mémoire haute mais on le perd, bien sûr, si on arrête la machine.
Voilà, j'avais déjà installé avec succès Ubuntu 21.10 sur cette même partition et j'avais sauvegardé mon Home.
Mais il a planté, sans doute à cause de soucis avec le démarrage de Win 7 ....
J'ai par ailleurs Ubuntu 20.04.2 sur cette même machine, sur un D.D. différent, ce n'est donc pas la cata.
Je voulais expérimenter la version 21.10, non LTS. et comparer.
Merci encore.
@+


Chacun à sa place, chaque chose en son temps, et tout ira bien.

Hors ligne

#5 Le 07/04/2022, à 21:15

iznobe

Re : Installation d'Ubuntu 21.10 échoue

c' est effectivement plutot curieux . je ne sais pas si on peut placer des partitions boot esp dans des partitions etendues sans s ' exposer a des soucis , ni si c' est lié a cela .
Je suppose que la 20.04 sur l' autre disque est aussi installé en mode legacy ?
Peut etre que  fournir un boot-info pour analyser la situation plus en profondeur pourrait aider :

sudo add-apt-repository -y ppa:yannubuntu/boot-repair ; sudo apt update ; sudo apt install -y  boot-info ; boot-info

Cela dit , d ' ici une 15 aine de jours , ce sera la sortie de la 22.04 LTS , il est a mon avis plus interressant de tester la nouvelle distrib LTS , plutot qu ' une version intermediaire qui a une durée de vie de 9 mois seulement .

Les versions intermediaires sont un peu des " plans " pour la future LTS .

Dernière modification par iznobe (Le 07/04/2022, à 22:15)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#6 Le 07/04/2022, à 22:08

Qid

Re : Installation d'Ubuntu 21.10 échoue

Je vote pour le boot-info parce-que effectivement le GRUB qui refuse de s'installer est un classique... Facilement contournable mais classique... Enfin en général c'est bien un souci de voisinage...


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#7 Le 08/04/2022, à 13:06

Diamant40

Re : Installation d'Ubuntu 21.10 échoue

Merci pour vos conseils.
J'ai lancé un Boot Repair pour, en finale ne plus redémarrer du tout. ("Grub trescue...")
Minimal BASH-like line editing is supported. For the first word, TAB lists possible commnd completions. Anyuwhere else TAB lists possible devive or file completions.
Je pense, d'abord, qu'il faut une bonne expérience et être méticuleux, ce que je pensais être mais pas avoir.....pour installer quatre O.S. sur un PC tour....
Malgré deux tentatives dont une avec 64 bits Failsafe qui m'a conduit à des commandes inconnues à lancer via la console.
Alors au lieu de se faire des noeuds au cerveau (surtout vous !) je pense formater mon D.D. Sda de 1,5 To
et réinstaller Win 10 et Ubuntu 20.04 dont j'ai les clés USB et les sauvegardes.
A toutes fins utiles je joins le dernier boot-info: http://paste.ubuntu.com/p/y8VctHsqbD/.
Qu'en pensez vous ?


Chacun à sa place, chaque chose en son temps, et tout ira bien.

Hors ligne

#8 Le 08/04/2022, à 15:23

Diamant40

Re : Installation d'Ubuntu 21.10 échoue

J'y reviens....
ça redémarre.
GRUB était désigné pour démarrer depuis Sda 7 (Ubuntu 21.10), mais, comme j'avais du mal à le démarrer, j'avais formaté cette partition..On pouvait tjrs y chercher GRUB !
Avec boot-repair j'ai redéfini son emplacement (sur Sdb 6 (Ubuntu 20.04.2)
Donc démarrage avec le GRUB.
Ubuntu 20.04.2 démarre bien, Mais sur Sda, Windows 7 démarre mais au travers d'un choix proposé entre lui et Win 10.récupéré ? (il y a deux partitions Win 7 sur Sda, peut être Win 7 et sa sauvegarde par HP)
Par contre W10 ne démarre pas correctement et demande à être réparé avec le CD d'installation, mais le support étant une clé USB ça coince....
Je crois qu'il va falloir là aussi formater sa partition Sda5 et réinstaller
Je vous tiens au courant si je patauge trop.....


Chacun à sa place, chaque chose en son temps, et tout ira bien.

Hors ligne

#9 Le 08/04/2022, à 15:30

iznobe

Re : Installation d'Ubuntu 21.10 échoue

voici le boot-info du #7 :

boot-repair-4ppa200                                              [20220408_1148]

============================= Boot Repair Summary ==============================




Default settings: ______________________________________________________________

The default repair of the Boot-Repair utility would reinstall the grub2 of
sda7 into the MBR of sda.
Grub-efi would not be selected by default because legacy Windows detected.
Additional repair would be performed: unhide-bootmenu-10s win-legacy-basic-fix

Final advice in case of suggested repair: ______________________________________

Please do not forget to make your BIOS boot on sda (ATA WDC WD15EARS-60M) disk!

User settings: _________________________________________________________________

The settings chosen by the user will restore the [(generic mbr)] MBR in sda, and make it boot on sda2.
Additional repair will be performed: unhide-bootmenu-10s win-legacy-basic-fix


Quantity of real Windows: 2

============================== Restore MBR of sda ==============================

dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda
parted /dev/sda set 2 boot on
Information: Ne pas oublier de mettre à jour /etc/fstab si nécessaire.


                                                                          
SET@_label0.set_text('''Faire apparaitre le menu de démarrage. Cela peut prendre plusieurs minutes...''')

Le démarrage de l'ordinateur a été correctement réparé.

Vous pouvez maintenant redémarrer votre ordinateur.


============================ Boot Info After Repair ============================

 => Syslinux MBR (5.00 and higher) is installed in the MBR of /dev/sda.
 => Grub2 (v2.00) is installed in the MBR of /dev/sdb and looks at sector 1 of 
    the same hard drive for core.img. core.img is at this location and looks 
    for (,msdos6)/boot/grub. It also embeds following components:
    
    modules
    ---------------------------------------------------------------------------
    fshelp ext2 part_msdos biosdisk
    ---------------------------------------------------------------------------
 => Windows 7/8/10/11/2012 is installed in the MBR of /dev/sdc.

sda1: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows 7/2008: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /bootmgr /Boot/BCD

sda2: __________________________________________________________________________

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

sda3: __________________________________________________________________________

    File system:       Extended Partition
    Boot sector type:  Unknown
    Boot sector info: 

sda5: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows 8/10/11/2012: NTFS
    Boot sector info:  According to the info in the boot sector, sda5 starts 
                       at sector 2048.
    Operating System:  Windows 10 or 11
    Boot files:        /Windows/System32/winload.exe

sda6: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  FAT32
    Boot sector info:  According to the info in the boot sector, sda6 starts 
                       at sector -1687840768. But according to the info from 
                       fdisk, sda6 starts at sector 2607126528.
    Operating System:  
    Boot files:        /efi/BOOT/fbx64.efi /efi/BOOT/mmx64.efi 
                       /efi/ubuntu/grubx64.efi /efi/ubuntu/mmx64.efi 
                       /efi/ubuntu/shimx64.efi /efi/ubuntu/grub.cfg

sda7: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 21.10
    Boot files:        /boot/grub/grub.cfg /etc/fstab /etc/default/grub 
                       /boot/grub/i386-pc/core.img

sda4: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows 7/2008: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /bootmgr /boot/bcd

sdb1: __________________________________________________________________________

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

sdb2: __________________________________________________________________________

    File system:       Extended Partition
    Boot sector type:  Unknown
    Boot sector info: 

sdb5: __________________________________________________________________________

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

sdb6: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 20.04.4 LTS
    Boot files:        /etc/fstab /boot/grub/i386-pc/core.img

sdb3: __________________________________________________________________________

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

sdc1: __________________________________________________________________________

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


================================ 7 OS detected =================================

OS#1:   Windows 10 (boot) on sda1
OS#2:   Windows 7 on sda2
OS#3:   Windows Recovery Environment (boot) on sda4
OS#4:   Ubuntu 21.10 on sda7
OS#5:   Windows 10 (boot) on sdb1
OS#6:   Ubuntu 20.04.4 LTS on sdb6
OS#7:   Windows 10 or 11 on sda5

================================ Host/Hardware =================================

CPU architecture: 64-bit
Video: Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM] from Advanced Micro Devices, Inc. [AMD/ATI]
Live-session OS is Ubuntu 64-bit (Boot-Repair-Disk 64bit 20200604, bionic, x86_64)

===================================== UEFI =====================================

BIOS/UEFI firmware: 6.07 from American Megatrends Inc.
This live-session is in Legacy/BIOS/CSM mode (not in EFI mode).


c152ec201c37b6e97bbc2207e49d1271   sda6/BOOT/fbx64.efi
fdafb5eece6caeccb788c946a28e6872   sda6/BOOT/mmx64.efi
eca92010a3d461e0f52639d330f3f43d   sda6/ubuntu/grubx64.efi
fdafb5eece6caeccb788c946a28e6872   sda6/ubuntu/mmx64.efi
728124f6ec8e22fbdbe7034812c81b95   sda6/ubuntu/shimx64.efi
728124f6ec8e22fbdbe7034812c81b95   sda6/BOOT/BOOTX64.efi
c152ec201c37b6e97bbc2207e49d1271   sdb3/BOOT/fbx64.efi
fdafb5eece6caeccb788c946a28e6872   sdb3/BOOT/mmx64.efi
eca92010a3d461e0f52639d330f3f43d   sdb3/ubuntu/grubx64.efi
fdafb5eece6caeccb788c946a28e6872   sdb3/ubuntu/mmx64.efi
728124f6ec8e22fbdbe7034812c81b95   sdb3/ubuntu/shimx64.efi
728124f6ec8e22fbdbe7034812c81b95   sdb3/BOOT/BOOTX64.efi

============================= Drive/Partition Info =============================

Disks info: ____________________________________________________________________

sda	: notGPT,	no-BIOSboot,	has---ESP, 	not-usb,	not-mmc, has-os,	has-win,	2048 sectors * 512 bytes
sdb	: notGPT,	no-BIOSboot,	has---ESP, 	not-usb,	not-mmc, has-os,	no-wind,	2048 sectors * 512 bytes
sdc	: notGPT,	no-BIOSboot,	has-noESP, 	not-usb,	not-mmc, no-os,	no-wind,	2048 sectors * 512 bytes

Partitions info (1/3): _________________________________________________________

sda1	: is-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	not-far
sda2	: is-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sda4	: is-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sda5	: is-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sda6	: no-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sda7	: is-os,	64, apt-get,	signed grub-pc grub-efi ,	grub2,	grub-install,	grubenv-ok,	update-grub,	farbios
sdb1	: is-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	not-far
sdb3	: no-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sdb5	: no-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	not-far
sdb6	: is-os,	64, apt-get,	grub1 ,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios
sdc1	: no-os,	32, nopakmgr,	no-docgrub,	nogrub,	nogrubinstall,	no-grubenv,	noupdategrub,	farbios

Partitions info (2/3): _________________________________________________________

sda1	: isnotESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	bootmgr,	is-winboot
sda2	: isnotESP,	part-has-no-fstab,	no-nt,	haswinload,	no-recov-nor-hid,	bootmgr,	is-winboot
sda4	: isnotESP,	part-has-no-fstab,	no-nt,	no-winload,	recovery-or-hidden,	bootmgr,	is-winboot
sda5	: isnotESP,	part-has-no-fstab,	no-nt,	haswinload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sda6	: is---ESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sda7	: isnotESP,	fstab-without-efi,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sdb1	: isnotESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	bootmgr,	is-winboot
sdb3	: is---ESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sdb5	: isnotESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sdb6	: isnotESP,	fstab-without-efi,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot
sdc1	: isnotESP,	part-has-no-fstab,	no-nt,	no-winload,	no-recov-nor-hid,	no-bmgr,	notwinboot

Partitions info (3/3): _________________________________________________________

sda1	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sda
sda2	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sda
sda4	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sda
sda5	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sda
sda6	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sda
sda7	: not--sepboot,	with-boot,	fstab-without-boot,	not-sep-usr,	with--usr,	fstab-without-usr,	std-grub.d,	sda
sdb1	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sdb
sdb3	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sdb
sdb5	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sdb
sdb6	: not--sepboot,	with-boot,	fstab-without-boot,	not-sep-usr,	with--usr,	fstab-without-usr,	customized,	sdb
sdc1	: not--sepboot,	no---boot,	part-has-no-fstab,	not-sep-usr,	no---usr,	part-has-no-fstab,	no--grub.d,	sdc

fdisk -l (filtered): ___________________________________________________________

Disk sda: 1.4 TiB, 1500301910016 bytes, 2930277168 sectors
Disk identifier: 0x23c737d2
      Boot      Start        End    Sectors   Size Id Type
sda1             2048     206847     204800   100M  7 HPFS/NTFS/exFAT
sda2  *        206848 1450433243 1450226396 691.5G  7 HPFS/NTFS/exFAT
sda3       1451485182 2904973311 1453488130 693.1G  5 Extended
sda4       2904973312 2930274303   25300992  12.1G  7 HPFS/NTFS/exFAT
sda5       1451485184 2607124479 1155639296 551.1G  7 HPFS/NTFS/exFAT
sda6       2607126528 2608175103    1048576   512M ef EFI (FAT-12/16/32)
sda7       2608177152 2904973311  296796160 141.5G 83 Linux
Partition table entries are not in disk order.
Disk sdb: 176 GiB, 189018780672 bytes, 369177306 sectors
Disk identifier: 0x8ad00e56
      Boot     Start       End   Sectors  Size Id Type
sdb1  *         2048    104447    102400   50M  7 HPFS/NTFS/exFAT
sdb2       161916926 367075327 205158402 97.8G  5 Extended
sdb3       368125952 369176575   1050624  513M ef EFI (FAT-12/16/32)
sdb5       161916928 162967551   1050624  513M  b W95 FAT32
sdb6       162969600 367075327 204105728 97.3G 83 Linux
Partition table entries are not in disk order.
Disk sdc: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk identifier: 0xe0c886a1
      Boot Start       End   Sectors   Size Id Type
sdc1  *     2048 718905343 718903296 342.8G  7 HPFS/NTFS/exFAT
Disk zram0: 983.9 MiB, 1031667712 bytes, 251872 sectors
Disk zram1: 983.9 MiB, 1031667712 bytes, 251872 sectors

parted -lm (filtered): _________________________________________________________

sda:1500GB:scsi:512:4096:msdos:ATA WDC WD15EARS-60M:;
1:1049kB:106MB:105MB:ntfs::;
2:106MB:743GB:743GB:ntfs::;
3:743GB:1487GB:744GB:::;
5:743GB:1335GB:592GB:ntfs::;
6:1335GB:1335GB:537MB:fat32::boot, esp;
7:1335GB:1487GB:152GB:ext4::;
4:1487GB:1500GB:13.0GB:ntfs::;
sdb:189GB:scsi:512:512:msdos:ATA ST3200822AS:;
1:1049kB:53.5MB:52.4MB:ntfs::boot;
2:82.9GB:188GB:105GB:::;
5:82.9GB:83.4GB:538MB:fat32::;
6:83.4GB:188GB:105GB:ext4::;
3:188GB:189GB:538MB:fat32::esp;
sdc:500GB:scsi:512:512:msdos:ATA Hitachi HDT72505:;
1:1049kB:368GB:368GB:ntfs::boot;

Free space >10MiB: ______________________________________________________________

sda: 708219MiB:708733MiB:514MiB
sdb: 51.0MiB:79061MiB:79010MiB
sdb: 179236MiB:179749MiB:513MiB
sdc: 351028MiB:476940MiB:125912MiB

blkid (filtered): ______________________________________________________________

NAME   FSTYPE   UUID                                 PARTUUID                             LABEL                  PARTLABEL
sda                                                                                                              
├─sda1 ntfs     A6A6F8D3A6F8A4C9                     23c737d2-01                          SYSTEM                 
├─sda2 ntfs     6EDAF9BDDAF9821F                     23c737d2-02                          Windows 7              
├─sda4 ntfs     9474BDC874BDAD7C                     23c737d2-04                          HP_RECOVERY            
├─sda5 ntfs     000CF44C0CF43DEA                     23c737d2-05                          Windows 10             
├─sda6 vfat     1E90-0DF2                            23c737d2-06                                                 
└─sda7 ext4     e4074a0e-7458-40ea-9ac7-164f97855881 23c737d2-07                                                 
sdb                                                                                                              
├─sdb1 ntfs     D270EC1870EC04D7                     8ad00e56-01                          Réservé au système     
├─sdb2                                               8ad00e56-02                                                 
├─sdb3 vfat     24EE-6C85                            8ad00e56-03                                                 
├─sdb5 vfat     A88D-8A54                            8ad00e56-05                                                 
└─sdb6 ext4     8b84e5c9-7f6f-4bf5-a127-2b99a166fdca 8ad00e56-06                          Ubuntu 20.04.3         
sdc                                                                                                              
└─sdc1 ntfs     B8E89E02E89DBED6                     e0c886a1-01                          Sauvegardes            

Mount points (filtered): _______________________________________________________

            Avail Use% Mounted on
/dev/sda1    73.1M  27% /mnt/boot-sav/sda1
/dev/sda2   577.5G  16% /mnt/boot-sav/sda2
/dev/sda4     1.5G  88% /mnt/boot-sav/sda4
/dev/sda5   496.4G  10% /mnt/boot-sav/sda5
/dev/sda6   505.8M   1% /mnt/boot-sav/sda6
/dev/sda7   122.2G   6% /mnt/boot-sav/sda7
/dev/sdb1    23.6M  53% /mnt/boot-sav/sdb1
/dev/sdb3   506.7M   1% /mnt/boot-sav/sdb3
/dev/sdb5   507.4M   1% /mnt/boot-sav/sdb5
/dev/sdb6    66.6G  25% /mnt/boot-sav/sdb6
/dev/sdc1   248.7G  27% /mnt/boot-sav/sdc1

Mount options (filtered): ______________________________________________________

/dev/sda1   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/dev/sda2   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/dev/sda4   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/dev/sda5   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/dev/sda6   vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
/dev/sda7   ext4            rw,relatime
/dev/sdb1   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096
/dev/sdb3   vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
/dev/sdb5   vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
/dev/sdb6   ext4            rw,relatime
/dev/sdc1   fuseblk         rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096

===================== sda6/efi/ubuntu/grub.cfg (filtered) ======================

search.fs_uuid e4074a0e-7458-40ea-9ac7-164f97855881 root hd0,msdos7 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

====================== sda7/boot/grub/grub.cfg (filtered) ======================

Ubuntu   e4074a0e-7458-40ea-9ac7-164f97855881
Ubuntu, with Linux 5.13.0-19-generic   e4074a0e-7458-40ea-9ac7-164f97855881
Windows 10 (on sda1)   A6A6F8D3A6F8A4C9
Windows 7 (on sda2)   6EDAF9BDDAF9821F
Windows Recovery Environment (on sda4)   9474BDC874BDAD7C
Windows 10 (on sdb1)   D270EC1870EC04D7
Ubuntu 20.04.4 LTS (20.04) (on sdb6)   8b84e5c9-7f6f-4bf5-a127-2b99a166fdca
### END /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_uefi-firmware ###

========================== sda7/etc/fstab (filtered) ===========================

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda7 during installation
UUID=e4074a0e-7458-40ea-9ac7-164f97855881 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda6 during installation
/swapfile                                 none            swap    sw              0       0

======================= sda7/etc/default/grub (filtered) =======================

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=false

==================== sda7: Location of files loaded by Grub ====================

           GiB - GB             File                                 Fragment(s)
1265.811134338 = 1359.154356224 boot/grub/grub.cfg                             1
1265.819313049 = 1359.163138048 boot/grub/i386-pc/core.img                     1
1249.199214935 = 1341.317443584 boot/vmlinuz                                   2
1249.199214935 = 1341.317443584 boot/vmlinuz-5.13.0-19-generic                 2
1250.589019775 = 1342.809735168 boot/initrd.img                                1
1250.589019775 = 1342.809735168 boot/initrd.img-5.13.0-19-generic              1
1250.589019775 = 1342.809735168 boot/initrd.img.old                            1

===================== sda7: ls -l /etc/grub.d/ (filtered) ======================

-rwxr-xr-x 1 root root 18151 Sep  2  2021 10_linux
-rwxr-xr-x 1 root root 43031 Sep  2  2021 10_linux_zfs
-rwxr-xr-x 1 root root 12894 Sep  2  2021 20_linux_xen
-rwxr-xr-x 1 root root 12059 Sep  2  2021 30_os-prober
-rwxr-xr-x 1 root root  1424 Sep  2  2021 30_uefi-firmware
-rwxr-xr-x 1 root root   214 Sep  2  2021 40_custom
-rwxr-xr-x 1 root root   216 Sep  2  2021 41_custom

========================== sdb6/etc/fstab (filtered) ===========================

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb6 during installation
UUID=8b84e5c9-7f6f-4bf5-a127-2b99a166fdca /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sdb3 during installation
/swapfile                                 none            swap    sw              0       0

==================== sdb6: Location of files loaded by Grub ====================

           GiB - GB             File                                 Fragment(s)
 155.926097870 = 167.424372736  boot/grub/i386-pc/core.img                     1
  92.297557831 = 99.103748096   boot/vmlinuz                                   1
  87.195995331 = 93.625987072   boot/vmlinuz-5.13.0-28-generic                 1
 133.375682831 = 143.211048960  boot/vmlinuz-5.13.0-30-generic                 1
  92.297557831 = 99.103748096   boot/vmlinuz-5.13.0-35-generic                 1
 133.375682831 = 143.211048960  boot/vmlinuz.old                               1
  80.265430450 = 86.184349696   boot/initrd.img                                1
  92.682613373 = 99.517198336   boot/initrd.img-5.13.0-28-generic              2
  92.624805450 = 99.455127552   boot/initrd.img-5.13.0-30-generic              2
  80.265430450 = 86.184349696   boot/initrd.img-5.13.0-35-generic              1
  92.624805450 = 99.455127552   boot/initrd.img.old                            2

===================== sdb6: ls -l /etc/grub.d/ (filtered) ======================

-rwxr-xr-x 1 root root   706 Mar  1 20:25 10_linux_proxy
-rwxr-xr-x 1 root root  5454 Mar  1 20:25 30_os-prober_proxy
-rwxr-xr-x 1 root root   726 Mar  1 20:25 31_linux_proxy
-rwxr-xr-x 1 root root 42359 Aug 12  2021 32_linux_zfs
-rwxr-xr-x 1 root root 12894 Aug 12  2021 33_linux_xen
-rwxr-xr-x 1 root root   265 Mar  1 20:25 34_memtest86+_proxy
-rwxr-xr-x 1 root root  5454 Mar  1 20:25 35_os-prober_proxy
-rwxr-xr-x 1 root root   265 Mar  1 20:25 36_memtest86+_proxy
-rwxr-xr-x 1 root root  5454 Mar  1 20:25 37_os-prober_proxy
-rwxr-xr-x 1 root root  1424 Aug 12  2021 38_uefi-firmware
drwxr-xr-x 4 root root  4096 Feb 25 17:29 backup
drwxr-xr-x 2 root root  4096 Feb 25 17:29 bin
drwxr-xr-x 2 root root  4096 Mar  1 20:25 proxifiedScripts

======================== sdb6/etc/grub.d/31_linux_proxy ========================

#!/bin/sh
#THIS IS A GRUB PROXY SCRIPT
'/etc/grub.d/proxifiedScripts/linux' | /etc/grub.d/bin/grubcfg_proxy "+'Ubuntu'~b26c37566fb984f2bdc614c19230a77d~ as 'Ubuntu 20.04.1'
-*
-#text
+'SUBMENU' as 'Options avancées pour Ubuntu'{+'Options avancées pour Ubuntu'/*, +'Options avancées pour Ubuntu'/'Ubuntu, avec Linux 5.13.0-30-generic'~3045864eab5650733e017d8b5dc76094~, +'Options avancées pour Ubuntu'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode)'~4da924cf299791d33583102ef1df4b83~, +'Options avancées pour Ubuntu'/'Ubuntu, avec Linux 5.13.0-28-generic'~0893e455a62a724045ca361b37ede291~, +'Options avancées pour Ubuntu'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode)'~fbaf2eec9513340b2cf4a5d023a4fe17~}
"

========================= sdb6/etc/grub.d/32_linux_zfs =========================

#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2019 Canonical Ltd.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
datarootdir="/usr/share"
ubuntu_recovery="1"
quiet_boot="1"
quick_boot="1"
gfxpayload_dynamic="1"
vt_handoff="1"
. "${pkgdatadir}/grub-mkconfig_lib"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
set -u
## Skip early if zfs utils isn't installed (instead of failing on first zpool list)
if ! `which zfs >/dev/null 2>&1`; then
    exit 0
fi
imported_pools=""
MNTDIR="$(mktemp -d ${TMPDIR:-/tmp}/zfsmnt.XXXXXX)"
ZFSTMP="$(mktemp -d ${TMPDIR:-/tmp}/zfstmp.XXXXXX)"
machine="$(uname -m)"
case "${machine}" in
    i?86) GENKERNEL_ARCH="x86" ;;
    mips|mips64) GENKERNEL_ARCH="mips" ;;
    mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
    arm*) GENKERNEL_ARCH="arm" ;;
    *) GENKERNEL_ARCH="${machine}" ;;
esac
RC=0
on_exit() {
    # Restore initial zpool import state
    for pool in ${imported_pools}; do
        zpool export "${pool}"
    done
    mountpoint -q "${MNTDIR}"  && umount "${MNTDIR}" || true
    rmdir "${MNTDIR}"
    rm -rf "${ZFSTMP}"
    exit "${RC}"
}
trap on_exit EXIT INT QUIT ABRT PIPE TERM
# List ONLINE and DEGRADED pools
import_pools() {
    # We have to ignore zpool import output, as potentially multiple / will be available,
    # and we need to autodetect all zpools this way with their real mountpoints.
    local initial_pools="$(zpool list | awk '{if (NR>1) print $1}')"
    local all_pools=""
    local imported_pools=""
    local err=""
    set +e
    err="$(zpool import -f -a -o cachefile=none -o readonly=on -N 2>&1)"
    # Only print stderr if the command returned an error
    # (it can echo "No zpool to import" with success, which we don't want)
    if [ $? -ne 0 ]; then
        echo "Some pools couldn't be imported and will be ignored:\n${err}" >&2
    fi
    set -e
    all_pools="$(zpool list | awk '{if (NR>1) print $1}')"
    for pool in ${all_pools}; do
        if echo "${initial_pools}" | grep -wq "${pool}"; then
            continue
        fi
        imported_pools="${imported_pools} ${pool}"
    done
    echo "${imported_pools}"
}
# List all the dataset with a root mountpoint
get_root_datasets() {
    local pools="$(zpool list | awk '{if (NR>1) print $1}')"
    for p in ${pools}; do
        local rel_pool_root=$(zpool get -H altroot ${p} | awk '{print $3}')
        if [ "${rel_pool_root}" = "-" ]; then
            rel_pool_root="/"
        fi
        zfs list -H -o name,canmount,mountpoint -t filesystem | grep -E '^'"${p}"'(\s|/[[:print:]]*\s)(on|noauto)\s'"${rel_pool_root}"'$' | awk '{print $1}'
    done
}
# find if given datasets can be mounted for directory and return its path (snapshot or real path)
# $1 is our current dataset name
# $2 directory path we look for (cannot contains /)
# $3 is the temporary mount directory to use
# $4 is the optional snapshot name
# return path for directory (which can be a mountpoint)
validate_system_dataset() {
    local dataset="$1"
    local directory="$2"
    local mntdir="$3"
    local snapshot_name="$4"
    local mount_path="${mntdir}/${directory}"
    if ! zfs list "${dataset}" >/dev/null 2>&1; then
        return
    fi
    if ! mount -o noatime,zfsutil -t zfs "${dataset}" "${mount_path}"; then
        grub_warn "Failed to find a valid directory '${directory}' for dataset '${dataset}@${snapshot_name}'. Ignoring"
        return
    fi
    local candidate_path="${mount_path}"
    if [ -n "${snapshot_name}" ]; then
        # WORKAROUND a bug https://github.com/zfsonlinux/zfs/issues/9958
        # Reading the content of a snapshot fails if it is not the first mount
        # for a given dataset
        first_mntdir=$(awk '{if ($1 == "'${dataset}'") {print $2; exit;}}' /proc/mounts)
        if [ "${first_mntdir}" = "/" ]; then
            # prevents // on candidate_path
            first_mntdir=""
        fi
        candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}"
    fi
    if [ -n "$(ls ${candidate_path} 2>/dev/null)" ]; then
        echo "${candidate_path}"
        return
    else
        mountpoint -q "${mount_path}" && umount "${mount_path}" || true
    fi
}
# Detect system directory relevant to the other, trying to find the ones associated on the current dataset or snapshot/
# System directory should be at most a direct child dataset of main datasets (no recursivity)
# We can fallback trying other zfs pools if no match has been found.
# $1 is our current dataset name (which can have @snapshot name)
# $2 directory path we look for (cannot contains /)
# $3 restrict_to_same_pool (true|false) force looking for dataset with the same basename in the current dataset pool only
# $4 is the temporary mount directory to use
# $5 is the optional etc directory (if not $2 is not etc itself)
# return path for directory (which can be a mountpoint)
get_system_directory() {
    local dataset_path="$1"
    local directory="$2"
    local restrict_to_same_pool="$3"
    local mntdir="$4"
    local etc_dir="$5"
    if [ -z "${etc_dir}" ]; then
        etc_dir="${mntdir}/etc"
    fi
    local candidate_path="${mntdir}/${directory}"
    # 1. Look for /etc/fstab first (which will mount even on top of non empty $directory)
    local mounted_fstab_entry="false"
    if [ -f "${etc_dir}/fstab" ]; then
        mount_args=$(awk '/^[^#].*[ \t]\/'"${directory}"'[ \t]/ {print "-t", $3, $1}' "${etc_dir}/fstab")
        if [ -n "${mount_args}" ]; then
            mounted_fstab_entry="true"
            mount -o noatime ${mount_args} "${candidate_path}" || mounted_fstab_entry="false"
        fi
    fi
    # If directory isn't empty. Only count if coming from /etc/fstab. Will be
    # handled below otherwise as we are interested in potential snapshots.
    if [ "${mounted_fstab_entry}" = "true" -a -n "$(ls ${candidate_path} 2>/dev/null)" ]; then
        echo "${candidate_path}"
        return
    fi
    # 2. Handle zfs case, which can be a snapshots.
    local base_dataset_path="${dataset_path}"
    local snapshot_name=""
    # For snapshots we extract the parent dataset
    if echo "${dataset_path}" | grep -q '@'; then
        base_dataset_path=$(echo "${dataset_path}" | cut -d '@' -f1)
        snapshot_name=$(echo "${dataset_path}" | cut -d '@' -f2)
    fi
    base_dataset_name="${base_dataset_path##*/}"
    base_pool="$(echo "${base_dataset_path}" | cut -d'/' -f1)"
    # 2.a) Look for child dataset included in base dataset, which needs to hold same snapshot if any
    candidate_path=$(validate_system_dataset "${base_dataset_path}/${directory}" "${directory}" "${mntdir}" "${snapshot_name}")
    if [ -n "${candidate_path}" ]; then
        echo "${candidate_path}"
        return
    fi
    # 2.b) Look for current dataset (which is already mounted as /)
    candidate_path="${mntdir}/${directory}"
    if [ -n "${snapshot_name}" ]; then
        # WORKAROUND a bug https://github.com/zfsonlinux/zfs/issues/9958
        # Reading the content of a snapshot fails if it is not the first mount
        # for a given dataset
        first_mntdir=$(awk '{if ($1 == "'${base_dataset_path}'") {print $2; exit;}}' /proc/mounts)
        if [ "${first_mntdir}" = "/" ]; then
            # prevents // on candidate_path
            first_mntdir=""
        fi
        candidate_path="${first_mntdir}/.zfs/snapshot/${snapshot_name}/${directory}"
    fi
    if [ -n "$(ls ${candidate_path} 2>/dev/null)" ]; then
        echo "${candidate_path}"
        return
    fi
    # 2.c) Look for every datasets in every pool which isn't the current dataset which holds:
    # - the same dataset name (last section) than our base_dataset_name
    # - mountpoint=directory
    # - canmount!=off
    all_same_base_dataset_name="$(zfs list -H -t filesystem -o name,canmount | awk '/^[^ ]+\/'"${base_dataset_name}"'[ \t](on|noauto)/ {print $1}') "
    # order by local pool datasets first
    current_pool_same_base_datasets=""
    other_pools_same_base_datasets=""
    root_pool=$(echo "${dataset_path%%/*}")
    for d in ${all_same_base_dataset_name}; do
        cur_dataset_pool=$(echo "${d%%/*}")
        if echo "${cur_dataset_pool}" | grep -wq "${root_pool}" 2>/dev/null ; then
            current_pool_same_base_datasets="${current_pool_same_base_datasets} ${d}"
        else
            other_pools_same_base_datasets="${other_pools_same_base_datasets} ${d}"
        fi
    done
    ordered_same_base_datasets="${current_pool_same_base_datasets} ${other_pools_same_base_datasets}"
    if [ "${restrict_to_same_pool}" = "true" ]; then
        ordered_same_base_datasets="${current_pool_same_base_datasets}"
    fi
    # now, loop over them
    for d in ${ordered_same_base_datasets}; do
        cur_dataset_pool=$(echo "${d%%/*}")
        rel_pool_root=$(zpool get -H altroot ${cur_dataset_pool} | awk '{print $3}')
        if [ "${rel_pool_root}" = "-" ]; then
            rel_pool_root=""
        fi
        # check mountpoint match
        candidate_dataset=$(zfs get -H mountpoint ${d} | grep -E "mountpoint\s${rel_pool_root}/${directory}\s" | awk '{print $1}')
        if [ -z "${candidate_dataset}" ]; then
            continue
        fi
        candidate_path=$(validate_system_dataset "${candidate_dataset}" "${directory}" "${mntdir}" "${snapshot_name}")
        if [ -n "${candidate_path}" ]; then
            echo "${candidate_path}"
            return
        fi
    done
    # 2.d) If we didn't find anything yet: check for persistent datasets corresponding to our mountpoint, with canmount=on without any snapshot associated:
    # Note: we go over previous datasets as well, but this is ok, as we didn't include them before.
    all_mountable_datasets="$(zfs list -t filesystem -o name,canmount | awk  '/^[^ ]+[ \t]+on/ {print $1}')"
    # order by local pool datasets first
    current_pool_datasets=""
    other_pools_datasets=""
    root_pool=$(echo "${dataset_path%%/*}")
    for d in ${all_mountable_datasets}; do
        cur_dataset_pool=$(echo "${d%%/*}")
        if echo "${cur_dataset_pool}" | grep -wq "${root_pool}" 2>/dev/null ; then
            current_pool_datasets="${current_pool_datasets} ${d}"
        else
            other_pools_datasets="${other_pools_datasets} ${d}"
        fi
    done
    ordered_datasets="${current_pool_datasets} ${other_pools_datasets}"
    if [ "${restrict_to_same_pool}" = "true" ]; then
        ordered_datasets="${current_pool_datasets}"
    fi
    for d in ${ordered_datasets}; do
        cur_dataset_pool=$(echo "${d%%/*}")
        rel_pool_root=$(zpool get -H altroot ${cur_dataset_pool} | awk '{print $3}')
        if [ "${rel_pool_root}" = "-" ]; then
            rel_pool_root=""
        fi
        # check mountpoint match
        candidate_dataset=$(zfs get -H mountpoint ${d} | grep -E "mountpoint\s${rel_pool_root}/${directory}\s" | awk '{print $1}')
        if [ -z "${candidate_dataset}" ]; then
            continue
        fi
        candidate_path=$(validate_system_dataset "${d}" "${directory}" "${mntdir}" "")
        if [ -n "${candidate_path}" ]; then
            echo "${candidate_path}"
            return
        fi
    done
    grub_warn "Failed to find a valid directory '${directory}' for dataset '${dataset_path}'. Ignoring"
    return
}
# Try our default layout bpool as a prefered layout (fast path)
# This is get_system_directory for boot optimized for our default installation layout
# $1 is our current dataset name (which can have @snapshot name)
# $2 is the temporary mount directory to use
# return path for directory (which can be a mountpoint) if found
try_default_layout_bpool() {
    local root_dataset_path="$1"
    local mntdir="$2"
    dataset_basename="${root_dataset_path##*/}"
    candidate_dataset="bpool/BOOT/${dataset_basename}"
    dataset_properties="$(zfs get -H mountpoint,canmount ${candidate_dataset} | cut -f3 | paste -sd ' ')"
    if [ -z "${dataset_properties}" ]; then
        return
    fi
    rel_pool_root=$(zpool get -H altroot bpool | awk '{print $3}')
    if [ "${rel_pool_root}" = "-" ]; then
        rel_pool_root=""
    fi
    snapshot_name="${dataset_basename##*@}"
    [ "${snapshot_name}" = "${dataset_basename}" ] && snapshot_name=""
    if [ -z "${snapshot_name}" ]; then
        if ! echo "${dataset_properties}" | grep -Eq "${rel_pool_root}/boot (on|noauto)"; then
            return
        fi
    else
        candidate_dataset=$(echo "${candidate_dataset}" | cut -d '@' -f1)
    fi
    validate_system_dataset "${candidate_dataset}" "boot" "${mntdir}" "${snapshot_name}"
}
# Return if secure boot is enabled on that system
is_secure_boot_enabled() {
    if LANG=C mokutil --sb-state 2>/dev/null | grep -qi enabled; then
        echo "true"
        return
    fi
    echo "false"
    return
}
# Given a filesystem or snapshot dataset, returns dataset|machine id|pretty name|last used
# $1 is dataset we want information from
# $2 is the temporary mount directory to use
get_dataset_info() {
    local dataset="$1"
    local mntdir="$2"
    local base_dataset="${dataset}"
    local etc_dir="${mntdir}/etc"
    local is_snapshot="false"
    # For snapshot we extract the parent dataset
    if echo "${dataset}" | grep -q '@'; then
        base_dataset=$(echo "${dataset}" | cut -d '@' -f1)
        is_snapshot="true"
    fi
    mount -o noatime,zfsutil -t zfs "${base_dataset}" "${mntdir}"
    # read machine-id/os-release from /etc
    etc_dir=$(get_system_directory "${dataset}" "etc" "true" "${mntdir}" "")
    if [ -z  "${etc_dir}" ]; then
        grub_warn "Ignoring ${dataset}"
        mountpoint -q "${mntdir}/etc" && umount "${mntdir}/etc" || true
        umount "${mntdir}"
        return
    fi
    machine_id=""
    if [ -f "${etc_dir}/machine-id" ]; then
        machine_id=$(cat "${etc_dir}/machine-id")
    fi
    # We have to use a random temporary id if we don't have any machine-id file or if this one is empty
    # (mostly the case of new installations before first boot).
    # Let's use the dataset name directly for this.
    # Consequence is that all datasets are then separated.
    if [ -z "${machine_id}" ]; then
        machine_id="${dataset}"
    fi
    pretty_name=$(. "${etc_dir}/os-release" && echo "${PRETTY_NAME}")
    mountpoint -q "${mntdir}/etc" && umount "${mntdir}/etc" || true
    # read available kernels from /boot
    boot_dir="$(try_default_layout_bpool "${dataset}" "${mntdir}")"
    if [ -z "${boot_dir}" ]; then
        boot_dir=$(get_system_directory "${dataset}" "boot" "false" "${mntdir}" "${etc_dir}")
    fi
    if [ -z  "${boot_dir}" ]; then
        grub_warn "Ignoring ${dataset}"
        mountpoint -q "${mntdir}/boot" && umount "${mntdir}/boot" || true
        umount "${mntdir}"
        return
    fi
    initrd_list=""
    kernel_list=""
    list=$(find "${boot_dir}" -maxdepth 1 -type f -regex '.*/\(vmlinuz\|vmlinux\|kernel\)-.*')
    while [ "x$list" != "x" ] ; do
        linux=`version_find_latest $list`
        list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
        if ! grub_file_is_not_garbage "${linux}" ; then
            continue
        fi
        # Filters entry if efi/non efi.
        # Note that for now we allow kernel without .efi.signed as those are signed kernel
        # on ubuntu, loaded by the shim.
        case "${linux}" in
            *.efi.signed)
                if [ "$(is_secure_boot_enabled)" = "false" ]; then
                    continue
                fi
            ;;
        esac
        linux_basename=$(basename "${linux}")
        linux_dirname=$(dirname "${linux}")
        version=$(echo "${linux_basename}" | sed -e "s,^[^0-9]*-,,g")
        alt_version=$(echo "${version}" | sed -e "s,\.old$,,g")
        gettext_printf "Found linux image: %s in %s\n" "${linux_basename}" "${dataset}" >&2
        initrd=""
        for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
            "initrd-${version}" "initramfs-${version}.img" \
            "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
            "initrd-${alt_version}" "initramfs-${alt_version}.img" \
            "initramfs-genkernel-${version}" \
            "initramfs-genkernel-${alt_version}" \
            "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
            "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
            if test -e "${linux_dirname}/${i}" ; then
                initrd="$i"
                break
            fi
        done
        if test -z "${initrd}" ; then
            grub_warn "Couldn't find any valid initrd for dataset ${dataset}."
            continue
        fi
        gettext_printf "Found initrd image: %s in %s\n" "${initrd}" "${dataset}" >&2
        rel_linux_dirname=$(make_system_path_relative_to_its_root "${linux_dirname}")
        initrd_list="${initrd_list}|${rel_linux_dirname}/${initrd}"
        kernel_list="${kernel_list}|${rel_linux_dirname}/${linux_basename}"
    done
    initrd_list="${initrd_list#|}"
    kernel_list="${kernel_list#|}"
    initrd_device=$(${grub_probe} --target=device "${boot_dir}" | head -1)
    mountpoint -q "${mntdir}/boot" && umount "${mntdir}/boot" || true
    # We needed to look in / for snapshots on root dataset, umount there before zfs lazily unmount it
    case "${boot_dir}" in /boot/.zfs/snapshot/*)
        umount "${boot_dir}" || true
        ;;
    esac
    # for zsys snapshots: we want to know which kernel we successful last booted with
    last_booted_kernel=$(zfs get -H com.ubuntu.zsys:last-booted-kernel "${dataset}" | awk '{print $3}')
    # snapshot: last_used is dataset creation time
    if [ "${is_snapshot}" = "true" ]; then
        last_used="$(zfs get -pH creation "${dataset}" | awk -F '\t' '{print $3}')"
    # otherwise, last_used is manually marked at boot/shutdown on a root dataset for zsys
    else
        # if current system, take current time
        if zfs mount | awk '/[ \t]+\/$/ {print $1}' | grep -q ${dataset}; then
            last_used=$(date +%s)
        else
            last_used=$(zfs get -H com.ubuntu.zsys:last-used "${dataset}" | awk '{print $3}')
            # case of non zsys, or zsys without annotation, take /etc/machine-id stat (as we mounted with noatime).
            # However, as systems can be relatime, if system is current mounted one, set current time (case of clone + reboot
            # within the same d).
            if [ "${last_used}" = "-" ]; then
                last_used=$(stat --printf="%X" "${mntdir}/etc/os-release")
                if [ -f "${mntdir}/etc/machine-id" ]; then
                    last_used=$(stat --printf="%X" "${mntdir}/etc/machine-id")
                fi
            fi
        fi
    fi
    is_zsys=$(zfs get -H com.ubuntu.zsys:bootfs "${base_dataset}" | awk '{print $3}')
    if [ -n "${initrd_list}" -a -n "${kernel_list}" ]; then
        echo "${dataset}\t${is_zsys}\t${machine_id}\t${pretty_name}\t${last_used}\t${initrd_device}\t${initrd_list}\t${kernel_list}\t${last_booted_kernel}"
    else
        grub_warn "didn't find any valid initrd or kernel."
    fi
    umount "${mntdir}" || true
    # We needed to look in / for snapshots on root dataset, umount the snapshot for etc before zfs lazily unmount it
    case "${etc_dir}" in /.zfs/snapshot/*/etc)
        snapshot_path="$(findmnt -n -o TARGET -T ${etc_dir})"
        umount "${snapshot_path}" || true
        ;;
    esac
}
# Scan available boot options and returns in a formatted list
# $1 is the temporary mount directory to use
bootlist() {
    local mntdir="$1"
    local boot_list=""
    for dataset in $(get_root_datasets); do
        # get information from current root dataset
        boot_list="${boot_list}$(get_dataset_info ${dataset} ${mntdir})\n"
        # get information from snapshots of this root dataset
        for snapshot_dataset in $(zfs list -H -o name -t snapshot "${dataset}"); do
            boot_list="${boot_list}$(get_dataset_info ${snapshot_dataset} ${mntdir})\n"
        done
    done
    echo "${boot_list}"
}
# Order machine ids by last_used from their main entry
get_machines_sorted() {
    local bootlist="$1"
    local machineids="$(echo "${bootlist}" | awk '{print $3}' | sort -u)"
    for machineid in ${machineids}; do
        echo "${bootlist}" | awk 'BEGIN{FS="\t"} $1 !~ /.*@.*/  {print $5, $3}' | sort -nr | grep -E "[^^]\b${machineid}\b" | head -1
    done | sort -nr | awk '{print $2}'
}
# Sort entries by last_used for a given machineid
sort_entries_for_machineid() {
    local bootlist="$1"
    local machineid="$2"
    tab="$(printf '\t')"
    echo "${bootlist}" | grep -E "[^^]\b${machineid}\b" | sort -k5,5r -k1,1 -t "${tab}"
}
# Return main entry index
get_main_entry() {
    local entries="$1"
    echo "${entries}" | awk 'BEGIN{FS="\t"} $1 !~ /.*@.*/  {print}' | head -1
}
# Return specific field at index from entry
get_field_from_entry() {
    local entry="$1"
    local index="$2"
    echo "${entry}" | awk "BEGIN{FS=\"\t\"} {print \$$index}"
}
# Get the main entry metadata
main_entry_meta() {
    local main_entry="$1"
    initrd=$(get_field_from_entry "${main_entry}" 7 | cut -d'|' -f1)
    kernel=$(get_field_from_entry "${main_entry}" 8 | cut -d'|' -f1)
    # Take first element (most recent entry) which is not a snapshot
    echo "${main_entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"} {print \$3, \$2, \"main\", \$4, \$1, \$6, \"$initrd\", \"$kernel\"}"
}
# Get advanced entries metadata
advanced_entries_meta() {
    local main_entry="$1"
    last_used_kernel="$(get_field_from_entry "${main_entry}" 9 )"
    # We must align initrds with kernels.
    # Adds initrds to the stack then pop them 1 by 1 as we process the kernels
    set -- $(get_field_from_entry "${main_entry}" 7 | tr "|" " ")
    for kernel in $(get_field_from_entry "${main_entry}" 8 | tr "|" " "); do
        # get initrd and pop to the next one
        initrd="$1"; shift
        was_last_used_kernel="false"
        kernel_basename=$(basename "${kernel}")
        if [ "${kernel_basename}" = "${last_used_kernel}" ]; then
            was_last_used_kernel="true"
        fi
        echo "${main_entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"}    {print \$3, \$2, \"advanced\", \$4, \$1, \$6, \"$initrd\", \"$kernel\", \"$was_last_used_kernel\"}"
    done
}
# Get history metadata
history_entries_meta() {
    local entries="$1"
    local main_dataset_name="$2"
    local main_dataset_releasename="$3"
    if [ -z "${entries}" ]; then
        return
    fi
    # Traverse snapshots and clones
    echo "${entries}" | while read entry; do
        name=""
        # Compute snapshot/filesystem dataset name
        snap_dataset_name="$(get_field_from_entry "${entry}" 1)"
        snapname="${snap_dataset_name##*@}"
        # If, this is a clone, take what is after main_dataset_name
        if [ "${snapname}" = "${snap_dataset_name}" ]; then
            snapname="${snap_dataset_name##${main_dataset_name}_}"
            # Handle manual user clone (not prefixed by "main_dataset_name")
            snapname="${snapname##*/}"
        fi
        # We keep the snapname only if it is not only a zsys auto snapshot
        if echo "${snapname}" | grep -q "^autozsys_"; then
            snapname=""
        fi
        # We store the release only if it different from main dataset release (snapshot before a release upgrade)
        releasename=$(get_field_from_entry "${entry}" 4)
        if [ "${releasename}" = "${main_dataset_releasename}" ]; then
            releasename=""
        fi
        # Snapshot date
        foo="$(get_field_from_entry "${entry}" 5)"
        snapdate="$(date -d @$(get_field_from_entry "${entry}" 5) "+%x @ %H:%M")"
        # For snapshots/clones the name can have the following formats:
        # 	<DATE>: autozsys, same release
        #   <OLD_RELEASE> on <DATE>: autozsys, different release
        #   <SNAPNAME> on <DATE>: Manual snapshot, same release
        #   <SNAPNAME>, <OLD_RELEASE> on <DATE>: Manual snapshot, different release
        if [ "${snapname}" = "" -a "${releasename}" = "" ]; then
            name="${snapdate}"
        elif [ "${snapname}" = "" -a "${releasename}" != "" ]; then
            name=$(gettext_printf "%s on %s" "${releasename}" "${snapdate}")
        elif [ "${snapname}" != "" -a "${releasename}" = "" ]; then
            name=$(gettext_printf "%s on %s" "${snapname}" "${snapdate}")
        else # snapname != "" && releasename != ""
            name=$(gettext_printf "%s, %s on %s" "${snapname}" "${releasename}" "${snapdate}")
        fi
        # Choose kernel and initrd if the snapshot was booted successfully on a specific kernel before
        # Take latest by default if no match
        initrd=$(get_field_from_entry "${entry}" 7 | cut -d'|' -f1)
        kernel=$(get_field_from_entry "${entry}" 8 | cut -d'|' -f1)
        last_used_kernel="$(get_field_from_entry "${entry}" 9)"
        # We must align initrds with kernels.
        # Adds initrds to the stack then pop them 1 by 1 as we process the kernels
        set -- $(get_field_from_entry "${entry}" 7 | tr "|" " ")
        for k in $(get_field_from_entry "${entry}" 8|tr "|" " "); do
            # get initrd and pop to the next one
            candidate_initrd="$1"; shift
            kernel_basename=$(basename "${k}")
            if [ "${kernel_basename}" = "${last_used_kernel}" ]; then
                kernel="${k}"
                initrd="${candidate_initrd}"
                break
            fi
        done
        echo "${entry}" | awk "BEGIN{ FS=\"\t\"; OFS=\"\t\"}    {print \$3, \$2, \"history\", \"$name\", \$1, \$6, \"$initrd\", \"$kernel\"}"
    done
}
# Generate metadata from a BOOTLIST that will subsequently used to generate
# the final grub menu entries
generate_grub_menu_metadata() {
    local bootlist="$1"
    # Sort machineids by last_used from their main entry
    for machineid in $(get_machines_sorted "${bootlist}"); do
        entries="$(sort_entries_for_machineid "${bootlist}" ${machineid})"
        main_entry="$(get_main_entry "${entries}")"
        if [ -z "$main_entry" ]; then
            continue
        fi
        main_entry_meta "${main_entry}"
        advanced_entries_meta "${main_entry}"
        main_dataset_name="$(get_field_from_entry "${main_entry}" 1)"
        main_dataset_releasename="$(get_field_from_entry "${main_entry}" 4)"
        # grep -v errcode != 0 if there is no match. || true to not fail with -e
        other_entries="$(echo "${entries}" | grep -v "${main_entry}" || true)"
        history_entries_meta "${other_entries}" "${main_dataset_name}" "${main_dataset_releasename}"
    done
}
# Print the configuration part common to all sections
# Note:
#   If 10_linux runs these part will be defined twice in grub configuration
print_menu_prologue() {
    cat << 'EOF'
function gfxmode {
	set gfxpayload="${1}"
EOF
    if [ "${vt_handoff}" = 1 ]; then
        cat << 'EOF'
	if [ "${1}" = "keep" ]; then
		set vt_handoff=vt.handoff=1
	else
		set vt_handoff=
	fi
EOF
    fi
    cat << EOF
}
EOF
    # Use ELILO's generic "efifb" when it's known to be available.
    # FIXME: We need an interface to select vesafb in case efifb can't be used.
    GRUB_GFXPAYLOAD_LINUX="${GRUB_GFXPAYLOAD_LINUX:-}"
    if [ "${GRUB_GFXPAYLOAD_LINUX}" != "" ] || [ "${gfxpayload_dynamic}" = 0 ]; then
        echo "set linux_gfx_mode=${GRUB_GFXPAYLOAD_LINUX}"
    else
        cat << EOF
if [ "\${recordfail}" != 1 ]; then
  if [ -e \${prefix}/gfxblacklist.txt ]; then
    if hwmatch \${prefix}/gfxblacklist.txt 3; then
      if [ \${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
EOF
    fi
    cat << EOF
export linux_gfx_mode
EOF
}
# Cache for prepare_grub_to_access_device call
# $1: boot_device
# $2: submenu_level
prepare_grub_to_access_device_cached() {
    local boot_device="$1"
    local submenu_level="$2"
    local boot_device_idx="$(echo ${boot_device} | tr '/' '_')"
    cache_file="${ZFSTMP}/$(echo boot_device${boot_device_idx})"
    if [ ! -f "${cache_file}" ]; then
        set +u
        echo "$(prepare_grub_to_access_device "${boot_device}")" > "${cache_file}"
        set -u
        for i in 0 1 2; do
            submenu_indentation="$(printf %${i}s | tr " " "${grub_tab}")"
            sed "s/^/${submenu_indentation}	/" "${cache_file}" > "${cache_file}--${i}"
        done
    fi
    cat "${cache_file}--${submenu_level}"
}
# Print a grub menu entry
zfs_linux_entry () {
    submenu_level="$1"
    title="$2"
    type="$3"
    dataset="$4"
    boot_device="$5"
    initrd="$6"
    kernel="$7"
    kernel_version="$8"
    kernel_additional_args="${9:-}"
    boot_devices="${10:-}"
    submenu_indentation="$(printf %${submenu_level}s | tr " " "${grub_tab}")"
    echo "${submenu_indentation}menuentry '$(echo "${title}" | grub_quote)' ${CLASS} \${menuentry_id_option} 'gnulinux-${dataset}-${kernel_version}' {"
    if [ "${quick_boot}" = 1 ]; then
        echo "${submenu_indentation}	recordfail"
    fi
    if [ "${type}" != "recovery" ] ; then
        GRUB_SAVEDEFAULT=${GRUB_SAVEDEFAULT:-}
        default_entry="$(save_default_entry)"
        if [ -n "${default_entry}" ]; then
            echo "${submenu_indentation}	${default_entry}"
        fi
    fi
    # Use ELILO's generic "efifb" when it's known to be available.
    # FIXME: We need an interface to select vesafb in case efifb can't be used.
    if [ "${GRUB_GFXPAYLOAD_LINUX}" = "" ]; then
        echo "${submenu_indentation}	load_video"
    else
        if [ "${GRUB_GFXPAYLOAD_LINUX}" != "text" ]; then
            echo "${submenu_indentation}	load_video"
        fi
    fi
    if ([ "${ubuntu_recovery}" = 0 ] || [ "${type}" != "recovery" ]) && \
        ([ "${GRUB_GFXPAYLOAD_LINUX}" != "" ] || [ "${gfxpayload_dynamic}" = 1 ]); then
        echo "${submenu_indentation}	gfxmode \${linux_gfx_mode}"
    fi
    echo "${submenu_indentation}	insmod gzio"
    echo "${submenu_indentation}	if [ \"\${grub_platform}\" = xen ]; then insmod xzio; insmod lzopio; fi"
    if [ -n "$boot_devices" ]; then
        for device in ${boot_devices}; do
            echo "${submenu_indentation}	if [ "${boot_device}" = "${device}" ]; then"
            echo "$(prepare_grub_to_access_device_cached "${device}" $(( submenu_level +1 )) )"
            echo "${submenu_indentation}	fi"
        done
    else
        echo "$(prepare_grub_to_access_device_cached "${boot_device}" "${submenu_level}")"
    fi
    if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then
        echo "${submenu_indentation}	echo $(gettext_printf "Loading Linux %s ..." ${kernel_version} | grub_quote)"
    fi
    linux_default_args="${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
    if [ ${type} = "recovery" ]; then
        linux_default_args="${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
    fi
    echo "${submenu_indentation}	linux	${kernel} root=ZFS=${dataset} ro ${linux_default_args} ${kernel_additional_args}"
    if [ "${quiet_boot}" = 0 ] || [ "${type}" != simple ]; then
        echo "${submenu_indentation}	echo '$(gettext_printf "Loading initial ramdisk ..." | grub_quote)'"
    fi
    echo "${submenu_indentation}	initrd	${initrd}"
    echo "${submenu_indentation}}"
}
# Generate a GRUB Menu from menu meta data
# $1 menu metadata
generate_grub_menu() {
    local menu_metadata="$1"
    local last_section=""
    local main_dataset_name=""
    local main_dataset=""
    local have_zsys=""
    if [ -z "${menu_metadata}" ]; then
        return
    fi
    CLASS="--class gnu-linux --class gnu --class os"
    if [ "${GRUB_DISTRIBUTOR}" = "" ] ; then
        OS=GNU/Linux
    else
        case ${GRUB_DISTRIBUTOR} in
            Ubuntu|Kubuntu)
            OS="${GRUB_DISTRIBUTOR}"
            ;;
            *)
            OS="${GRUB_DISTRIBUTOR} GNU/Linux"
            ;;
        esac
        CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1 | LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
    fi
    if [ -x /lib/recovery-mode/recovery-menu ]; then
        GRUB_CMDLINE_LINUX_RECOVERY=recovery
    else
        GRUB_CMDLINE_LINUX_RECOVERY=single
    fi
    if [ "${ubuntu_recovery}" = 1 ]; then
        GRUB_CMDLINE_LINUX_RECOVERY="${GRUB_CMDLINE_LINUX_RECOVERY} nomodeset"
    fi
    case "$GENKERNEL_ARCH" in
        x86*) GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY dis_ucode_ldr";;
    esac
    if [ "${vt_handoff}" = 1 ]; then
        for word in ${GRUB_CMDLINE_LINUX_DEFAULT}; do
            if [ "${word}" = splash ]; then
                GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} \${vt_handoff}"
            fi
        done
    fi
    print_menu_prologue
    cat<<'EOF'
function zsyshistorymenu {
	# $1: root dataset (eg rpool/ROOT/ubuntu_2zhm07@autozsys_k56fr6)
	# $2: boot device id (eg 411f29ce1557bfed)
	# $3: initrd (eg /BOOT/ubuntu_2zhm07@autozsys_k56fr6/initrd.img-5.4.0-21-generic)
	# $4: kernel (eg /BOOT/ubuntu_2zhm07@autozsys_k56fr6/vmlinuz-5.4.0-21-generic)
	# $5: kernel_version (eg 5.4.0-21-generic)
	set root_dataset="${1}"
	set boot_device="${2}"
	set initrd="${3}"
	set kernel="${4}"
	set kversion="${5}"
EOF
    boot_devices=$(echo "${menu_metadata}" | cut -d"$(printf '\t')" -f6 | sort -u)
    title=$(gettext_printf "Revert system only")
    zfs_linux_entry 1 "${title}" "simple" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' '' "${boot_devices}"
    title="$(gettext_printf "Revert system and user data")"
    zfs_linux_entry 1 "${title}" "simple" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' 'zsys-revert=userdata' "${boot_devices}"
    GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}"
    if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
        title="$(gettext_printf "Revert system only (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
        zfs_linux_entry 1 "${title}" "recovery" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' '' "${boot_devices}"
        title="$(gettext_printf "Revert system and user data (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
        zfs_linux_entry 1 "${title}" "recovery" '${root_dataset}' '${boot_device}' '${initrd}' '${kernel}' '${kversion}' 'zsys-revert=userdata' "${boot_devices}"
    fi
echo "}"
echo
    # IFS is set to TAB (ASCII 0x09)
    echo "${menu_metadata}" |
    {
        at_least_one_entry=0
        have_zsys="$(which zsysd || true)"
        while IFS="$(printf '\t')" read -r machineid iszsys section name dataset device initrd kernel opt; do
            # Disable history for non zsys system or if systems is a zsys one and zsys isn't installed.
            # In pure zfs systems, we identified multiple issues due to the mount generator
            # in upstream zfs which makes it incompatible. Don't show history for now.
            if [ "${section}" = "history" ]; then
                if [ "${iszsys}" != "yes" ] || [ "${iszsys}" = "yes" -a -z "${have_zsys}" ]; then
                    continue
                fi
            fi
            if [ "${last_section}" != "${section}" -a -n "${last_section}" ]; then
                # Close previous section wrapper
                if [ "${last_section}" != "main" ]; then
                    echo "}"    # Add grub_tabs
                    at_least_one_entry=0
                fi
            fi
            case "${section}" in
                main)
                    title="${name}"
                    main_dataset_name="${name}"
                    main_dataset="${dataset}"
                    kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
                    zfs_linux_entry 0 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
                    at_least_one_entry=1
                ;;
                advanced)
                    # normal and recovery entries for a given kernel
                    if [ "${last_section}" != "${section}" ]; then
                        echo "submenu '$(gettext_printf "Advanced options for %s" "${main_dataset_name}" | grub_quote)' \${menuentry_id_option} 'gnulinux-advanced-${main_dataset}' {"
                    fi
                    last_booted_kernel_marker=""
                    if [ "${opt}" = "true" ]; then
                        last_booted_kernel_marker="* "
                    fi
                    kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
                    title="$(gettext_printf "%s%s, with Linux %s" "${last_booted_kernel_marker}" "${name}" "${kernel_version}")"
                    zfs_linux_entry 1 "${title}" "advanced" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
                    GRUB_DISABLE_RECOVERY=${GRUB_DISABLE_RECOVERY:-}
                    if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
                        title="$(gettext_printf "%s%s, with Linux %s (%s)" "${last_booted_kernel_marker}" "${name}" "${kernel_version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
                        zfs_linux_entry 1 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
                    fi
                    at_least_one_entry=1
                ;;
                history)
                    # Revert to a snapshot
                    # revert system, revert system and user data and associated recovery entries
                    if [ "${last_section}" != "${section}" ]; then
                        echo "submenu '$(gettext_printf "History for %s" "${main_dataset_name}" | grub_quote)' \${menuentry_id_option} 'gnulinux-history-${main_dataset}' {"
                    fi
                    if [ "${iszsys}" = "yes" ]; then
                        title="$(gettext_printf "Revert to %s" "${name}" | grub_quote)"
                    else
                        title="$(gettext_printf "Boot on %s" "${name}" | grub_quote)"
                    fi
                    echo "	submenu '${title}' \${menuentry_id_option} 'gnulinux-history-${dataset}' {"
                    kernel_version=$(basename "${kernel}" | sed -e "s,^[^0-9]*-,,g")
                    # Zsys only: let revert system without destroying snapshots
                    if [ "${iszsys}" = "yes" ]; then
                        echo "${grub_tab}${grub_tab}zsyshistorymenu" \"${dataset}\" \"${device}\" \"${initrd}\" \"${kernel}\" \"${kernel_version}\"
                    # Non-zsys: boot temporarly on snapshots or rollback (destroying intermediate snapshots)
                    else
                        title="$(gettext_printf "One time boot")"
                        zfs_linux_entry 2 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
                        GRUB_DISABLE_RECOVERY="${GRUB_DISABLE_RECOVERY:-}"
                        if [ "${GRUB_DISABLE_RECOVERY}" != "true" ]; then
                            title="$(gettext_printf "One time boot (%s)" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
                            zfs_linux_entry 2 "${title}" "recovery" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}"
                        fi
                        title="$(gettext_printf "Revert system (all intermediate snapshots will be destroyed)")"
                        zfs_linux_entry 2 "${title}" "simple" "${dataset}" "${device}" "${initrd}" "${kernel}" "${kernel_version}" "rollback=yes"
                    fi
                    echo "	}"
                    at_least_one_entry=1
                ;;
                *)
                    grub_warn "unknown section: ${section}. Ignoring entry ${name} for ${dataset}"
                ;;
            esac
            last_section="${section}"
        done
        if [ "${at_least_one_entry}" -eq 1 ]; then
            echo "}"
        fi
    }
}
# don't add trailing newline of variable is empty
# $1: content to write
# $2: destination file
trailing_newline_if_not_empty() {
    content="$1"
    dest="$2"
    if [ -z "${content}" ]; then
        rm -f "${dest}"
        touch "${dest}"
        return
    fi
    echo "${content}" > "${dest}"
}
GRUB_LINUX_ZFS_TEST="${GRUB_LINUX_ZFS_TEST:-}"
case "${GRUB_LINUX_ZFS_TEST}" in
    bootlist)
        # Import all available pools on the system and return imported list
        imported_pools=$(import_pools)
        boot_list="$(bootlist ${MNTDIR})"
        trailing_newline_if_not_empty "${boot_list}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
        break
    ;;
    metamenu)
        boot_list="$(cat ${GRUB_LINUX_ZFS_TEST_INPUT})"
        menu_metadata="$(generate_grub_menu_metadata "${boot_list}")"
        trailing_newline_if_not_empty "${menu_metadata}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
        break
    ;;
    grubmenu)
        menu_metadata="$(cat ${GRUB_LINUX_ZFS_TEST_INPUT})"
        grub_menu=$(generate_grub_menu "${menu_metadata}")
        trailing_newline_if_not_empty "${grub_menu}" "${GRUB_LINUX_ZFS_TEST_OUTPUT}"
        break
    ;;
    *)
        # Import all available pools on the system and return imported list
        imported_pools=$(import_pools)
        # Generate the complete list of boot entries
        boot_list="$(bootlist ${MNTDIR})"
        # Create boot menu meta data from the list of boot entries
        menu_metadata="$(generate_grub_menu_metadata "${boot_list}")"
        # Create boot menu meta data from the list of boot entries
        grub_menu="$(generate_grub_menu "${menu_metadata}")"
        if [ -n "${grub_menu}" ]; then
            # We want the trailing newline as a marker will be added
            echo "${grub_menu}"
        fi
    ;;
esac

========================= sdb6/etc/grub.d/33_linux_xen =========================

#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
. "$pkgdatadir/grub-mkconfig_lib"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
CLASS="--class gnu-linux --class gnu --class os --class xen"
SUPPORTED_INITS="sysvinit:/lib/sysvinit/init systemd:/lib/systemd/systemd upstart:/sbin/upstart"
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  OS="${GRUB_DISTRIBUTOR} GNU/Linux"
  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
fi
# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
    # We can't cope with devices loop-mounted from files here.
    case ${GRUB_DEVICE} in
      /dev/*) ;;
      *) exit 0 ;;
    esac
  ;;
esac
# Default to disabling partition uuid support to maintian compatibility with
# older kernels.
GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}
# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
# and mounting btrfs requires user space scanning, so force UUID in this case.
if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
    || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
	&& [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
    || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
	&& ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
    || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
    || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
  LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi
# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT.
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then
  GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}"
fi
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then
  GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}"
fi
case x"$GRUB_FS" in
    xbtrfs)
	rootsubvol="`make_system_path_relative_to_its_root /`"
	rootsubvol="${rootsubvol#/}"
	if [ "x${rootsubvol}" != x ]; then
	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
	fi;;
    xzfs)
	rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
	bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
	LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
	;;
esac
title_correction_code=
linux_entry ()
{
  os="$1"
  version="$2"
  xen_version="$3"
  type="$4"
  args="$5"
  xen_args="$6"
  if [ -z "$boot_device_id" ]; then
      boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
  fi
  if [ x$type != xsimple ] ; then
      if [ x$type = xrecovery ] ; then
	  title="$(gettext_printf "%s, with Xen %s and Linux %s (%s)" "${os}" "${xen_version}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
      elif [ "${type#init-}" != "$type" ] ; then
	  title="$(gettext_printf "%s, with Xen %s and Linux %s (%s)" "${os}" "${xen_version}" "${version}" "${type#init-}")"
      else
	  title="$(gettext_printf "%s, with Xen %s and Linux %s" "${os}" "${xen_version}" "${version}")"
      fi
      replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
      if [ x"Xen ${xen_version}>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
         quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
         title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
         grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
      fi
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  else
      title="$(gettext_printf "%s, with Xen hypervisor" "${os}")"
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  fi
  if [ x$type != xrecovery ] ; then
      save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/"
  fi
  if [ -z "${prepare_boot_cache}" ]; then
    prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
  fi
  printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
  xmessage="$(gettext_printf "Loading Xen %s ..." ${xen_version})"
  lmessage="$(gettext_printf "Loading Linux %s ..." ${version})"
  sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$xmessage" | grub_quote)'
        if [ "\$grub_platform" = "pc" -o "\$grub_platform" = "" ]; then
            xen_rm_opts=
        else
            xen_rm_opts="no-real-mode edd=off"
        fi
	${xen_loader}	${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
	echo	'$(echo "$lmessage" | grub_quote)'
	${module_loader}	${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
EOF
  if test -n "${initrd}" ; then
    # TRANSLATORS: ramdisk isn't identifier. Should be translated.
    message="$(gettext_printf "Loading initial ramdisk ...")"
    initrd_path=
    for i in ${initrd}; do
       initrd_path="${initrd_path} ${rel_dirname}/${i}"
    done
    sed "s/^/$submenu_indentation/" << EOF
	echo	'$(echo "$message" | grub_quote)'
	${module_loader}	--nounzip   $(echo $initrd_path)
EOF
  fi
  sed "s/^/$submenu_indentation/" << EOF
}
EOF
}
linux_list=
for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
    if grub_file_is_not_garbage "$i"; then
    	basename=$(basename $i)
	version=$(echo $basename | sed -e "s,^[^0-9]*-,,g")
	dirname=$(dirname $i)
	config=
	for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
	    if test -e "${j}" ; then
		config="${j}"
		break
	    fi
	done
        if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then linux_list="$linux_list $i" ; fi
    fi
done
if [ "x${linux_list}" = "x" ] ; then
    exit 0
fi
file_is_not_sym () {
    case "$1" in
	*/xen-syms-*)
	    return 1;;
	*)
	    return 0;;
    esac
}
xen_list=
for i in /boot/xen*; do
    if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then xen_list="$xen_list $i" ; fi
done
prepare_boot_cache=
boot_device_id=
title_correction_code=
machine=`uname -m`
case "$machine" in
    i?86) GENKERNEL_ARCH="x86" ;;
    mips|mips64) GENKERNEL_ARCH="mips" ;;
    mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
    arm*) GENKERNEL_ARCH="arm" ;;
    *) GENKERNEL_ARCH="$machine" ;;
esac
# Extra indentation to add to menu entries in a submenu. We're not in a submenu
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
submenu_indentation=""
is_top_level=true
while [ "x${xen_list}" != "x" ] ; do
    list="${linux_list}"
    current_xen=`version_find_latest $xen_list`
    xen_basename=`basename ${current_xen}`
    xen_dirname=`dirname ${current_xen}`
    rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
    xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
    if [ -z "$boot_device_id" ]; then
	boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
    fi
    if [ "x$is_top_level" != xtrue ]; then
	echo "	submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
    fi
    if ($grub_file --is-arm64-efi $current_xen); then
	xen_loader="xen_hypervisor"
	module_loader="xen_module"
    else
	if ($grub_file --is-x86-multiboot2 $current_xen); then
	    xen_loader="multiboot2"
	    module_loader="module2"
	else
	    xen_loader="multiboot"
	    module_loader="module"
        fi
    fi
    initrd_early=
    for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
             ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
       if test -e "${xen_dirname}/${i}" ; then
          initrd_early="${initrd_early} ${i}"
       fi
    done
    while [ "x$list" != "x" ] ; do
	linux=`version_find_latest $list`
	gettext_printf "Found linux image: %s\n" "$linux" >&2
	basename=`basename $linux`
	dirname=`dirname $linux`
	rel_dirname=`make_system_path_relative_to_its_root $dirname`
	version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
	alt_version=`echo $version | sed -e "s,\.old$,,g"`
	linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
	initrd_real=
	for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
	   "initrd-${version}" "initramfs-${version}.img" \
	   "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
	   "initrd-${alt_version}" "initramfs-${alt_version}.img" \
	   "initramfs-genkernel-${version}" \
	   "initramfs-genkernel-${alt_version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
	   "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" ; do
	    if test -e "${dirname}/${i}" ; then
		initrd_real="$i"
		break
	    fi
	done
	initrd=
	if test -n "${initrd_early}" || test -n "${initrd_real}"; then
	    initrd="${initrd_early} ${initrd_real}"
	    initrd_display=
	    for i in ${initrd}; do
		initrd_display="${initrd_display} ${dirname}/${i}"
	    done
	    gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
	fi
	if test -z "${initrd_real}"; then
    # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't work here.
	    if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
		|| [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then
		linux_root_device_thisversion=${GRUB_DEVICE}
	    else
		linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
	    fi
	fi
	if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
	    linux_entry "${OS}" "${version}" "${xen_version}" simple \
		"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
	    submenu_indentation="$grub_tab$grub_tab"
    
	    if [ -z "$boot_device_id" ]; then
		boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
	    fi
            # TRANSLATORS: %s is replaced with an OS name
	    echo "submenu '$(gettext_printf "Advanced options for %s (with Xen hypervisor)" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
	echo "	submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
	   is_top_level=false
	fi
	linux_entry "${OS}" "${version}" "${xen_version}" advanced \
	    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
	for supported_init in ${SUPPORTED_INITS}; do
	    init_path="${supported_init#*:}"
	    if [ -x "${init_path}" ] && [ "$(readlink -f /sbin/init)" != "$(readlink -f "${init_path}")" ]; then
		linux_entry "${OS}" "${version}" "${xen_version}" "init-${supported_init%%:*}" \
		    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} init=${init_path}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
	    fi
	done
	if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
	    linux_entry "${OS}" "${version}" "${xen_version}" recovery \
		"single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
	fi
	list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
    done
    if [ x"$is_top_level" != xtrue ]; then
	echo '	}'
    fi
    xen_list=`echo $xen_list | tr ' ' '\n' | fgrep -vx "$current_xen" | tr '\n' ' '`
done
# If at least one kernel was found, then we need to
# add a closing '}' for the submenu command.
if [ x"$is_top_level" != xtrue ]; then
  echo '}'
fi
echo "$title_correction_code"

====================== sdb6/etc/grub.d/35_os-prober_proxy ======================

#!/bin/sh
#THIS IS A GRUB PROXY SCRIPT
'/etc/grub.d/proxifiedScripts/os-prober' | /etc/grub.d/bin/grubcfg_proxy "-'Windows 7 (sur /dev/sda1)'~3a09b0c31339bbab6720b1e344ee30ab~
-'Windows Recovery Environment (sur /dev/sda3)'~76aee4de2c1c2f3a453c72c37f4bc40e~
-'SUBMENU' as 'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'{-'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/*, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~66a9312de7e1bffad4eabc8b9cf47538~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 20.04.3 LTS (20.04) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~79f373773d4aa78b8b2ea24142042ae6~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~bea7cd506cd3226999b4d9380b5effd8~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~da1bda8831842924ff6dae10f9c022c4~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 21.10 (21.10) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sda7)'~66a9312de7e1bffad4eabc8b9cf47538~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 20.04.3 LTS (20.04) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7)'~79f373773d4aa78b8b2ea24142042ae6~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sdb6) (sur /dev/sda7)'~bea7cd506cd3226999b4d9380b5effd8~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7)'~da1bda8831842924ff6dae10f9c022c4~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 21.10 (21.10) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, -'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~}
-'Windows 10 (sur /dev/sdb1)'~008bfeb91a5c6ff6513e728c0b39ef4e~
-'Ubuntu 21.10 (21.10) (sur /dev/sda7)'~2b8e8bdde6eb66a9b3720ce679ddd91a~
+*
+#text
"

====================== sdb6/etc/grub.d/37_os-prober_proxy ======================

#!/bin/sh
#THIS IS A GRUB PROXY SCRIPT
'/etc/grub.d/proxifiedScripts/os-prober' | /etc/grub.d/bin/grubcfg_proxy "-*
-#text
-'Ubuntu 21.10 (21.10) (sur /dev/sda7)'~2b8e8bdde6eb66a9b3720ce679ddd91a~
+'Windows 7 (sur /dev/sda1)'~3a09b0c31339bbab6720b1e344ee30ab~
+'Windows Recovery Environment (sur /dev/sda3)'~76aee4de2c1c2f3a453c72c37f4bc40e~
+'SUBMENU' as 'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'{+'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/*, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~66a9312de7e1bffad4eabc8b9cf47538~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 20.04.3 LTS (20.04) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~79f373773d4aa78b8b2ea24142042ae6~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~bea7cd506cd3226999b4d9380b5effd8~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~da1bda8831842924ff6dae10f9c022c4~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 21.10 (21.10) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sda7)'~66a9312de7e1bffad4eabc8b9cf47538~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 20.04.3 LTS (20.04) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (sur /dev/sdb6) (sur /dev/sda7)'~ad264d0ae867cc21f68e11af69baac2c~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-30-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7)'~79f373773d4aa78b8b2ea24142042ae6~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sdb6) (sur /dev/sda7)'~bea7cd506cd3226999b4d9380b5effd8~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sdb6) (sur /dev/sda7)'~da1bda8831842924ff6dae10f9c022c4~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu 21.10 (21.10) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~955f3704ea37352437ec5995e1f786de~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~09f9b769d4fadcb90727930ab3566a56~, +'Options avancées pour Ubuntu 21.10 (21.10) (sur /dev/sda7)'/'Ubuntu, avec Linux 5.13.0-28-generic (recovery mode) (sur /dev/sda7) (sur /dev/sdb6) (sur /dev/sda7)'~fb474fbd8c3a5f245744294c3bf602b4~}
+'Windows 10 (sur /dev/sdb1)'~008bfeb91a5c6ff6513e728c0b39ef4e~
"

======================= sdb6/etc/grub.d/38_uefi-firmware =======================

#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2012  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
. "${datarootdir}/grub/grub-mkconfig_lib"
efi_vars_dir=/sys/firmware/efi/vars
EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c
OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data"
if [ -e "$OsIndications" ] && \
   [ "$(( $(printf 0x%x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then
  LABEL="UEFI Firmware Settings"
  gettext_printf "Adding boot menu entry for UEFI Firmware Settings\n" >&2
  onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
  cat << EOF
menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
	fwsetup
}
EOF
fi

===================== sdb3/efi/ubuntu/grub.cfg (filtered) ======================

search.fs_uuid eedde30c-fbee-411f-9527-1a06f6695e4f root hd1,msdos6 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

======================== Unknown MBRs/Boot Sectors/etc =========================

Unknown BootLoader on sda3


Unknown BootLoader on sdb2

00000000  ff fb a0 00 ed 00 04 24  66 c7 53 83 2e 6a 81 0c  |.......$f.S..j..|
00000010  d9 1d 6c c7 9f 0d a9 9b  45 ac 0c b7 f1 aa b3 69  |..l.....E......i|
00000020  bc c1 8a fe 9e fc 18 f5  00 00 00 22 b9 6c 8d 24  |...........".l.$|
00000030  7e 84 8c 0e 32 ca 05 d1  98 74 54 73 67 08 70 91  |~...2....tTsg.p.|
00000040  73 16 e4 bb 11 27 79 93  10 02 2d 96 04 86 0f 4c  |s....'y...-....L|
00000050  3e 0a dd 38 e3 6d c7 a9  02 3f 51 43 61 88 1c a8  |>..8.m...?QCa...|
00000060  55 93 51 6f 46 1b 7b 97  b0 c1 e8 86 f3 52 35 18  |U.QoF.{......R5.|
00000070  7a 5d 2d 21 5b 1e d0 8c  ac fd 28 e8 1a 94 85 1a  |z]-![.....(.....|
00000080  ed 5b da 0c 6b 44 75 44  c7 73 76 8d 52 bc dc a4  |.[..kDuD.sv.R...|
00000090  f0 b5 51 71 f5 31 0c d0  8f c3 cb 63 fb f8 de e1  |..Qq.1.....c....|
000000a0  56 7a f6 fa 65 fb 19 f5  7f 33 71 df 51 21 9d c0  |Vz..e....3q.Q!..|
000000b0  00 00 42 5b 2e 8d b4 8a  de 8c 48 6c 05 32 62 24  |..B[......Hl.2b$|
000000c0  02 32 23 c2 bf 21 12 4c  75 51 2d e3 84 ea 44 97  |.2#..!.LuQ-...D.|
000000d0  4a 73 cc e1 8f 6f 69 f0  6b 59 f6 b5 67 f2 e6 ed  |Js...oi.kY..g...|
000000e0  01 98 8a c7 90 92 76 19  20 a5 51 0e 1d c5 90 64  |......v. .Q....d|
000000f0  c7 68 c2 dc 60 b4 25 18  87 48 ee 38 32 64 f9 d7  |.h..`.%..H.82d..|
00000100  25 dd 18 81 3b 90 d0 c2  d7 24 20 c3 6f bc 1f c1  |%...;....$ .o...|
00000110  06 12 2c 4a 3b e6 4a 26  18 f9 02 95 88 89 69 ca  |..,J;.J&......i.|
00000120  67 45 3c cd fd 5d 48 d2  9c c7 b9 92 b6 42 25 92  |gE<..]H......B%.|
00000130  8c a8 6c c4 ef bb 84 c7  a0 00 43 52 6f 76 f7 49  |..l.......CRov.I|
00000140  2b ab 13 74 a2 b0 d8 92  a2 d5 2b ee 3d 66 ad fb  |+..t......+.=f..|
00000150  1b 9c c3 7f f1 f7 96 8f  98 13 9a 39 02 15 e6 98  |...........9....|
00000160  88 fd 7a 73 e2 29 41 82  a1 06 68 f3 74 ec eb 47  |..zs.)A...h.t..G|
00000170  78 56 62 87 81 c4 5b ab  38 a6 92 08 a5 94 b0 b4  |xVb...[.8.......|
00000180  6d 08 ca a6 4e 8b 6e 7c  cb bc d4 39 56 d6 55 c6  |m...N.n|...9V.U.|
00000190  b9 f5 f3 cf 5d 7a 1d 37  45 9c d4 d6 d5 3d e8 b4  |....]z.7E....=..|
000001a0  ac eb 9e dc 42 5a d3 84  1d 76 56 d2 48 d3 83 47  |....BZ...vV.H..G|
000001b0  41 cd 71 50 46 02 06 8a  3c f6 21 61 e4 92 00 df  |A.qPF...<.!a....|
000001c0  d3 ff 0b df d3 ff 02 00  00 00 00 08 10 00 00 fe  |................|
000001d0  c2 ff 05 fe c2 ff 8a 0f  10 00 78 68 2a 0c 00 00  |..........xh*...|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#10 Le 08/04/2022, à 15:56

Diamant40

Re : Installation d'Ubuntu 21.10 échoue

Qu'est-ce qu'une partition étendue, qui, ici (Sda3) en comprend plusieurs ?
N'est-ce pas une cause d'erreurs ?


Chacun à sa place, chaque chose en son temps, et tout ira bien.

Hors ligne

#11 Le 08/04/2022, à 16:09

Qid

Re : Installation d'Ubuntu 21.10 échoue

Diamant40 a écrit :

Qu'est-ce qu'une partition étendue, qui, ici (Sda3) en comprend plusieurs ?

pour répondre simplement la réponse est dans ta question... et non ça peut être tout à fait normal...
là ou ça ne colle pas c'est que certaines partitions ne devraient pas s'y trouver : une partition de boot doit pouvoir être trouvée par le bios... mais si elle est cachée dans une étendu...


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne