La Fibre

Télécom => Logiciels et systèmes d'exploitation => Linux Linux (usage serveur) => Discussion démarrée par: vivien le 27 décembre 2019 à 19:46:43

Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 27 décembre 2019 à 19:46:43
Sur un serveur Dell PowerEdge R320 équipé d'Ubuntu 18.04 LTS (boot en UEFI, mais sans "Secure Boot"), j'ai des problèmes avec les mises à jour concernant grub-efi-amd64-signed :

Paramétrage de grub-efi-amd64-signed (1.93.15+2.02-2ubuntu8.14) ...
Installation pour la plate-forme x86_64-efi.
Could not prepare Boot variable: Invalid argument
grub-install : erreur : efibootmgr n'a pas réussi à enregistrer l'entrée de démarrage: Erreur d'entrée/sortie.

dpkg: erreur de traitement du paquet grub-efi-amd64-signed (--configure) :
 installed grub-efi-amd64-signed package post-installation script subprocess returned error exit status 1

J'ai été voir les log et cela date d'une installation automatique de nuit le 6 décembre :

Log started: 2019-12-06  06:43:17
(Lecture de la base de données... 116761 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../grub-efi-amd64-signed_1.93.15+2.02-2ubuntu8.14_amd64.deb ...
Dépaquetage de grub-efi-amd64-signed (1.93.15+2.02-2ubuntu8.14) sur (1.93.14+2.02-2ubuntu8.13) ...
Préparation du dépaquetage de .../grub-efi-amd64_2.02-2ubuntu8.14_amd64.deb ...
Dépaquetage de grub-efi-amd64 (2.02-2ubuntu8.14) sur (2.02-2ubuntu8.13) ...
Préparation du dépaquetage de .../grub-efi-amd64-bin_2.02-2ubuntu8.14_amd64.deb ...
Dépaquetage de grub-efi-amd64-bin (2.02-2ubuntu8.14) sur (2.02-2ubuntu8.13) ...
Préparation du dépaquetage de .../grub2-common_2.02-2ubuntu8.14_amd64.deb ...
Dépaquetage de grub2-common (2.02-2ubuntu8.14) sur (2.02-2ubuntu8.13) ...
Préparation du dépaquetage de .../grub-common_2.02-2ubuntu8.14_amd64.deb ...
Dépaquetage de grub-common (2.02-2ubuntu8.14) sur (2.02-2ubuntu8.13) ...
Paramétrage de grub-common (2.02-2ubuntu8.14) ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Paramétrage de grub-efi-amd64-bin (2.02-2ubuntu8.14) ...
Paramétrage de grub2-common (2.02-2ubuntu8.14) ...
Paramétrage de grub-efi-amd64 (2.02-2ubuntu8.14) ...
Installation pour la plate-forme x86_64-efi.
Could not prepare Boot variable: Invalid argument
grub-install : erreur : efibootmgr n'a pas réussi à enregistrer l'entrée de démarrage: Erreur d'entrée/sortie.
Failed: grub-install --target=x86_64-efi --no-extra-removable
WARNING: Bootloader is not properly installed, system may not be bootable
Sourcing file `/etc/default/grub'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.0.0-37-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-37-generic
Image Linux trouvée : /boot/vmlinuz-5.0.0-36-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-36-generic
fait
Paramétrage de grub-efi-amd64-signed (1.93.15+2.02-2ubuntu8.14) ...
Installation pour la plate-forme x86_64-efi.
Could not prepare Boot variable: Invalid argument
grub-install : erreur : efibootmgr n'a pas réussi à enregistrer l'entrée de démarrage: Erreur d'entrée/sortie.
dpkg: erreur de traitement du paquet grub-efi-amd64-signed (--configure) :
 installed grub-efi-amd64-signed package post-installation script subprocess returned error exit status 1
Traitement des actions différées (« triggers ») pour man-db (2.8.3-2ubuntu0.1) ...
Traitement des actions différées (« triggers ») pour ureadahead (0.100.0-21) ...
Traitement des actions différées (« triggers ») pour install-info (6.5.0.dfsg.1-2) ...
Traitement des actions différées (« triggers ») pour systemd (237-3ubuntu10.33) ...
Des erreurs ont été rencontrées pendant l'exécution :
 grub-efi-amd64-signed
Log ended: 2019-12-06  06:43:26

Aujourd'hui à chaque appel de apt, il tente de configurer grub-efi-amd64-signed et c'est toujours un échec :
# apt upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Paramétrage de grub-efi-amd64-signed (1.93.15+2.02-2ubuntu8.14) ...
Installation pour la plate-forme x86_64-efi.
Could not prepare Boot variable: Invalid argument
grub-install : erreur : efibootmgr n'a pas réussi à enregistrer l'entrée de démarrage: Erreur d'entrée/sortie.
dpkg: erreur de traitement du paquet grub-efi-amd64-signed (--configure) :
 installed grub-efi-amd64-signed package post-installation script subprocess returned error exit status 1
dpkg: des problèmes de dépendances empêchent le traitement des actions différées pour shim-signed :
 shim-signed dépend de grub-efi-amd64-signed ; cependant :
 Le paquet grub-efi-amd64-signed n'est pas encore configuré.

dpkg: erreur de traitement du paquet shim-signed (--configure) :
 problèmes de dépendances - actions différées non exécutées
Des erreurs ont été rencontrées pendant l'exécution :
 grub-efi-amd64-signed
 shim-signed
E: Sub-process /usr/bin/dpkg returned an error code (1)

Avez-vous une idée de ce qu'il faut faire, sachant que je n'ai pas de moyen simple de récupérer le serveur si il ne redémarre pas après un reboot.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 27 décembre 2019 à 21:27:47
Vu l'erreur "Erreur d'entrée/sortie." j'ai regardé mais je ne voit aucune ligne dans dmesg qui semble indiquer un pb dur les SSD.

Voici la fin de la commande dmesg. les premières lignes sont 8 secondes après le boot, elle date de 25 jours (le serveur n'a pas été redémarré depuis le problème apt)
[    8.911409] tg3 0000:02:00.1 eno2: Link is up at 1000 Mbps, full duplex
[    8.911418] tg3 0000:02:00.1 eno2: Flow control is on for TX and on for RX
[    8.911419] tg3 0000:02:00.1 eno2: EEE is disabled
[    8.911445] IPv6: ADDRCONF(NETDEV_CHANGE): eno2: link becomes ready
[21294.622474] perf: interrupt took too long (2507 > 2500), lowering kernel.perf_event_max_sample_rate to 79750
[29262.381822] perf: interrupt took too long (3143 > 3133), lowering kernel.perf_event_max_sample_rate to 63500
[43598.861000] perf: interrupt took too long (3935 > 3928), lowering kernel.perf_event_max_sample_rate to 50750
[84982.794604] SGI XFS with ACLs, security attributes, realtime, no debug enabled
[84982.804872] JFS: nTxBlock = 8192, nTxLock = 65536
[84982.818893] ntfs: driver 2.1.32 [Flags: R/O MODULE].
[84982.838293] QNX4 filesystem 0.2.3 registered.
[117438.966911] perf: interrupt took too long (4920 > 4918), lowering kernel.perf_event_max_sample_rate to 40500
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: kgersen le 27 décembre 2019 à 22:00:26
La machine a accès a Internet ?

sinon https://askubuntu.com/a/1032156 mais sans garanti ;)

Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 28 décembre 2019 à 08:03:33
Oui la machine a accès à Internet.
- La partition / où est /boot n'est remplie que à 20% (partition de 28 Go, 5,1 Go utilisé)
- La partition UEFI (/boot/efi) est une partition de 511 Mo, dont 6,1 Mo seulement sont utilisés (2%)

Dans la partition UEFI, je remarque que les fichiers sont tous datés de la dernière tentative de configuration de grub-efi-amd64-signed :
# ls -l /boot/efi/EFI/ubuntu/
total 3644
-rwx------ 1 root root     108 déc.  27 19:37 BOOTX64.CSV
-rwx------ 1 root root     126 déc.  27 19:37 grub.cfg
-rwx------ 1 root root 1116024 déc.  27 19:37 grubx64.efi
-rwx------ 1 root root 1269496 déc.  27 19:37 mmx64.efi
-rwx------ 1 root root 1334816 déc.  27 19:37 shimx64.efi

# ls -l /boot/efi/EFI/BOOT/
total 2492
-rwx------ 1 root root 1334816 déc.  27 19:37 BOOTX64.EFI
-rwx------ 1 root root 1213032 déc.  27 19:37 fbx64.efi

cat /boot/efi/EFI/ubuntu/BOOTX64.CSV
shimx64.efi,ubuntu,,This is the boot entry for ubuntu
cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid ba69c114-7f04-4b4f-8147-9329c5b55d4c root hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=ba69c114-7f04-4b4f-8147-9329c5b55d4c /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=4DBD-B92E  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/sda4 during installation
UUID=cb0301b7-04e0-4a37-9a28-b87e358e2393 /home           ext4    defaults        0       2
# /ssd was on /dev/sdb1 during installation
UUID=88b59ca4-01e0-4c61-a836-3c8ad05e5131 /ssd            ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=78170fb1-2d89-4e4a-85a0-07c5508a691d none            swap    sw              0       0
# Placer /tmp sur un RamDisque
tmpfs                                     /tmp            tmpfs   defaults,size=40% 0       0
# RamDisque pour les log Apache2
tmpfs   /var/log/apache2        tmpfs   defaults,size=40%  0 0

C'est un serveur Dell PowerEdge R320 équipé d'Ubuntu 18.04 LTS (boot en UEFI, mais sans "Secure Boot")
version UEFI : 2.4.2 (date: 29 janvier 2015)
CPU: Intel Xeon E5-1410 @2.8 GHz (Sandy Bridge EN)
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 28 décembre 2019 à 08:30:53
La première erreur rencontrée lors de la mise à jour est "Could not prepare Boot variable: Invalid argument"

J'ai remarqué que le fichier /etc/default/grub a été modifié par la mise à jour automatique du 6 décembre :

# ls -l /etc/default/grub*
-rw-r--r-- 1 root root 1197 déc.   6 06:43 /etc/default/grub
-rw-r--r-- 1 root root 1225 févr.  6  2018 /etc/default/grub.ucf-dist

Ubuntu étant le seul système d'exploitation, je n'ai jamais modifié ce fichier manuellement (installation d'Ubuntu 16.04 en janvier 2017)

Voici /etc/default/grub (j'ai supprimé les nombreuses lignes commentées)

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

Et la sauvegarde qu'a fait APT :

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

Ce qui a été rajouté :
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

Ce qui a été supprimé :
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10

Sur d'autres serveurs avec Ubuntu 18.04, je retrouve cette même modification de fichier /etc/default/grub le 6 ou le 7 décembre 2019.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 30 décembre 2019 à 10:41:04
1/ efibootmgr du serveur en question (Ubuntu 18.04 est le seul système d'exploitation et Windows n'a jamais été installé sur ce serveur)
# efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0000,0002,0003,0005
Boot0000* Windows Boot Manager   HD(1,GPT,0bb8261c-af59-11e2-ad71-d829a5f6482d,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................
Boot0002* EFI Network 1   PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/MAC(90b11c522ca3,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0003* EFI Network 2   PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x1)/MAC(90b11c522ca4,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0004* Windows Boot Manager   HD(1,GPT,b221b9be-a399-11d5-a392-d4ae5290fd14,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................
Boot0005* EFI Fixed Disk Boot Device 1   PcieRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,c188b9a0-7588-4e8c-a27b-c87039655832,0x800,0x100000)


Il manque l'entrée Boot0001* ubuntu donc en cas de reboot je perds le serveur.


2/ Pour comparer, efibootmgr d'un autre serveur Dell sous Ubuntu 18.04 (c'est fr.archive.ubuntu.com, qui est sur un serveur plus récent, un Dell PowerEdge R330, avec une carte Raid hardware)

# efibootmgr -v
BootCurrent: 0000
BootOrder: 0000
Boot0000* ubuntu   HD(1,GPT,ef7f70c3-e783-4816-b9a9-b1c51a4990ad,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)



3/ efibootmgr d'un autre serveur chez Ikoula, avec Ubuntu 16.04 :
# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0003,0002
Boot0000* ubuntu   HD(1,GPT,414437d4-e240-4c0c-b19c-36934e5685a5,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* Hard Drive    BBS(HD,,0x0)AMGOAMNO........o.K.I.N.G.S.T.O.N. .S.K.C.1.0.0.S.3.1.2.0.G....................A...........................>..Gd-.;.A..MQ..L.0.5.2.0.B.6.2.7.C.2.5.0.A.C.6.5. . . . ......AMBO
Boot0003* Network Card    BBS(Network,,0x0)AMGOAMNO........k.R.e.a.l.t.e.k. .P.X.E. .B.0.2. .D.0.0.........................rN.D+..,.\...........<..Gd-.;.A..MQ..L.R.e.a.l.t.e.k. .P.X.E. .B.0.2. .D.0.0......AMBO



4/ efibootmgr d'un serveur sous Ubuntu 16.04 (Dell PowerEdge R210 II sans carte Raid hardware)
# efibootmgr -v
BootCurrent: 0001
Timeout: 2 seconds
BootOrder: 0001,0003,0002
Boot0000* Harddisk:          Samsung SSD 850 PRO 512GB          BBS(HD,Harddisk:          Samsung SSD 850 PRO 512GB       ,0x500)................-...........A..........................................
Boot0001* ubuntu   HD(1,GPT,646928cf-2f89-4d13-983a-5e68a6ac153a,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* lafibre.info   PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,646928cf-2f89-4d13-983a-5e68a6ac153a,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0003  Windows Boot Manager   HD(2,GPT,5e4900cd-957f-438d-a111-06ac2d9d1ed8,0xe1800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................



5/ efibootmgr d'un autre serveur Dell PowerEdge R210 II sans carte Raid hardware, mais sous Ubuntu 18.04 :
# efibootmgr -v
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0000,0003,0002
Boot0000* ubuntu   HD(1,GPT,fc3270e4-c4f4-45a1-b964-1ad644a94d01,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0001* Harddisk:          Samsung SSD 850 EVO 250GB          BBS(HD,Harddisk:          Samsung SSD 850 EVO 250GB       ,0x500)................-...........A..........................................
Boot0002* EFI Fixed Disk Boot Device 1   PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,fc3270e4-c4f4-45a1-b964-1ad644a94d01,0x800,0x100000)
Boot0003* Windows Boot Manager   HD(1,GPT,ebe27218-7b17-4fd1-a701-b76c33b9e781,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................



6/ Serveur de test Dell PowerEdge R210 II :
# efibootmgr -v
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0005,0004,0000
Boot0000* ubuntu   PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,86cfd122-2e75-4209-ad84-8e077946e111,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0001* Harddisk:          WDC WD5003ABYX-18WERA0             BBS(HD,Harddisk:          WDC WD5003ABYX-18WERA0          ,0x500)................-...........A..........................................
Boot0002* ubuntu   HD(1,GPT,86cfd122-2e75-4209-ad84-8e077946e111,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0003* BEV device:        Slot 1 NIC: IBA XE Slot 0100 v2202   BBS(128,BEV device:        Slot 1 NIC: IBA XE Slot 0100 v2202,0x0).......................................................................
Boot0004* EFI Fixed Disk Boot Device 1   PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,86cfd122-2e75-4209-ad84-8e077946e111,0x800,0x100000)
Boot0005* Windows Boot Manager   HD(1,GPT,61f605be-4825-44ed-b69b-87fcf1fdee81,0x800,0x100000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................



7/ PC grand public avec Windows 10 et Ubuntu 18.04 en dual boot : (PC de bureau Dell Inspiron 3650 - génération Skylake - Core i3 6100 équipé d'un chipset Intel H110)

$ efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0000,0002,0008
Boot0000* Windows Boot Manager   HD(2,GPT,55c63364-ac29-42ed-92dc-c8a0bc9ab9e1,0xe1800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...,................
Boot0001* ubuntu   HD(2,GPT,55c63364-ac29-42ed-92dc-c8a0bc9ab9e1,0xe1800,0x32000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* Onboard NIC (IPV4)   PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/MAC(484d7e994ad4,0)/IPv4(0.0.0.00.0.0.0,0,0)..BO
Boot0008* Onboard NIC (IPV6)   PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/MAC(484d7e994ad4,0)/IPv6([::]:<->[::]:,0,0)..BO
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: alain_p le 30 décembre 2019 à 10:57:21
J'ai vérifié sur un serveur Dell de 2017, installé en Ubuntu 18.04, et effectivement j'ai l'entrée windows.

root@paprika:~# efibootmgr -v
BootCurrent: 0000
BootOrder: 0000,0002,0003,0004
Boot0000* ubuntu        HD(1,GPT,f21de35b-6d93-4edd-b2f4-70e64bb9e9c4,0x800,0xf3800)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* Integrated NIC 1 Port 1 Partition 1   VenHw(3a191845-5f86-4e78-8fce-c4cff59f9daa)
Boot0003* Windows Boot Manager  HD(2,GPT,0f38a575-981d-4773-98b9-97b10a2c52ea,0x96800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...i...............
Boot0004* Windows Boot Manager  HD(2,GPT,fb4b47bf-94a6-4abe-8896-d5a0d820a715,0x96800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...i...............
MirroredPercentageAbove4G: 0.00
MirrorMemoryBelow4GB: false

Mais il est possible qu'un Dell soit préconfiguré pour accueillir un système windows. Néanmoins, ce serveur n'a jamais été installé sous windows. Donc le problème ne vient pas à priori de là.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 30 décembre 2019 à 11:05:13
En fait le problème est presque que le même que celui expliqué sur Tutoriel pour corriger le boot UEFI d'un vieux serveur Dell qui a oublié Ubuntu (https://lafibre.info/serveur-linux/dell-rajouter-entree-uefi/)

La différence c'est qu'il n'y avait pas eu d'erreur et qu'au reboot, il ne démarrait plus.
Bref, j'ai bien retenu la leçon : installer les vieux serveurs en legacy et pas UEFI.

Là j’aimerais bien rajouter l'entrée Ubuntu sans me déplacer (Je n'ai pas d’accès à distance au serveur via un DRAC)
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: alain_p le 30 décembre 2019 à 11:23:18
Oui, effectivement, je viens de revoir le sujet. Il faudrait donc un iDRAC pour rajouter l'entrée ubuntu qui manque, et tu n'en as pas. D'un autre côté, tu disais qu'il était possible parfois d'utiliser efibootmgr pour faire la même chose à partir de l'OS, mais que cela ne marchait pas dans ton cas ?
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: alain_p le 30 décembre 2019 à 11:39:48
Tu dois déjà le savoir, mais on ajouterait une entrée de boot UEFI avec une commande du genre :

efibootmgr -c -d /dev/sda -p 7 -L <label> -l \EFI\<label>\grubx64.efi

Ici ce serait peut-être plutôt shimx64.efi ?

Voir pour les détails :
https://www.linuxbabe.com/command-line/how-to-use-linux-efibootmgr-examples
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 30 décembre 2019 à 14:17:33
La commande serait
efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"

--disk /dev/sda : disque avec la partition EFI
--part 1 : partition EFI => /dev/sda1, on utilisera -p 1 et /dev/sda2, on utilisera -p 2
--create : créer un nouveau numéro de boot variable et ajouter à bootorder
--gpt : mode de partitionnement GPT pour GUID Partition Table
--label "ubuntu" : le nom affiché pour le boot
--loader \EFI\ubuntu\shmix64.efi : chemin de l'image EFI pour démarrer

On retrouve le "Could not prepare Boot variable: Invalid argument" qui était visible dans les logs. On peut imaginer que apt a envoyé un peu prés la même commande suite à la mise à jour de "grub-efi-amd64-signed", avec le même résultat...

J'ai testé /EFI/ubuntu/shmix64.efi et \EFI\ubuntu\shmix64.efi : J'ai Could not prepare Boot variable: Invalid argument dans les deux cas.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: alain_p le 30 décembre 2019 à 19:26:07
Tu pourrais rajouter '-v' pour voir s'il te donnerait des détails sur l'invalid argument ?
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 30 décembre 2019 à 21:59:38
Voila :
(https://lafibre.info/testdebit/ubuntu/201912_efibootmgr_invalid_argument_srv_dell.png)

J'ai essayé avec le -v en début de ligne et en fin de ligne sans succès.

# efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi" -v
Could not prepare Boot variable: Invalid argument

J'ai testé plusieurs alternatives dans la ligne de commande, mais c'est toujours la même réponse.

C'est bien ça qui bloque la configuration par APT de "grub-efi-amd64-signed"

Là si le serveur, c'est un non redémarrage assuré.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: alain_p le 30 décembre 2019 à 22:32:25
Oui, j'espérais que le -v le rendrait bavard et qu'il montrerait quel argument est invalide, mais non.

J'ai trouvé ce thread, où l'un des intervenants dit que vu le nombre de thread sur le forum Ubuntu avec ce genre de problème, il pourrait bien y avoir un bug dans une mise à récente de grub...

Mais pas de solution indiquée. Faudra-t-il attendre une nouvelle mise à jour de grub qui corrige le problème ?

https://ubuntuforums.org/showthread.php?t=2432759
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 30 décembre 2019 à 23:04:17
Bien vu, les messages datent de 3 semaines, c'est bien mon problème.

Il y a aussi
https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1855574 (sur un PC Dell)
https://bugs.launchpad.net/ubuntu/+source/grub-installer/+bug/1855459
https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1854545
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 14:15:22
On m'a soufflé (merci Jean-christophe) que sur https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1753518 il y a une solution de contournement en #11

Cela a fonctionné en partie :
$ sudo su -
# cd /boot/efi/EFI
root@carte-fh:/boot/efi/EFI# ls -l
total 12
drwx------ 2 root root 4096 nov.  10  2018 BOOT
drwx------ 3 root root 4096 nov.  10  2018 Dell
drwx------ 2 root root 4096 nov.  10  2018 ubuntu
root@carte-fh:/boot/efi/EFI# mv ubuntu ubuntu-old
root@carte-fh:/boot/efi/EFI# apt install -f
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
Paramétrage de grub-efi-amd64-signed (1.93.15+2.02-2ubuntu8.14) ...
Traitement des actions différées (« triggers ») pour shim-signed (1.37~18.04.3+1
5+1533136590.3beb971-0ubuntu1) ...
W: APT had planned for dpkg to do more than it reported back (0 vs 4).
   Affected packages: grub-efi-amd64-signed:amd64
root@carte-fh:/boot/efi/EFI# ls
BOOT  Dell  ubuntu-old
root@carte-fh:/boot/efi/EFI# mv ubuntu-old ubuntu
root@carte-fh:/boot/efi/EFI# update-grub2
Sourcing file `/etc/default/grub'
Création du fichier de configuration GRUB…
Image Linux trouvée : /boot/vmlinuz-5.0.0-37-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-37-generic
Image Linux trouvée : /boot/vmlinuz-5.0.0-36-generic
Image mémoire initiale trouvée : /boot/initrd.img-5.0.0-36-generic
fait
root@carte-fh:/boot/efi/EFI# exit
déconnexion
$ efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0000,0002,0003,0005
Boot0000* Windows Boot Manager HD(1,GPT,0bb8261c-af59-11e2-ad71-d829a5f6482d,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................
Boot0002* EFI Network 1 PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/MAC(90b11c522ca3,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0003* EFI Network 2 PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x1)/MAC(90b11c522ca4,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0004* Windows Boot Manager HD(1,GPT,b221b9be-a399-11d5-a392-d4ae5290fd14,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................
Boot0005* EFI Fixed Disk Boot Device 1 PcieRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,c188b9a0-7588-4e8c-a27b-c87039655832,0x800,0x100000)

Cela permet donc de ne plus avoir le paquet grub-efi-amd64-signed en mode partiellement configuré.

Par contre pas d'entrée UEFI pour Ubuntu (il manque l'entrée N°1 qui est celle par défault) et efibootmgr me met toujours Invalid argument.
Je sais que si le serveur reboot, il ne redémarrera pas.

# efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"
Could not prepare Boot variable: Invalid argument

Voici un strace de la commande : efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"
# strace efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"
execve("/bin/efibootmgr", ["efibootmgr", "--disk", "/dev/sda", "--part", "1", "--create", "--gpt", "--label", "ubuntu", "--loader", "\\EFI\\ubuntu\\shmix64.efi"], 0x7ffd8791ba40 /* 19 vars */) = 0
brk(NULL)                               = 0x560e09ce1000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=32193, ...}) = 0
mmap(NULL, 32193, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ffb05707000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libefivar.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=146504, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffb05705000
mmap(NULL, 2242368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ffb052c4000
mprotect(0x7ffb052de000, 2093056, PROT_NONE) = 0
mmap(0x7ffb054dd000, 45056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7ffb054dd000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libefiboot.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\36\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=51120, ...}) = 0
mmap(NULL, 2146336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ffb050b7000
mprotect(0x7ffb050c3000, 2093056, PROT_NONE) = 0
mmap(0x7ffb052c2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb000) = 0x7ffb052c2000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ffb04cc6000
mprotect(0x7ffb04ead000, 2097152, PROT_NONE) = 0
mmap(0x7ffb050ad000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7ffb050ad000
mmap(0x7ffb050b3000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ffb050b3000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14560, ...}) = 0
mmap(NULL, 2109712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ffb04ac2000
mprotect(0x7ffb04ac5000, 2093056, PROT_NONE) = 0
mmap(0x7ffb04cc4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7ffb04cc4000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffb05703000
arch_prctl(ARCH_SET_FS, 0x7ffb05703b80) = 0
mprotect(0x7ffb050ad000, 16384, PROT_READ) = 0
mprotect(0x7ffb04cc4000, 4096, PROT_READ) = 0
mprotect(0x7ffb054dd000, 4096, PROT_READ) = 0
mprotect(0x7ffb052c2000, 4096, PROT_READ) = 0
mprotect(0x560e07ea5000, 4096, PROT_READ) = 0
mprotect(0x7ffb0570f000, 4096, PROT_READ) = 0
munmap(0x7ffb05707000, 32193)           = 0
access("/sys/firmware/efi/efivars/", F_OK) = 0
statfs("/sys/firmware/efi/efivars/", {f_type=EFIVARFS_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_NOSUID|ST_NODEV|ST_NOEXEC|ST_RELATIME}) = 0
brk(NULL)                               = 0x560e09ce1000
brk(0x560e09d02000)                     = 0x560e09d02000
openat(AT_FDCWD, "/sys/firmware/efi/efivars/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
fcntl(3, F_GETFD)                       = 0x1 (flags FD_CLOEXEC)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
getdents(3, /* 42 entries */, 32768)    = 2920
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\0t\0W\0i\0n\0d\0o\0w\0s\0 \0B\0o\0o\0t\0 \0"..., 4096) = 300
read(3, "", 3796)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200\\\0E\0F\0I\0 \0N\0e\0t\0w\0o\0r\0k\0 \0001\0"..., 4096) = 126
read(3, "", 3970)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200\\\0E\0F\0I\0 \0N\0e\0t\0w\0o\0r\0k\0 \0002\0"..., 4096) = 126
read(3, "", 3970)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\0t\0W\0i\0n\0d\0o\0w\0s\0 \0B\0o\0o\0t\0 \0"..., 4096) = 300
read(3, "", 3796)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0005-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200J\0E\0F\0I\0 \0F\0i\0x\0e\0d\0 \0D\0i\0s\0"..., 4096) = 138
read(3, "", 3958)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
brk(0x560e09d23000)                     = 0x560e09d23000
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_WRONLY|O_CREAT|O_EXCL, 0644) = 3
ioctl(3, FS_IOC_GETFLAGS, 0x7ffe061c6604) = 0
write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0"..., 122) = -1 EINVAL (Invalid argument)
ioctl(3, FS_IOC_GETFLAGS, 0x7ffe061c6604) = 0
unlink("/sys/firmware/efi/efivars/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c") = 0
close(3)                                = 0
write(2, "Could not prepare Boot variable", 31Could not prepare Boot variable) = 31
write(2, ": Invalid argument\n", 19: Invalid argument
)    = 19
exit_group(5)                           = ?
+++ exited with 5 +++
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: thenico le 05 janvier 2020 à 15:16:16
Essaie de supprimer /sys/firmware/efi/efivars/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c
Sinon, tu peut essayer de copier EFI\ubuntu\shmix64.efi dans EFI\BOOT\BOOTX64.EFI puis tu active le boot sur le Fixed disk Boot Device 1 avec efibootmgr -o 5
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 16:08:49
/sys/firmware/efi/efivars/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c n'existe pas :

# ls -l /sys/firmware/efi/efivars/
total 0
-rw-r--r-- 1 root root 1156 déc.   3 06:29 2151678336-417acee0-6fa9-4a82-99d7-f9b1dd271e48
-rw-r--r-- 1 root root   36 déc.   3 06:29 2151678337-417acee0-6fa9-4a82-99d7-f9b1dd271e48
-rw-r--r-- 1 root root   13 déc.   3 06:29 334-71db7b7e-4165-48fa-ac9d-f9af4cefc534
-rw-r--r-- 1 root root  304 déc.   3 06:29 Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  130 déc.   3 06:29 Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  130 déc.   3 06:29 Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  304 déc.   3 06:29 Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  142 déc.   3 06:29 Boot0005-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root    6 déc.   3 06:29 BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root    8 déc.   3 06:29 BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   14 déc.   6 06:43 BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   53 déc.   3 06:29 ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  603 déc.   3 06:29 ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   58 déc.   3 06:29 ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  642 déc.   3 06:29 ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  304 déc.   3 06:29 DbocBoot0000-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  142 déc.   3 06:29 DbocBoot0001-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  142 déc.   3 06:29 DbocBoot0002-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  304 déc.   3 06:29 DbocBoot0003-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  142 déc.   3 06:29 DbocBoot0004-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  137 déc.   3 06:29 DbocBoot0005-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  122 déc.   3 06:29 DbocBoot0006-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  122 déc.   3 06:29 DbocBoot0007-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root  142 déc.   3 06:29 DbocBoot0008-1ba4c901-eb4a-493f-aeef-90a6136da384
-rw-r--r-- 1 root root    5 déc.   3 06:29 DefaultIplBootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   16 déc.   3 06:29 DefaultUefiBootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  150 déc.   3 06:29 ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  642 déc.   3 06:29 ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  221 déc.   3 06:29 HDDP-fab7e9e1-39dd-4f2b-8408-e20e906cb6de
-rw-r--r-- 1 root root    8 déc.   3 06:29 Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   23 déc.   3 06:29 LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root    5 déc.   3 06:29 MemoryOverwriteRequestControl-e20939be-32d4-41be-a150-897f85d49829
-rw-r--r-- 1 root root    8 déc.   3 06:29 MTC-eb704011-1402-11d3-8e77-00a0c969723b
-rw-r--r-- 1 root root  222 déc.   3 06:29 NETWORK_SETTINGS_VAR-6568a5f5-1144-401c-b693-34353e9afdd5
-rw-r--r-- 1 root root   12 déc.   3 06:29 PerfDataMemAddr-76b6bdfa-2acd-4462-9e3f-cb58c969d937
-rw-r--r-- 1 root root   10 déc.   3 06:29 PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root   60 déc.   3 06:29 PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root    8 déc.   3 06:29 RTC-378d7b65-8da9-4773-b6e4-a47826a833e1
-rw-r--r-- 1 root root    6 déc.   3 06:29 Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c
-rw-r--r-- 1 root root  104 déc.   3 06:29 USER_SETTINGS_VAR-56f0edc4-25ae-4236-aca3-0bcd410aa2ae
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 05 janvier 2020 à 16:27:50
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_WRONLY|O_CREAT|O_EXCL, 0644) = 3
ioctl(3, FS_IOC_GETFLAGS, 0x7ffe061c6604) = 0
write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0"..., 122) = -1 EINVAL (Invalid argument)

Il créé le fichier mais n'arrive pas à écrire dedans.
Soit problème alignement, soit filesystem efivars pas monté ou plein ou en read-only ?


EINVAL
fd is attached to an object which is unsuitable for writing; or the file was opened with the O_DIRECT flag, and either the address specified in buf, the value specified in count, or the current file offset is not suitably aligned.


Voir aussi comment faire du ménage dans efivars si plein, et option efi_no_storage_paranoia :
https://github.com/rhboot/efibootmgr/issues/83# (https://github.com/rhboot/efibootmgr/issues/83#)
https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#Requirements_for_UEFI_variable_support (https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#Requirements_for_UEFI_variable_support)


UEFI variables support in Linux kernel
Linux kernel exposes UEFI variables data to userspace via efivarfs (EFI VARiable FileSystem) interface (CONFIG_EFIVAR_FS) - mounted using efivarfs kernel module at /sys/firmware/efi/efivars - it has no maximum per-variable size limitation and supports UEFI Secure Boot variables. Introduced in kernel 3.8.

If any userspace tool is unable to modify UEFI variable data, check for existence of /sys/firmware/efi/efivars/dump-* files. If they exist, delete them, reboot and retry again.

If the above step does not fix the issue, try booting with efi_no_storage_paranoia kernel parameter to disable kernel UEFI variable storage space check that may prevent writing/modification of UEFI variables.
Warning: efi_no_storage_paranoia should only be used when needed and should not be left as a normal boot option. The effect of this kernel command line parameter turns off a safeguard that was put in place to help avoid the bricking of machines when the NVRAM gets too full. See FS#34641 for more information.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 17:14:53
Comment savoir le problème qui affecte /sys/firmware/efi/efivars/ ?

C'est un espace de la NVRAM qui est exposé là sur /sys/firmware/efi/efivars/ ou un espace de la partition ESP ? (partition EFI System, d'une taille généralement de 500 Mo si on laisse Ubuntu la créer, qui est habituellement sur /dev/sda1)
Si c'est un espace de la partition ESP, pourquoi l'exposer aussi sur /boot/efi ?

On est donc plus sur un pb lié au serveur, que lié à l'OS (j'aurais le même bug avec un autre Linux, le fait que cela se soit produit lors de la mise à jour de début décembre n'est pas lié à la mise à jour proposée)

Je pense que /sys/firmware/efi/efivars/ est bien monté, car j'arrive à lire le contenu des fichiers présents.

Comment savoir si il est plein ? (la partition ESP elle est utilisée à 2%)
On peut l'afficher dans la commande df ?

J'ai calculé la taille des fichiers listés via ls -l mais en comparant un autre serveur Dell de même génération équipé lui aussi d'Ubuntu 18.04 LTS en OS, je vois que le serveur problématique a plutôt moins de données.

# df
Sys. de fichiers blocs de 1K   Utilisé Disponible Uti% Monté sur
udev                12268452         0   12268452   0% /dev
tmpfs                2460772      1168    2459604   1% /run
/dev/sda2           28705788   5304864   21919708  20% /
tmpfs               12303848         0   12303848   0% /dev/shm
tmpfs                   5120         0       5120   0% /run/lock
tmpfs               12303848         0   12303848   0% /sys/fs/cgroup
tmpfs                9843080        24    9843056   1% /tmp
tmpfs                9843080      1140    9841940   1% /var/log/apache2
/dev/sda1             523248      6164     517084   2% /boot/efi
/dev/sdb1          961301832 795888124  116559284  88% /ssd
/dev/sda4          185868260  66199284  110204352  38% /home
tmpfs                2460768         0    2460768   0% /run/user/1000
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: teph le 05 janvier 2020 à 17:37:33
on peut avoir la taille des fichiers avec du -sh sinon
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 17:40:12
Cela fonctionne pour /sys/firmware/efi/efivars chez toi ?

Moi non : (testé sur 3 machines UEFI)

# du -sh /sys/firmware/efi/efivars
0 /sys/firmware/efi/efivars
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 05 janvier 2020 à 18:16:50
Arrives-tu à créer un fichier non vide à l'intérieur ?
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 18:21:28
Même sur un autre système, je n'arrive pas a créer un fichier :

# echo > /sys/firmware/efi/efivars/tmp.tmp
bash: /sys/firmware/efi/efivars/tmp.tmp: Argument invalide

Tu arrives a créer un fichier dans /sys/firmware/efi/efivars/ ?
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 05 janvier 2020 à 18:22:22
Que donne ceci :

grep -i efivar /proc/mounts
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: kgersen le 05 janvier 2020 à 19:04:09
On m'a soufflé (merci Jean-christophe) que sur https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1753518 il y a une solution de contournement en #11

qu'on t'avais indiqué en #2 ici meme depuis le début de ton souci... ;D
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 05 janvier 2020 à 19:36:21
Désolé, en fait ma compréhension du pb a bien évolué au cour de ce sujet...

Que donne ceci :

grep -i efivar /proc/mounts

Voila :
$ grep -i efivar /proc/mounts
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 05 janvier 2020 à 21:15:42
Tout à l'air ok au niveau efivarfs.
En regardant le code du driver efivars, on ne peut pas y écrire n'importe quoi, le contenu des fichiers doit être valide (sinon il renvoie EINVAL).
https://code.woboq.org/linux/linux/drivers/firmware/efi/vars.c.html (https://code.woboq.org/linux/linux/drivers/firmware/efi/vars.c.html)

Cf validate_load_option()

Le souci est donc plus dans ce que la routine tente d'écrire à l'intérieur du fichier.
Pas simple...
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 06 janvier 2020 à 00:54:54
C'est un espace de la NVRAM qui est exposé là sur /sys/firmware/efi/efivars/ ou un espace de la partition ESP ? (partition EFI System, d'une taille généralement de 500 Mo si on laisse Ubuntu la créer, qui est habituellement sur /dev/sda1)
Les variables EFI sont en NVRAM, c'est la façon dont tous les réglages UEFI sont stockés.
La taille dépend du système, et additionner la taille des variables ne suffit pas, ça peut être fragmenté (mais l'UEFI doit essayer de défragmenter si nécessaire).

On est donc plus sur un pb lié au serveur, que lié à l'OS (j'aurais le même bug avec un autre Linux, le fait que cela se soit produit lors de la mise à jour de début décembre n'est pas lié à la mise à jour proposée)
Il y a eu des vérifications ajoutées dans le kernel car certains PC portables se sont retrouvés HS quand il ne restait plus assez d'espace libre : la protection peut être désactivée avec "efi_no_storage_paranoia", mais il faut redémarrer pour ça...
Avec une autre distribution, tout dépend si elle lance efibootmgr automatiquement lors de mises à jour ou pas. La commande a peut-être supprimé l'ancienne entrée Ubuntu, avant d'échouer à en recréer une nouvelle  :-\

Est-ce que tu as essayé de supprimer les entrées de boot Windows avec efibootmgr ? Elles ne servent pas, et si ça fonctionne peut-être que la place libérée sera suffisante.

Sinon, tu peut essayer de copier EFI\ubuntu\shmix64.efi dans EFI\BOOT\BOOTX64.EFI puis tu active le boot sur le Fixed disk Boot Device 1 avec efibootmgr -o 5
Sur Fedora c'est le cas par défaut, et ça rajoute automatiquement l'entrée de boot pour pointer ensuite sur shimx64.efi, je ne sais pas si c'est le cas sur Ubuntu.
Si Boot5 corresponde bien à la partition EFI, ça pourrait effectivement fonctionner.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 06 janvier 2020 à 01:17:36
Sinon, il y a d'autres problèmes en ce moment avec des machines Dell grand public et shim / grub : https://bugzilla.redhat.com/show_bug.cgi?id=1779611 sous Fedora.
Certains grubx64.efi n'arrivent pas à démarrer un kernel (écran noir ou reboot de la machine).

On voit que ce type de mise à jour présente toujours un risque.
Sous Fedora, grub n'était jamais mis à jour automatiquement sur les machine BIOS (il faillait faire un grub-install manuellement après mise à jour du paquet), mais quand ils ont eu besoin de faire des changements (https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault) ça a créé plein de problèmes.
Sur les machines UEFI, le paquet met directement à jour le grubx64.efi dans l'ESP.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 06 janvier 2020 à 10:21:33
Est-ce que tu as essayé de supprimer les entrées de boot Windows avec efibootmgr ? Elles ne servent pas, et si ça fonctionne peut-être que la place libérée sera suffisante.

Voila :

# efibootmgr -Bb 0004
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0000,0002,0003,0005
Boot0000* Windows Boot Manager
Boot0002* EFI Network 1
Boot0003* EFI Network 2
Boot0005* EFI Fixed Disk Boot Device 1

# efibootmgr -Bb 0000
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0002,0003,0005
Boot0002* EFI Network 1
Boot0003* EFI Network 2
Boot0005* EFI Fixed Disk Boot Device 1

# efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0002,0003,0005
Boot0002* EFI Network 1   PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/MAC(90b11c522ca3,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0003* EFI Network 2   PcieRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x1)/MAC(90b11c522ca4,0)/IPv4(0.0.0.00.0.0.0,0,0)
Boot0005* EFI Fixed Disk Boot Device 1   PcieRoot(0x0)/Pci(0x1f,0x2)/Sata(0,0,0)/HD(1,GPT,c188b9a0-7588-4e8c-a27b-c87039655832,0x800,0x100000)

# efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"
Could not prepare Boot variable: Invalid argument
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 06 janvier 2020 à 10:34:36
Sur Fedora c'est le cas par défaut, et ça rajoute automatiquement l'entrée de boot pour pointer ensuite sur shimx64.efi, je ne sais pas si c'est le cas sur Ubuntu.
Si Boot5 corresponde bien à la partition EFI, ça pourrait effectivement fonctionner.

Il semblerait que non, mais les deux fichiers présents ont été mis à jour en même temps que ceux du dossier Ubuntu.

Voici les différents dossiers de ma partition /boot/efi :

# ls -l /boot/efi
total 4
drwx------ 5 root root 4096 janv.  5 14:08 EFI

# ls -l /boot/efi/EFI/
total 12
drwx------ 2 root root 4096 nov.  10  2018 BOOT
drwx------ 3 root root 4096 nov.  10  2018 Dell
drwx------ 2 root root 4096 nov.  10  2018 ubuntu

# ls -l /boot/efi/EFI/ubuntu/
total 3644
-rwx------ 1 root root     108 déc.  30 12:31 BOOTX64.CSV
-rwx------ 1 root root     126 déc.  30 12:31 grub.cfg
-rwx------ 1 root root 1116024 déc.  30 12:31 grubx64.efi
-rwx------ 1 root root 1269496 déc.  30 12:31 mmx64.efi
-rwx------ 1 root root 1334816 déc.  30 12:31 shimx64.efi

# ls -l /boot/efi/EFI/BOOT
total 2492
-rwx------ 1 root root 1334816 déc.  30 12:31 BOOTX64.EFI
-rwx------ 1 root root 1213032 déc.  30 12:31 fbx64.efi

# ls -l /boot/efi/EFI/Dell/
total 4
drwx------ 2 root root 4096 nov.  10  2018 BootOptionCache

# ls -l /boot/efi/EFI/Dell/BootOptionCache/
total 4
-rwx------ 1 root root 282 nov.  10  2018 BootOptionCache.dat


Contenu de BootOptionCache.dat :
# cat /boot/efi/EFI/Dell/BootOptionCache/BootOptionCache.dat
��l�vBoot0005bubuntu�����u�N�{�p9eX24\EFI\ubuntu\shimx64.efi�nBoot0005�.EFI Fixed Disk Boot Device 1�����u�N�{�p9eX2�
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 06 janvier 2020 à 11:56:28
# efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shmix64.efi"
Could not prepare Boot variable: Invalid argument
C'est shimx64.efi, et pas shmix64.efi. Mais je n'ai pas l'impression que le kernel vérifie ça.
Sinon, attention avec les \, le résultat peut dépendre du shell utilisé pour cette ligne de commande (pour bash c'est correct).

Le code du kernel me semble plutôt remonter ENOSPC quand il n'y a pas passez de place, mais bizarrement pour certaines personnes efi_no_storage_paranoia était nécessaire pour ne pas avoir EINVAL.

Le code qui valide le contenu de ce que efibootmgr écrit est https://code.woboq.org/linux/linux/drivers/firmware/efi/vars.c.html#validate_load_option.
Tu peux utiliser l'option "--test boot0001.bin" pour écrire dans un fichier, on pourra essayer de le valider ensuite (soit avec du code, soit sur une autre machine, avec un "cp boot0001.bin /sys/firmware/efi/efivars/Boot1234-8be4df61-93ca-11d2-aa0d-00e098032b8".
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 06 janvier 2020 à 16:52:23
quand je mets --test filename (Don't write to NVRAM, write to filename) j'ai systématiquement : efibootmgr: unrecognized option '--test'

j'ai essayé en mettant l'option en premier, même comportement.

Ca serait une option introduite dans une version plus récente ? (Note: J'ai le même problème avec efibootmgr version 15, version livrée avec Ubuntu 19.10)

# efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi" --test boot0001.bin
efibootmgr: unrecognized option '--test'
efibootmgr version 15
usage: efibootmgr [options]
-a | --active         sets bootnum active
-A | --inactive       sets bootnum inactive
-b | --bootnum XXXX   modify BootXXXX (hex)
-B | --delete-bootnum delete bootnum
-c | --create         create new variable bootnum and add to bootorder
-C | --create-only create new variable bootnum and do not add to bootorder
-D | --remove-dups remove duplicate values from BootOrder
-d | --disk disk       (defaults to /dev/sda) containing loader
-r | --driver         Operate on Driver variables, not Boot Variables.
-e | --edd [1|3|-1]   force EDD 1.0 or 3.0 creation variables, or guess
-E | --device num      EDD 1.0 device number (defaults to 0x80)
-g | --gpt            force disk with invalid PMBR to be treated as GPT
-i | --iface name     create a netboot entry for the named interface
-l | --loader name     (defaults to "\EFI\ubuntu\grub.efi")
-L | --label label     Boot manager display label (defaults to "Linux")
-m | --mirror-below-4G t|f mirror memory below 4GB
-M | --mirror-above-4G X percentage memory to mirror above 4GB
-n | --bootnext XXXX   set BootNext to XXXX (hex)
-N | --delete-bootnext delete BootNext
-o | --bootorder XXXX,YYYY,ZZZZ,...     explicitly set BootOrder (hex)
-O | --delete-bootorder delete BootOrder
-p | --part part        (defaults to 1) containing loader
-q | --quiet            be quiet
-t | --timeout seconds  set boot manager timeout waiting for user input.
-T | --delete-timeout   delete Timeout.
-u | --unicode | --UCS-2  handle extra args as UCS-2 (default is ASCII)
-v | --verbose          print additional information
-V | --version          return version and exit
-w | --write-signature  write unique sig to MBR if needed
-y | --sysprep          Operate on SysPrep variables, not Boot Variables.
-@ | --append-binary-args file  append extra args from file (use "-" for stdin)
-h | --help             show help/usage
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 06 janvier 2020 à 17:07:53
J'ai bien cette option sur RHEL6/OL6/RHEL7/OL7, mais le versionnage RedHat suit une numérotation différente :

# efibootmgr -V
version 0.5.4
# efibootmgr -h 2>&1 |grep test
           | --test filename    don't write to NVRAM, write to filename.

Sinon avec strace tu peux avoir le contenu complet du buffer écrit sous forme ASCII/Hexa avec l'option "-e write=all".
A priori, il utilise le file descriptor 3 pour écrire, donc pour éviter que ce soit trop verbeux, "-e write=3" devrait suffire.

write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0"..., 122) = -1 EINVAL (Invalid argument)

la commande deviendrait donc :

strace -fe write=3 efibootmgr ....
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 06 janvier 2020 à 21:30:58
quand je mets --test filename (Don't write to NVRAM, write to filename) j'ai systématiquement : efibootmgr: unrecognized option '--test'
En fait c'est une ancienne option, je n'aurais pas dû faire confiance à une page de man trouvée sur internet.

Donc pour récupérer les données que efibootmgr essaye d'écrire, soit tu fais comme Thornhill suggère, soit il y a une autre méthode gérée dans la libefivars utilisée :
mkdir /tmp/efivars
EFIVARFS_PATH=/tmp/efivars/ efibootmgr ...
Avec ça, efibootmgr va créer des fichiers normaux.
Dans ce cas précis ce sera avec un point de départ vide, si on veut simuler de manière plus précise on peut faire un "cp /sys/firmware/efi/efivars/Boot* /tmp/efivars", mais ça ne devrait changer que le numéro qu'il va utiliser, donc le nom du fichier, pas le contenu.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 06 janvier 2020 à 21:55:07
Voila le retour de strace -fe write=3 efibootmgr :
# strace -fe write=3 efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"
execve("/bin/efibootmgr", ["efibootmgr", "--disk", "/dev/sda", "--part", "1", "--create", "--gpt", "--label", "ubuntu", "--loader", "\\EFI\\ubuntu\\shimx64.efi"], 0x7fff440748c0 /* 19 vars */) = 0
brk(NULL)                               = 0x55d0aaacc000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=32193, ...}) = 0
mmap(NULL, 32193, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2e81a69000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libefivar.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=146504, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e81a67000
mmap(NULL, 2242368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2e81626000
mprotect(0x7f2e81640000, 2093056, PROT_NONE) = 0
mmap(0x7f2e8183f000, 45056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f2e8183f000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libefiboot.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\36\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=51120, ...}) = 0
mmap(NULL, 2146336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2e81419000
mprotect(0x7f2e81425000, 2093056, PROT_NONE) = 0
mmap(0x7f2e81624000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb000) = 0x7f2e81624000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2e81028000
mprotect(0x7f2e8120f000, 2097152, PROT_NONE) = 0
mmap(0x7f2e8140f000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f2e8140f000
mmap(0x7f2e81415000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2e81415000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14560, ...}) = 0
mmap(NULL, 2109712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2e80e24000
mprotect(0x7f2e80e27000, 2093056, PROT_NONE) = 0
mmap(0x7f2e81026000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f2e81026000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2e81a65000
arch_prctl(ARCH_SET_FS, 0x7f2e81a65b80) = 0
mprotect(0x7f2e8140f000, 16384, PROT_READ) = 0
mprotect(0x7f2e81026000, 4096, PROT_READ) = 0
mprotect(0x7f2e8183f000, 4096, PROT_READ) = 0
mprotect(0x7f2e81624000, 4096, PROT_READ) = 0
mprotect(0x55d0aa235000, 4096, PROT_READ) = 0
mprotect(0x7f2e81a71000, 4096, PROT_READ) = 0
munmap(0x7f2e81a69000, 32193)           = 0
access("/sys/firmware/efi/efivars/", F_OK) = 0
statfs("/sys/firmware/efi/efivars/", {f_type=EFIVARFS_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_NOSUID|ST_NODEV|ST_NOEXEC|ST_RELATIME}) = 0
brk(NULL)                               = 0x55d0aaacc000
brk(0x55d0aaaed000)                     = 0x55d0aaaed000
openat(AT_FDCWD, "/sys/firmware/efi/efivars/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
fcntl(3, F_GETFD)                       = 0x1 (flags FD_CLOEXEC)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
getdents(3, /* 40 entries */, 32768)    = 2776
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200\\\0E\0F\0I\0 \0N\0e\0t\0w\0o\0r\0k\0 \0001\0"..., 4096) = 126
read(3, "", 3970)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200\\\0E\0F\0I\0 \0N\0e\0t\0w\0o\0r\0k\0 \0002\0"..., 4096) = 126
read(3, "", 3970)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0005-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_RDONLY) = 3
read(3, "\7\0\0\0", 4)                  = 4
read(3, "\1\0\0\200J\0E\0F\0I\0 \0F\0i\0x\0e\0d\0 \0D\0i\0s\0"..., 4096) = 138
read(3, "", 3958)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
readlink("/sys/dev/block/8:0", "../../devices/pci0000:00/0000:00"..., 4096) = 78
openat(AT_FDCWD, "/dev/sda", O_RDONLY)  = 4
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 512, SEEK_SET)                 = 512
read(4, "EFI PART\0\0\1\0\\\0\0\0\351\26\350\241\0\0\0\0\1\0\0\0\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 1024, SEEK_SET)                = 1024
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
fstat(4, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
uname({sysname="Linux", nodename="carte-fh", ...}) = 0
ioctl(4, BLKGETSIZE64, [250059350016])  = 0
ioctl(4, BLKSSZGET, [512])              = 0
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 250059349504, SEEK_SET)        = 250059349504
read(4, "EFI PART\0\0\1\0\\\0\0\0\251\344\305~\0\0\0\0oY\34\35\0\0\0\0"..., 512) = 512
ioctl(4, BLKSSZGET, [512])              = 0
brk(0x55d0aab0e000)                     = 0x55d0aab0e000
lseek(4, 250059333120, SEEK_SET)        = 250059333120
read(4, "(s*\301\37\370\322\21\272K\0\240\311>\311;\240\271\210\301\210u\214N\242{\310p9eX2"..., 16384) = 16384
ioctl(4, BLKSSZGET, [512])              = 0
lseek(4, 0, SEEK_SET)                   = 0
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/sys/firmware/efi/efivars/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c", O_WRONLY|O_CREAT|O_EXCL, 0644) = 3
ioctl(3, FS_IOC_GETFLAGS, 0x7ffe851f4b34) = 0
write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0"..., 122) = -1 EINVAL (Invalid argument)
ioctl(3, FS_IOC_GETFLAGS, 0x7ffe851f4b34) = 0
unlink("/sys/firmware/efi/efivars/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c") = 0
close(3)                                = 0
write(2, "Could not prepare Boot variable", 31Could not prepare Boot variable) = 31
write(2, ": Invalid argument\n", 19: Invalid argument
)    = 19
exit_group(5)                           = ?
+++ exited with 5 +++
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 06 janvier 2020 à 22:02:15
Ca n'a pas fonctionné, il n'y a pas de dump, sur la ligne write la valeur est tronquée.
Sinon, "strace -f -e write -s 256 efibootmgr ..."
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 06 janvier 2020 à 22:07:50
Voila :
# strace -f -e write -s 256 efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"
write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0\0\10\0\0\0\0\0\0\0\0\20\0\0\0\0\0\240\271\210\301\210u\214N\242{\310p9eX2\2\2\4\0044\0\\\0E\0F\0I\0\\\0u\0b\0u\0n\0t\0u\0\\\0s\0h\0i\0m\0x\0006\0004\0.\0e\0f\0i\0\0\0\177\377\4\0", 122) = -1 EINVAL (Invalid argument)
write(2, "Could not prepare Boot variable", 31Could not prepare Boot variable) = 31
write(2, ": Invalid argument\n", 19: Invalid argument
)    = 19
+++ exited with 5 +++
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Thornhill le 06 janvier 2020 à 23:08:04
En remplaçant les caractères non imprimables par espace, ça donne ceci :

$ echo "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0\0\10\0\0\0\0\0\0\0\0\20\0\0\0\0\0\240\271\210\301\210u\214N\242{\310p9eX2\2\2\4\0044\0\\\0E\0F\0I\0\\\0u\0b\0u\0n\0t\0u\0\\\0s\0h\0i\0m\0x\0006\0004\0.\0e\0f\0i\0\0\0\177\377\4\0"  | sed 's:\\[0-9]*: :g'
        b u b u n t u     *                          u N { p9eX2       E F I   u b u n t u   s h i m x   . e f i
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 07 janvier 2020 à 01:48:21
Voila :
# strace -f -e write -s 256 efibootmgr --disk /dev/sda --part 1 --create --gpt --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"
write(3, "\7\0\0\0\1\0\0\0b\0u\0b\0u\0n\0t\0u\0\0\0\4\1*\0\1\0\0\0\0\10\0\0\0\0\0\0\0\0\20\0\0\0\0\0\240\271\210\301\210u\214N\242{\310p9eX2\2\2\4\0044\0\\\0E\0F\0I\0\\\0u\0b\0u\0n\0t\0u\0\\\0s\0h\0i\0m\0x\0006\0004\0.\0e\0f\0i\0\0\0\177\377\4\0", 122) = -1 EINVAL (Invalid argument)
write(2, "Could not prepare Boot variable", 31Could not prepare Boot variable) = 31
write(2, ": Invalid argument\n", 19: Invalid argument
)    = 19
+++ exited with 5 +++

J'ai essayé d'ajouté la ces données dans une VM sur laquelle j'ai booté un liveCD Ubuntu 18.04 (kernel 5.0.0-23).
Il en veut bien, donc le efibootmgr génère les bonnes données.
J'ai pu au total ajouter 71 entrées, avant d'aboutir à EINVAL.
Mais à ce moment là, même en effaçant toutes les entrées, impossible d'en ajouter à nouveau, EINVAL systématique.

Avec une image Fedora 31 (kernel 5.3.7), j'ai pu ajouter 86 entrées, mais même problème ensuite.

Il ne semble pas être possible de libérer de l'espace sans au moins rebooter ! Ca dépend peut-être de l'UEFI, mais c'est très moche...
https://mjg59.dreamwidth.org/23554.html
Citer
UEFI implementations generally handle variable deletion by flagging the space as reclaimable rather than immediately making it available again. You need to reboot in order for the firmware to garbage collect it. Some firmware seems to require two reboot cycles to do this properly. Thanks, firmware.

https://mjg59.dreamwidth.org/25091.html
Citer
The hope was that any system that booted with only 5KB of space available in nvram would trigger a garbage collection run. Unfortunately, it turned out that that wasn't true - some systems will only trigger garbage collection if the OS actually makes an attempt to write a variable that won't otherwise fit.

Hence this patch. The new approach is to ask the firmware how much space is available. If the size of the new variable would reduce this to less than 5K, we attempt to create a variable bigger than the remaining space. This should cause the firmware to realise that it's out of room and either (depending on implementation) perform a garbage collection run at runtime or set a flag that will cause the system to perform garbage collection on the next reboot. We then call QueryVariableInfo() again to see whether a garbage collection run actually happened, and if so check whether we now have enough space. If so, we go ahead and write the variable. If not, we tell userspace that there's not enough space.

Donc il y a des UEFI pour lesquels même s'il reste peu d'espace libre, il faut d'abord tenter une écriture qui échoue puis rebooter pour pouvoir réussir à écrire quelque chose  :o
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 07 janvier 2020 à 09:16:45
Que pense tu de modifier une entrée existante (par exemple celle d'un boot réseau) pour devenir un boot Ubuntu ?

Si ce n'est pas possible, je pense qu'une intervention sur site sera nécessaire.

Je retiens qu'il ne faut pas mettre un vieux serveur en UEFI (c'est ce que j'avais écris sur Tutoriel pour corriger le boot UEFI d'un vieux serveur Dell qui a oublié Ubuntu (https://lafibre.info/serveur-linux/dell-rajouter-entree-uefi/), un serveur de la même génération)
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 07 janvier 2020 à 10:15:32
Quand on est dans l'état où il n'y a plus de place, il est impossible de modifier la moindre valeur, ce serait-ce que le BootOrder. Je pense que c'est parce que ça ce fait via un ajout puis une suppression.

Le fait qu'Ubuntu appelle efibootmgr automatiquement sur des mises à jour, c'est risqué. En plus, vu le résultat, on dirait qu'ils font une suppression puis un ajout, alors qu'il faudrait faire l'inverse pour ne pas risquer de se retrouver bloqué au milieu.
Je ne sais pas si c'est lié à l'age du serveur : le problème est soit lié à un manque de place combiné au kernel qui est devenu beaucoup plus prudent, soit à l'accumulation des écritures sans nettoyage (qui nécessite un reboot).
Les écritures peuvent venir de :
 - l'UEFI directement (logs, ...)
 - efi-pstore (ce qui a révélé le bug des portables Samsung à l'époque), qui permet d'enregistrer les logs kernels en cas de crash pour les récupérer après reboot
 - de multiples mises à jour de grub avec les scripts Ubuntu
 - ...

Il y a toujours la possibilité qu'une des entrées de boot existantes fonctionne, par exemple "EFI Fixed Disk Boot Device 1", cad EFI\BOOT\BOOTX64.EFI de ce qui semble bien être l'ESP du serveur (même identifiant que l'entrée que efibootmgr essaye de créer). C'est en plus une valeur qui est en général recréée automatiquement si nécessaire, si aucune entrée n'est valide la logique est de rechercher les ESP des disques durs présents sur le système.
Mais effectivement il y a le risque qu'une intervention sur site soit nécessaire.
il faudrait bien vérifier le contenu de l'ESP pour se donner toutes les chances de ce côté.

Est-ce que le serveur utilise Secure Boot ? Si oui, il y a un risque que le mmx64.efi (MockManager) soit invoqué pour demander à l'utilisateur physiquement présent d'ajouter des clés, cf https://wiki.ubuntu.com/UEFI/SecureBoot.
Vu que le efibootmgr a échoué je ne sais pas s'il ne peut pas manquer des opérations derrière.

Pour le comportement du fallback : https://www.rodsbooks.com/efi-bootloaders/fallback.html, et https://github.com/rhboot/shim/blob/master/README.fallback (pas à jour dans les noms...).

Le bootx64.efi semble bien être une copie de shim, on peut vérifier ce qu'il va essayer de faire en regardant les chaînes de caractères qu'il contient : normalement il essaye de charger grubx64.efi, puis sinon fbx64.efi (mais avant c'était fallback.efi, c'est pour ça qu'il est important de vérifier).
strings -el /boot/efi/EFI/BOOT/BOOTX64.EFI | grep -i "\.efi"
Le fallback (fbx64.efi normalement) devrait trouver le /boot/efi/EFI/ubuntu/BOOTX64.CSV puisque c'est le seul boot.csv / bootx64.csv de la partition, et s'en servir pour recréer l'entrée de boot Ubuntu.
On peut en vérifier le contenu, normalement il devrait pointer vers le shimx64.efi :
# hexdump -C /boot/efi/EFI/ubuntu/BOOTX64.CSV
# iconv --from-code=ucs2 /boot/efi/EFI/ubuntu/BOOTX64.CSV

Par précaution, il faudrait aussi vérifier si le grub.cfg semble correct.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 07 janvier 2020 à 10:48:23
Le serveur ne supporte pas le secure boot, le Dell PowerEdge R320 est un serveur conçu en 2011/2012.

Il y a bien un reboot environ chaque mois, afin d’appliquer les mises à jour du kernel, mais j'imagine que le nettoyage des entrées supprimées n'a pas été fait (j'ai désactivé ces reboot automatiques de nuit quand une mise à jour le nécessite)

# strings -el /boot/efi/EFI/BOOT/BOOTX64.EFI | grep -i "\.efi"
Could not get image for bootx64.efi: %r
.EFI
\EFI\BOOT\fbx64.efi
\fbx64.efi
\mmx64.efi
\grubx64.efi
add-symbol-file /usr/lib/debug/usr/share/shim/x64-15-15/shimx64.efi.debug 0x%08x -s .data 0x%08x
\mmx64.efi

Contenu de /boot/efi/EFI/ubuntu/BOOTX64.CSV :
# hexdump -C /boot/efi/EFI/ubuntu/BOOTX64.CSV
00000000  73 00 68 00 69 00 6d 00  78 00 36 00 34 00 2e 00  |s.h.i.m.x.6.4...|
00000010  65 00 66 00 69 00 2c 00  75 00 62 00 75 00 6e 00  |e.f.i.,.u.b.u.n.|
00000020  74 00 75 00 2c 00 2c 00  54 00 68 00 69 00 73 00  |t.u.,.,.T.h.i.s.|
00000030  20 00 69 00 73 00 20 00  74 00 68 00 65 00 20 00  | .i.s. .t.h.e. .|
00000040  62 00 6f 00 6f 00 74 00  20 00 65 00 6e 00 74 00  |b.o.o.t. .e.n.t.|
00000050  72 00 79 00 20 00 66 00  6f 00 72 00 20 00 75 00  |r.y. .f.o.r. .u.|
00000060  62 00 75 00 6e 00 74 00  75 00 0a 00              |b.u.n.t.u...|
0000006c

# iconv --from-code=ucs2 /boot/efi/EFI/ubuntu/BOOTX64.CSV
shimx64.efi,ubuntu,,This is the boot entry for ubuntu
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: hwti le 07 janvier 2020 à 13:03:46
Pourtant Dell mentionne Windows Server 2012, il me semblait que le Secure Boot était obligatoire pour la certification Microsoft (s'il y a ce qu'il faut matériellement, le support peut avoir été ajouté via une mise à jour).

Les fichiers semblent corrects, donc on peut raisonnablement espérer que tout se passe bien au reboot.
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 07 janvier 2020 à 15:01:03
Windows Server 2012 <=> Windows 7

Ce ne se serait pas Windows Server 2018 (qui tout comme Windows 8 ) qui demande le secure boot pour la certification ?
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: renaud07 le 07 janvier 2020 à 16:37:35
Server 2012 correspond à windows 8. C'est 2008 R2 pour 7.

Apparemment seul windows 8 était concerné par l'obligation du secure boot si les constructeurs voulaient la certification.

Citer
Secure Boot is required for all retail Windows 8 computers that get Microsoft’s stamp of approval.

Source : https://www.derekseaman.com/2012/08/how-to-configure-windows-8server-2012.html
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: Taboin le 07 janvier 2020 à 16:40:29
Windows Server 2018 n’existe pas, c’est 2016 et 2019
Titre: Ubuntu server 18.04: Bug aprés mise à jour de "grub-efi-amd64-signed"
Posté par: vivien le 07 janvier 2020 à 16:43:12
Il faut que je dorme plus !