Think I may have deleted my EFI partition

Hey guys,

I have a Dell XPS 9710 with a triple boot.
Windows 11, Fedora and Kali linux. Working perfectly.

My daily driver is Fedora. I was constantly notified of a bios update that I could not get done because of lack of space in the /boot/efi.

The update was from 1.27 → 1.29.

I decided to take it on today as the recent kernel update on Fedora killed my sound.

Followed a tutorial, which required

  1. creating a backup of /boot/efi/Efi
  2. Use gparted to delete the efi partition
  3. Add more space
  4. Recreate the partition exactly as it was
  5. Retore the backup
  6. Restart

This completely obliterated my system.

There is no grub menu on restart, because no bootable devices can be found.

If I go to the boot device menu I can see Fedora and Kali but windows 11 is gone.

I have a Kali live boot that I can boot in with.

Somebody PLEASE, don’t tell me I’ve lost it all and would have to completely restart.

PLEASE tell me there is someone here that has been there and done that.
I have had to rebuild grub before but this doesn’t seem to be a grub issue.

Any help will be appreciated.
A tutorial or anything.

I will post any cli info needed from the kali live boot.

We can’t help without more details. You may find it helpful to read Wikipedia EFI System Partition, in particular:

Apple maintains a separate tool that should be used on Intel/x86-64 Macs,[3] while other systems use FAT utilities just fine.

Please include the output from running inxi -Fzxx in a terminal (post as pre-formatted test using the </> button from the top line of the text entry panel). This may help in case there are other vendor/system-specific issues. It should also show us the type of drive and partitions that will help us formulate commands to show more details of the EFI partition. If you can arrange to boot a Fedora Live USB that will make it easier to suggest commands needed to diagnose and repair the issue.

If you describe in more detail what tools you used for each of the steps we may be able to determine what went wrong and how to repair the problem.

Hey George,

Thanks for your response.

kali@kali~ inxi -Fzxx           
System:
  Kernel: 6.6.15-amd64 arch: x86_64 bits: 64 compiler: gcc v: 13.2.0
  Desktop: Xfce v: 4.18.1 tk: Gtk v: 3.24.41 wm: xfwm4 dm: LightDM
    Distro: Kali GNU/Linux 2024.2 kali-rolling base: Debian testing
Machine:
  Type: Laptop System: Dell product: XPS 17 9710 v: N/A
    serial: <superuser required> Chassis: type: 10 serial: <superuser required>
  Mobo: Dell model: 012MMP v: A01 serial: <superuser required> part-nu: 0A5D
    UEFI: Dell v: 1.27.0 date: 04/18/2024
Battery:
  ID-1: BAT0 charge: 45.8 Wh (63.4%) condition: 72.2/95.1 Wh (75.9%)
    volts: 12.3 min: 11.4 model: BYD DELL F8CPG17 serial: <filter>
    status: charging
