0

I dual boot Windows 11 and Debian 12 using two separate m.2 SSDs:

  1. Samsung 980 Pro: Debian 12
  2. CT10000P3SSD8 (Crucial): Windows 11

I have NO other physical or partitions.

If I need to switch between the two OS, I simply hit F12 at start up and select the OS. See picture below:

enter image description here

My question is why do I see so many options? I would like to see only two options listed, Debian Samsung SSD 980 Pro and CT10000P3SSD8. How can I do that?

Update after running these two commands: lsblk -o +PARTUUID and sudo efibootmgr -v:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS PARTUUID
nvme0n1     259:0    0 465.8G  0 disk             
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi   c87cc3b1-6e6b-4345-af08-8340743d0670
├─nvme0n1p2 259:2    0 464.3G  0 part /           c77cf17f-b626-4c68-af3a-c96c1e90c025
└─nvme0n1p3 259:3    0   976M  0 part [SWAP]      b7e19d19-aab0-40a2-989c-38215499d658
nvme1n1     259:4    0 931.5G  0 disk             
├─nvme1n1p1 259:5    0   100M  0 part             daec26ee-01
├─nvme1n1p2 259:6    0 930.8G  0 part             daec26ee-02
└─nvme1n1p3 259:7    0   674M  0 part             daec26ee-03

username on debian ~ took 12ms ❯ efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 000A,0007,0009,0000,0006
Boot0000* debian        HD(1,GPT,c87cc3b1-6e6b-4345-af08-8340743d0670,0x800,0x100000)/File(\EFI\DEBIAN\SHIMX64.EFI)
Boot0006  Windows Boot Manager  HD(1,GPT,c87cc3b1-6e6b-4345-af08-8340743d0670,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.}....................
Boot0007* debian        HD(1,GPT,c87cc3b1-6e6b-4345-af08-8340743d0670,0x800,0x100000)/File(\EFI\DEBIAN\GRUBX64.EFI)..BO
Boot0009* Samsung SSD 980 PRO 500GB     BBS(HD,,0x0)..BO
Boot000A* CT1000P3SSD8  BBS(HD,,0x0)..BO
2
  • 1
    Please boot into Debian, run two commands: lsblk -o +PARTUUID and sudo efibootmgr -v, and then copy & paste the outputs of both commands into your question post.The outputs will provide important information that is not provided by your boot menu picture.
    – telcoM
    Nov 30, 2023 at 19:08
  • @telcoM added, thanks! Nov 30, 2023 at 21:52

3 Answers 3

1

A bit of background

Since you see named boot entries like Windows Boot Manager and debian, you clearly have a system with UEFI firmware, booting the named OSs in UEFI native mode. Since one of the named boot entries refers to Windows, it also suggests that your disk uses GPT partitioning style, as Microsoft has tied the choice of partitioning style and firmware type together by design: Windows only supports the combinations of legacy BIOS + MBR, or UEFI + GPT: unlike with Linux, you cannot mix the two sets.

Most UEFI systems still have the capability to run a BIOS Compatibility Support Module (CSM), although it may have been disabled by default as per Microsoft Windows 8.1 certification requirements.

In BIOS compatibility mode, you basically just select the disk you want to boot from, with no labels possible other than the disk vendor/model name. The code in the Master Boot Record (MBR) of the disk will then dictate what happens next: a classic Windows MBR will look for a primary partition with a boot flag enabled. The BIOS version of GRUB will just ignore the partition boot flags and follow its configuration.

In UEFI mode, to fully identify a boot target, you ideally should be specifying both a partition and a boot filename on that partition. The UEFI firmware has a built-in capability to read files from partitions formatted with FAT-type filesystems (usually not including exFAT). In GPT partitioning, there is a designated partition type called "EFI System Partition" or ESP for short, which is expected to contain the bootloaders of any and all operating systems installed on the disk that contains the ESP.

It is possible to have multiple ESPs on the same disk, but I would not recommend that, because firmware-level boot selection user interfaces won't always support that. Since your system's boot menu does not indicate partition numbers, I suspect it might have some trouble presenting multiple ESPs per disk - or at the very least, you would have even more trouble telling the boot entries apart.

In UEFI boot style, an installed OS is expected to define a UEFI NVRAM boot variable: this creates a named boot entry, which will then point to a specific boot file on a specific ESP partition.

