In Debian 12 (and newer, apparently), when installed on a Secure Boot-enabled UEFI system, the /boot/grub/grubx64.efi includes a memdisk image (approximately 2.4M in size) which contains an Unicode font and a mini grub.cfg file, with the following contents:
if [ -z "$prefix" -o ! -e "$prefix" ]; then if ! search --file --set=root /.disk/info; then search --file --set=root /.disk/mini-info set prefix=($root)/boot/grub if [ -e $prefix/x86_64-efi/grub.cfg ]; then source $prefix/x86_64-efi/grub.cfg elif [ -e $prefix/grub.cfg ]; then source $prefix/grub.cfg else source $cmdpath/grub.cfg
It also includes an embedded configuration file which says simply:
normal (memdisk)/grub.cfg
The built-in default value for $prefix is set to /EFI/debian.
So, when grubx64.efi begins executing, it will first use the configuration file within the memdisk image.
First, that configuration file checks if $prefix is undefined or there is no matching file or directory on the ESP partition. If so, it will set GRUB's initial $root to whatever partition/filesystem that contains either /.disk/info or /.disk/mini-info, and sets $prefix to point to /boot/grub on that filesystem.
I guess these files would exist on Debian installation media, and this is how Debian can have just one signed reproducible binary build cover all their needs for Secure Boot-compliant bootloader.
It seems to me that with a permanently installed OS, it should work like this:
- The built-in default
$prefix is /EFI/debian, which is a directory which should exist on the ESP. - The embedded configuration tells GRUB to follow the memdisk-based configuration first. The default root filesystem for GRUB will be the ESP.
- Since
$prefix is set and the directory exists on the ESP, the first if ... then condition will not be true, and the search commands should be skipped. /EFI/debian/x86_64-efi/grub.cfg does not exist on the ESP (it would exist on the Debian installation media), so the second if ... then condition will not be true either. - There should be a
/EFI/debian/grub.cfg on the ESP (/boot/efi/EFI/debian/grub.cfg when the OS is running normally) telling where the real GRUB configuration is located. So the elif condition will be true and GRUB will read the file. If you have a dedicated /boot partition, it could contain something like this:
search.fs_uuid 12345678-90ab-cdef-0123-456789abcdef root set prefix=($root)'/grub' configfile $prefix/grub.cfg
This would select your /boot filesystem by UUID for GRUB's root filesystem (= the filesystem all subsequent paths accessed by GRUB refer to), and then use it to read the actual GRUB configuration in /boot/grub/grub.cfg.
If your /boot is in a different location, like on an encrypted volume, or just a regular directory on your root filesystem, then the contents of your /boot/efi/EFI/debian/grub.cfg would be different to suit your circumstances.
In your case, something goes wrong in the first if ... then condition within the memdisk configuration: maybe your active grubx64.efi is not located in the ESP's /EFI/debian directory (/boot/efi/EFI/debian/ when accessing it from a booted-up OS)? Or maybe your firmware interprets pathnames case-sensitively and the actual character case of the directory names is different?
Anyway, it ends up searching for /.disk/info and /.disk/mini-info which should exist on installation media only, and those failing searches cause the error messages you're seeing.
Since GRUB is working otherwise, the messages could most likely be harmless and only a minor cosmetic annoyance. But if you wish to get rid of them, you should use efibootmgr -v to review the boot paths in the UEFI boot variables and all the pathnames referenced by GRUB on the way to your real GRUB configuration file (as explained above), and correct any discrepancies as you find them.