CPU:
  Info: 8-core model: 11th Gen Intel Core i9-11980HK bits: 64 type: MT MCP
    arch: Tiger Lake rev: 1 cache: L1: 640 KiB L2: 10 MiB L3: 24 MiB
  Speed (MHz): avg: 1192 min/max: 800/4900:5000 cores: 1: 1192 2: 1192
    3: 1192 4: 1192 5: 1192 6: 1192 7: 1192 8: 1192 9: 1192 10: 1192 11: 1192
    12: 1192 13: 1192 14: 1192 15: 1192 16: 1192 bogomips: 105676
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3
Graphics:
  Device-1: Intel TigerLake-H GT1 [UHD Graphics] vendor: Dell driver: i915
    v: kernel arch: Gen-12.1 ports: active: DP-6,DP-8,eDP-1 empty: DP-5,DP-7
    bus-ID: 00:02.0 chip-ID: 8086:9a60
  Device-2: NVIDIA GA106M [GeForce RTX 3060 Mobile / Max-Q] vendor: Dell
    driver: nouveau v: kernel arch: Ampere pcie: speed: 16 GT/s lanes: 8 ports:
    active: none empty: DP-1, DP-2, DP-3, DP-4 bus-ID: 01:00.0
    chip-ID: 10de:2520
  Device-3: Microdia Integrated_Webcam_HD driver: uvcvideo type: USB
    rev: 2.0 speed: 480 Mb/s lanes: 1 bus-ID: 3-11:5 chip-ID: 0c45:672e
  Display: x11 server: X.Org v: 21.1.11 compositor: xfwm4 v: 4.18.0 driver:
    X: loaded: modesetting unloaded: fbdev,vesa dri: iris gpu: i915
    display-ID: :0.0 screens: 1
  Screen-1: 0 s-res: 5760x1080 s-dpi: 96
  Monitor-1: DP-6 pos: right model: HP 22f res: 1920x1080 dpi: 102
    diag: 583mm (23")
  Monitor-2: DP-8 pos: left model: HP M24f FHD res: 1920x1080 dpi: 93
    diag: 604mm (23.8")
  Monitor-3: eDP-1 pos: primary,center model: Sharp 0x1517 res: 1920x1080
    dpi: 133 diag: 432mm (17")
  API: EGL v: 1.5 platforms: device: 0 drv: nouveau device: 1 drv: iris
    device: 2 drv: swrast gbm: drv: nouveau surfaceless: drv: nouveau x11:
    drv: iris inactive: wayland
  API: OpenGL v: 4.6 compat-v: 4.3 vendor: intel mesa v: 24.0.7-1 glx-v: 1.4
    direct-render: yes renderer: Mesa Intel UHD Graphics (TGL GT1)
    device-ID: 8086:9a60
Audio:
  Device-1: Intel Tiger Lake-H HD Audio vendor: Dell
    driver: sof-audio-pci-intel-tgl bus-ID: 00:1f.3 chip-ID: 8086:43c8
  Device-2: NVIDIA GA106 High Definition Audio vendor: Dell
    driver: snd_hda_intel v: kernel pcie: speed: 16 GT/s lanes: 8
    bus-ID: 01:00.1 chip-ID: 10de:228e
  API: ALSA v: k6.6.15-amd64 status: kernel-api
  Server-1: PipeWire v: 1.0.6 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active
  Server-2: PulseAudio v: 16.1 status: off (using pipewire-pulse)
Network:
  Device-1: Intel Tiger Lake PCH CNVi WiFi vendor: Rivet Networks
    driver: iwlwifi v: kernel bus-ID: 00:14.3 chip-ID: 8086:43f0
  IF: wlan0 state: up mac: <filter>
Bluetooth:
  Device-1: Intel AX201 Bluetooth driver: btusb v: 0.8 type: USB rev: 2.0
    speed: 12 Mb/s lanes: 1 bus-ID: 3-14:6 chip-ID: 8087:0026
  Report: hciconfig ID: hci0 rfk-id: 0 state: down bt-service: disabled
    rfk-block: hardware: no software: no address: <filter>
Drives:
  Local Storage: total: 1.88 TiB used: 310.23 GiB (16.1%)
  ID-1: /dev/nvme0n1 vendor: KIOXIA model: KXG70PNV2T04 NVMe 2048GB
    size: 1.86 TiB speed: 63.2 Gb/s lanes: 4 serial: <filter> temp: 40.9 C
  ID-2: /dev/sda vendor: Transcend model: JetFlash 16GB size: 14.6 GiB
    type: USB rev: 2.0 spd: 480 Mb/s lanes: 1 serial: <filter>
Partition:
  Message: No partition data found.
Swap:
  Alert: No swap data was found.
Sensors:
  System Temperatures: cpu: 70.0 C mobo: 42.0 C
  Fan Speeds (rpm): cpu: 1693
Info:
  Memory: total: 64 GiB note: est. available: 62.54 GiB used: 3.49 GiB (5.6%)
  Processes: 337 Power: uptime: 13m wakeups: 0 Init: systemd v: 255
    target: graphical (5) default: graphical
  Packages: pm: dpkg pkgs: 2823 Compilers: clang: 16.0.6 alt: 17 gcc: 13.2.0
    Shell: Zsh v: 5.9 running-in: qterminal inxi: 3.3.36
kali@kali~ sudo fdisk -l        
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: KXG70PNV2T04 NVMe KIOXIA 2048GB         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A2CEC1FC-9AA2-41BA-8048-191702D0D99F

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048     411647     409600   200M EFI System
/dev/nvme0n1p2     411648     444415      32768    16M Microsoft reserved
/dev/nvme0n1p3     444416  586174463  585730048 279.3G Microsoft basic data
/dev/nvme0n1p4 3999207424 4000794623    1587200   775M Windows recovery environment
/dev/nvme0n1p5  586176512 1562738687  976562176 465.7G Linux filesystem
/dev/nvme0n1p6 3997206528 3999207423    2000896   977M Linux swap
/dev/nvme0n1p7 1562738688 1564835839    2097152     1G Linux extended boot
/dev/nvme0n1p8 1564835840 3997206527 2432370688   1.1T Linux filesystem

Partition table entries are not in disk order.


Disk /dev/sda: 14.6 GiB, 15676211200 bytes, 30617600 sectors
Disk model: Transcend 16GB  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4e427070

Device     Boot   Start     End Sectors  Size Id Type
/dev/sda1  *         64 9005219 9005156  4.3G 17 Hidden HPFS/NTFS
/dev/sda2       9005220 9007267    2048    1M  1 FAT12


Disk /dev/loop0: 3.73 GiB, 4006359040 bytes, 7824920 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

As I mentioned windows is gone now.

kali@kali~ efibootmgr
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0000,0002,0004,0005,0001
Boot0000* UEFI JetFlash Mass Storage Device 03178BD4    PciRoot(0x0)/Pci(0x14,0x0)/USB(1,0)/USB(2,0)/USB(0,0)/HD(2,MBR,0x4e427070,0x8968a4,0x800)/File(\EFI\Boot\BootX64.efi){auto_created_boot_option}
Boot0001  UEFI HTTPs Boot       PciRoot(0x0)/Pci(0x1f,0x6)/MAC(000000000000,0)/IPv4(0.0.0.00.0.0.0,0,0)/Uri(){auto_created_boot_option}
Boot0002* UEFI JetFlash Mass Storage Device 03178BD4 2  PciRoot(0x0)/Pci(0x14,0x0)/USB(1,0)/USB(2,0)/USB(0,0)/CDROM(1,0x1fdc,0x2000)/File(\EFI\Boot\BootX64.efi){auto_created_boot_option}
Boot0004* Fedora        HD(1,GPT,75e93101-e060-4b9a-b97c-8564acd10794,0x800,0x32000)/File(\EFI\fedora\shimx64.efi)
Boot0005* kali  HD(1,GPT,75e93101-e060-4b9a-b97c-8564acd10794,0x800,0x32000)/File(\EFI\kali\grubx64.efi)

If you describe in more detail what tools you used for each of the steps we may be able to determine what went wrong and how to repair the problem

I mainly used gparted. The steps i listed above is exactly what I did.

  1. creating a backup of /boot/efi/Efi
  2. Use gparted to delete the efi partition
    
  3. Add more space
    
  4. Recreate the partition exactly as it was
    
  5. Retore the backup
    
  6. Restart
    

I am working on that live Fedora USB boot now.

Those instructions result in an efi partition with a new UUID as well as forcing the necessity to set the bios to use that new partition for booting.

A better plan would be to

  1. creating a backup of /boot/efi/Efi
  2. Use gparted to rearrange the partitions and enlarge it
  3. Restore the backup only if required
  4. Restart

Doing things this way avoids the issues caused by creating a completely new partition and making certain the bios is able to boot from that partition.

I would use the fedora live install media to do the recovery since fedora has the os prober software to identify other OSes and create the grub menu. Kali is not that robust in the grub configs.

Boot to the live media, mount the installed fedora system and chroot into it, then perform a grub recovery.

It will be a process that requires caution and understanding of the steps.
Details are required, and you will need to alter the /etc/fstab in fedora to enable mounting the new efi partition. You will also need to rerun the grub config steps to enable booting from that new partition.

To begin first boot into the live fedora install media then post the output of both sudo fdisk -l and lsblk -f so we have a starting point.

The Windows boot loader is just another EFI executable. If you still have it on your EFI filesystem, Windows ought to boot if you re-add the Windows bootloader using your BIOS configuration menu (or you could use efibootmgr, but that might be a little more complicated).

Edit: It looks like the Windows bootloader can be found at EFI\Microsoft\Boot\bootmgfw.efi. If you have a UEFI shell, another way to run the Windows bootloader is to enter its path at the UEFI shell prompt (e.g., something like FS0:\EFI\Microsoft\Boot\bootmgfw.efi).

Thanks for the response…

I’ve got the Fedora Live running now.

Doing things this way avoids the issues caused by creating a completely new partition and making certain the bios is able to boot from that partition.

  • This here is the important step I missed unfortunately.
liveuser@localhost-live:~$ sudo fdisk -l
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: KXG70PNV2T04 NVMe KIOXIA 2048GB         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A2CEC1FC-9AA2-41BA-8048-191702D0D99F

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048     411647     409600   200M EFI System
/dev/nvme0n1p2     411648     444415      32768    16M Microsoft reserved
/dev/nvme0n1p3     444416  586174463  585730048 279.3G Microsoft basic data
/dev/nvme0n1p4 3999207424 4000794623    1587200   775M Windows recovery environment
/dev/nvme0n1p5  586176512 1562738687  976562176 465.7G Linux filesystem
/dev/nvme0n1p6 3997206528 3999207423    2000896   977M Linux swap
/dev/nvme0n1p7 1562738688 1564835839    2097152     1G Linux extended boot
/dev/nvme0n1p8 1564835840 3997206527 2432370688   1.1T Linux filesystem

Partition table entries are not in disk order.
GPT PMBR size mismatch (4484087 != 7821311) will be corrected by write.
The backup GPT table is not on the end of the device.


Disk /dev/sda: 3.73 GiB, 4004511744 bytes, 7821312 sectors
Disk model: Cruzer Blade    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BD0CE27D-A6E0-4C37-BEEC-AB4B6F9B6A73

Device       Start     End Sectors  Size Type
/dev/sda1       64 4457875 4457812  2.1G Microsoft basic data
/dev/sda2  4457876 4483423   25548 12.5M EFI System
/dev/sda3  4483424 4484023     600  300K Microsoft basic data


Disk /dev/loop0: 1.97 GiB, 2110570496 bytes, 4122208 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop1: 8 GiB, 8592031744 bytes, 16781312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop2: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/live-rw: 8 GiB, 8592031744 bytes, 16781312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/live-base: 8 GiB, 8592031744 bytes, 16781312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/zram0: 8 GiB, 8589934592 bytes, 2097152 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
lsblk -f
NAME        FSTYPE          FSVER            LABEL                  UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0       squashfs        4.0                                                                                         
loop1       ext4            1.0              Anaconda               57b2da08-9667-4695-9f1f-13d099a97592                
├─live-rw   ext4            1.0              Anaconda               57b2da08-9667-4695-9f1f-13d099a97592    1.7G    78% /
└─live-base ext4            1.0              Anaconda               57b2da08-9667-4695-9f1f-13d099a97592                
loop2       DM_snapshot_cow                                                                                             
└─live-rw   ext4            1.0              Anaconda               57b2da08-9667-4695-9f1f-13d099a97592    1.7G    78% /
sda         iso9660         Joliet Extension Fedora-WS-Live-40-1-14 2024-04-14-23-09-56-00                              
├─sda1      iso9660         Joliet Extension Fedora-WS-Live-40-1-14 2024-04-14-23-09-56-00                     0   100% /run/initramfs/live
├─sda2      vfat            FAT16            ANACONDA               23EA-7494                                           
└─sda3                                                                                                                  
zram0                                                                                                                   [SWAP]
nvme0n1                                                                                                                 
├─nvme0n1p1 vfat            FAT32                                   BF90-7EFC                                           
├─nvme0n1p2                                                                                                             
├─nvme0n1p3 ntfs                             Windows 11             DEE23F4EE23F29E3                                    
├─nvme0n1p4 ntfs                                                    5A94DAB294DA8FBD                                    
├─nvme0n1p5 ext4            1.0              Kali                   87e331dc-b6ae-4e0d-baec-2c0ed0266e06                
├─nvme0n1p6 swap            1                                       95d90363-a33a-458f-b9a5-2d0ccaed40e9                
├─nvme0n1p7 ext4            1.0                                     0a7ee8d5-ec9a-4e78-a80a-6f01f4a285d8                
└─nvme0n1p8 btrfs                            fedora                 c2f7d1b6-8d46-401a-b3ae-1b1c4ec00d8c

Thanks for the response…

I believe all the files are still there from the back up I did.
The step I missed was just ensuring it was bootable. I foot just adding a boot flag would have been it.

I will look into the UEFI Shell to see what’s possible and let you know.

Backups of GPT partitions should include preserving key metadata including the UUID, but as Jeff V mentioned, a better recipe does not require deleting the existing EFI partition.
A better step 1 is backup of the full disk so you can restore it if things go bad.

Or use the situation as an opportunity to upgrade your HDD/SDD. Then, instead of trusting that your backup is good, you can leave your original disk untouched.

It would appear that the partitions of interest are

nvme0n1p1 as /boot/efi
nvme0n1p7 as /boot
nvmeon1p8 as / (root subvolume)
             /home (home subvolume) 

Note the UUIDs for each then the repairs may be begun. Use the UUIDs noted even though I put the ones you posted above into the instructions following.

Note that if any step following fails you must stop and solve the problem before attempting to continue. (everything following must be done as root so step 1 simplifies things)

  1. su
  2. mount -t btrfs -o subvol=root,compress=zstd:1 UUID=c2f7d1b6-8d46-401a-b3ae-1b1c4ec00d8c /mnt
  3. for FILE in sys proc dev run sys/firmware/efi/efivars ; do mount -o bind /$FILE /mnt/$FILE ; done
  4. mount UUID=0a7ee8d5-ec9a-4e78-a80a-6f01f4a285d8 /mnt/boot
  5. chroot /mnt
  6. nano /etc/fstab
    Now you need to replace the UUID in the line that mounts /boot/efi with the one that is now present for nvme0n1p1 (BF90-7EFC). Once that is done then save the changes and exit.
  7. Following that edit in #6 then run mount -a which should mount both /boot/efi and /home. Check it has done so with mount
  8. Now it is time to repair grub. grub2-mkconfig -o /boot/grub2/grub.cfg should manage that for you. It may or may not recover booting windows.
    You may want to see the grub menu during boot until a full recovery is completed. That is managed with grub2-editenv - unset menu_auto_hide. Hiding the grub menu can be restored with grub2-editenv - set "menu_auto_hide=1"
  9. Now it is time to exit the chroot environment
  10. reboot to test the repair and look at the grub menu to see whether everything has been recovered. A windows recovery is a different procedure if it will not boot even if seen in the grub menu.
1 Like

Thanks much for this help…

Not sure how to get passed this. I’m googling, any ideas?

liveuser@localhost-live:~$ su
root@localhost-live:/home/liveuser# cd /
root@localhost-live:/# mount -t btrfs -o subvol=root,compress=zstd:1
mount: bad usage
Try 'mount --help' for more information.
root@localhost-live:/# mount -t btrfs -o subvol=root,compress=zstd:1 UUID=c2f7d1b6-8d46-401a-b3ae-1b1c4ec00d8c /mnt
root@localhost-live:/# for FILE in sys proc dev run sys/firmware/efi/efivars ; do mount -o bind /$FILE /mnt/$FILE ; done
root@localhost-live:/# mount UUID=0a7ee8d5-ec9a-4e78-a80a-6f01f4a285d8 /mnt/boot
root@localhost-live:/# chroot /mnt
root@localhost-live:/# vim /etc/fstab 
root@localhost-live:/# mount -a
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
root@localhost-live:/# systemctl daemon-reload 
Running in chroot, ignoring command 'daemon-reload'

Check what has been mounted with the mount command which is part of that step.
If it fails to mount /boot/efi then manually do it with mount UUID=BF90-7EFC /boot/efi
If it has already been mounted then continue. /home is not required but the ‘mount -a’ command would automatically mount it.

The is the results mount.

root@localhost-live:/# mount
/dev/nvme0n1p8 on / type btrfs (rw,relatime,seclabel,compress=zstd:1,ssd,discard=async,space_cache=v2,subvolid=256,subvol=/root)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=8177215,mode=755,inode64)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,size=13112624k,nr_inodes=819200,mode=755,inode64)
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
/dev/nvme0n1p7 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
/dev/nvme0n1p8 on /home type btrfs (rw,relatime,seclabel,compress=zstd:1,ssd,discard=async,space_cache=v2,subvolid=257,subvol=/home)

That shows success

Well for now we know that windows wasn’t recovered.

root@localhost-live:/# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found Kali GNU/Linux Rolling on /dev/nvme0n1p5
Adding boot menu entry for UEFI Firmware Settings ...
don

No Joy, unfortunately.

I still get no boot devices found on startup.

Now you need to enter the bios setup menu and configure the devices it chooses to boot from.

Went in the boot devices, I choose Fedora then Kali.

It just goes back to no devices to boot from.

Double check for typos. It is easy to make mistakes entering UUID’s. You can compare UUID’s in efibootmgr with /etc/fstab.

No typos I could find.

root@localhost-live:/# efibootmgr 
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0000,0004,0005,0001
Boot0000* UEFI SanDisk Cruzer Blade 4C532000070422110241	PciRoot(0x0)/Pci(0x14,0x0)/USB(1,0)/USB(2,0)/USB(0,0)/HD(2,GPT,bd0ce27d-a6e0-4c37-beee-ab4b6f9b6a73,0x440594,0x63cc)/\EFI\Boot\BootX64.efi{auto_created_boot_option}
Boot0001  UEFI HTTPs Boot	PciRoot(0x0)/Pci(0x1f,0x6)/MAC(000000000000,0)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)/Uri(){auto_created_boot_option}
Boot0004* Fedora	HD(1,GPT,75e93101-e060-4b9a-b97c-8564acd10794,0x800,0x32000)/\EFI\fedora\shimx64.efi
Boot0005* kali	HD(1,GPT,75e93101-e060-4b9a-b97c-8564acd10794,0x800,0x32000)/\EFI\kali\grubx64.efi
root@localhost-live:/# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Jun 20 17:33:48 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=c2f7d1b6-8d46-401a-b3ae-1b1c4ec00d8c /                       btrfs   subvol=root,compress=zstd:1 0 0
UUID=0a7ee8d5-ec9a-4e78-a80a-6f01f4a285d8 /boot                   ext4    defaults        1 2
UUID=BF90-7EFC          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
UUID=c2f7d1b6-8d46-401a-b3ae-1b1c4ec00d8c /home                   btrfs   subvol=home,compress=zstd:1 0 0