If there are no boot variables defined for some UEFI-bootable media, the UEFI firmware can look for a removable media/fallback boot file: in 64-bit x86 hardware, it will be <ESP mountpoint>/EFI/BOOT/BOOTx64.efi, although the FAT filesystem type is supposed to be case insensitive.


Your system

The bottom two boot entries (other than Enter Setup) might actually mean either "try booting the removable media/fallback boot file on the first ESP on this disk in UEFI mode", or "try booting from this disk in legacy BIOS mode". Unfortunately the boot menu interface offers no clues which of the two it might be.

The Linux efibootmgr -v output indicates the UEFI device path associated with them is BBS(HD,,0x0)..BO, where BBS refers to BIOS Boot Specification, which pre-dates UEFI, so these two entries would seem to be for booting in legacy BIOS mode.

The two entries for debian are revealed by efibootmgr -v to be "Debian with Secure Boot support enabled" (Boot0000, specifying \EFI\DEBIAN\SHIMX64.EFI as the boot file), and "Debian without Secure Boot support" (Boot0007, skipping the shim and going straight to \EFI\DEBIAN\GRUBX64.EFI).

Based on the shortness of the PARTUUID string on your second disk, your Windows disk appears to be MBR-partitioned, which with Windows means booting in BIOS style. That suggests the "Windows Boot Manager" entry in the boot menu is probably a non-functional remnant of an earlier installation: if (and only if) that is true, you can remove it in Linux by noting that it is in boot variable Boot0006 and then using efibootmgr to remove it:

sudo efibootmgr -b 0006 -B

The BootCurrent: 0000 indicates that you have successfully started Debian using the Secure Boot-compatible method (the Boot0000 line). I would urge you to keep using that for future-proofing your system. You can delete the non-Secure Boot entry for Debian (Boot0007) with:

sudo efibootmgr -b 0007 -B

Unfortunately, as long as your Windows disk is still MBR-partitioned and so your Windows must boot in legacy BIOS style, removing the two boot entries mentioned above is probably the best you can get. Since the firmware cannot know all the possible bootable and non-bootable MBR boot code contents, it may not be able to identify for certain whether or not the MBR of the Samsung disk is actually bootable in BIOS style or not, so it will show the menu entry for it anyway to err on the safe side.

Disabling the legacy BIOS compatibility mode would remove the bottom two boot options, but as long as your Windows is on a MBR-partitioned disk, you won't be able to do that (unless Windows 11 has silently added support for the UEFI + MBR-partitioned disk combination).

To ensure that your Debian will be easily bootable even if your firmware settings are totally lost (as might happen with BIOS updates, depending on system vendor), you might want to install a second copy of Debian's bootloader in the removable media path:

sudo grub-install --uefi-secure-boot --force-extra-removable /dev/nvme0n1

This might either add some sort of "UEFI" note to the "Samsung SSD" boot entry, or perhaps add another menu entry altogether: without trying it is impossible to know for sure, as firmware implementations vary.

0
0

what you see is a function of UEFI and your motherboard. I see something similar with My ASROCK at home and my Dell optiplex at work.

First go into your BIOS/EFI by hitting F2 or DEL or whatever, go to the boot tab and for each of those menu entries look into them and see what disk they are referring to. Record that information for reference; you will see duplicates. Then erase all those menu entries and re-add them from scratch choosing the boot file from each disk then naming it accordingly... win11, debian and so on.

If you only have 2 ssd's connected, then you would expect to only see 2 menu entries in your pic above, and you can make that happen as I just described. If you have extra disks connected they sometimes show up as well, or entries get left over in that EFI boot menu as disks come and go.

And if you run into weirdness trying to clean things up, look for if there's a BIOS update for your motherboard.

0

On my system (details irrelevant to this issue) what the BIOS/UEFI calls "boot devices" are actually bootloaders not physical devices or partitions. From the efibootmgr -v it seems like you have 2 different bootloaders installed (grub and shim). For context dual booting works by having a master bootloader (in your case that probably is grub) that is used to execute other bootloaders for different systems like the Windows bootloader.

This would explain why there are 2 debian entries listed in the menu. I am unsure if shim is actually the default bootloader of Debian 12 (which would explain why grub needs to chainload shim) but I imagine it shouldn't be too hard to switch it to use grub instead. From there you can run os-prober to find the windows bootloader and add the boot entry to the grub menu.

I am quite sure that is probably the way to fix this. Additionally, do both boot entries work? If not there might not be chainloading but if one is broken we can probably delete it anyway. If you have any questions I will be happy to (try) and answer them :D

This site is temporarily in read-only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .