Grub 错误“没有这样的设备:/.disk/info”是什么意思,以及如何修复它?

Grub 错误“没有这样的设备:/.disk/info”是什么意思,以及如何修复它?

我已经使用 KDE Plasma DE 安装了 Debian 测试,我认为这是在一段时间之后发生的,当时我遇到了 Grub 问题,我使用实时 USB、chroot 和重新安装 grub 修复了该问题。

除了黑屏上紧接着 grub 菜单之前出现的两条错误消息外,没有任何启动问题:

error: no such device: /.disk/info
error: no such device: /.disk/mini-info

我想知道这是否表明存在应该解决的问题以及如何解决它。

答案1

在 Debian 12(显然是更新版本)中,当安装在启用安全启动的 UEFI 系统上时,/boot/grub/grubx64.efi包括内存盘映像(大小约2.4M)包含一个Unicode字体和一个迷你grub.cfg文件,内容如下:

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

它还包括一个嵌入配置文件简单地说:

normal (memdisk)/grub.cfg

的内置默认值$prefix设置为/EFI/debian

因此,当grubx64.efi开始执行时,它将首先使用memdisk映像中的配置文件。

首先,该配置文件检查是否$prefix未定义或 ESP 分区上没有匹配的文件或目录。如果是这样,它将把 GRUB 的初始值设置$root为包含 或/.disk/info的任何分区/文件系统/.disk/mini-info,并设置$prefix为指向/boot/grub该文件系统。

我猜想这些文件将存在于 Debian 安装介质上,这就是 Debian 可以通过一个签名的可复制二进制构建来满足其对安全启动兼容的引导加载程序的所有需求。

在我看来,对于永久安装的操作系统,它应该像这样工作:

  1. 内置默认值$prefix/EFI/debian,它是 ESP 上应该存在的目录。
  2. 嵌入式配置告诉 GRUB 首先遵循基于内存磁盘的配置。 GRUB 的默认根文件系统是 ESP。
  3. 由于$prefix已设置且目录存在于 ESP 上,因此第一个if...then条件将不成立,并且search应跳过命令。
  4. /EFI/debian/x86_64-efi/grub.cfgESP 上不存在(它将存在于 Debian 安装介质上),因此第二个if...then条件也不会成立。
  5. /EFI/debian/grub.cfgESP 上应该有一个(/boot/efi/EFI/debian/grub.cfg当操作系统正常运行时)告诉真正的 GRUB 配置位于何处。因此elif条件为真,GRUB 将读取该文件。如果您有专用/boot分区,它可能包含如下内容:
search.fs_uuid 12345678-90ab-cdef-0123-456789abcdef root 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

这将/boot通过 UUID 选择您的文件系统作为 GRUB 的根文件系统(= GRUB 访问的所有后续路径所引用的文件系统),然后使用它来读取/boot/grub/grub.cfg.

如果您/boot位于不同的位置,例如在加密卷上,或者只是根文件系统上的常规目录,那么您的内容/boot/efi/EFI/debian/grub.cfg将有所不同,以适合您的情况。

在您的情况下, memdisk 配置中的第一个if...条件出现问题:也许您的活动不在 ESP 的目录中(当从启动的操作系统访问它时)?或者您的固件可能区分大小写解释路径名,而目录名的实际字符大小写不同?thengrubx64.efi/EFI/debian/boot/efi/EFI/debian/

无论如何,它最终会搜索/.disk/info/.disk/mini-info应该仅存在于安装介质上,而那些失败的搜索会导致您看到错误消息。

由于 GRUB 以其他方式工作,因此这些消息很可能是无害的,并且只是一个轻微的外观干扰。但如果您希望摆脱它们,您应该efibootmgr -v检查 UEFI 引导变量中的引导路径以及 GRUB 在通往真实 GRUB 配置文件的过程中引用的所有路径名(如上所述),并更正任何差异,如下所示你找到他们。

答案2

显然,这个问题是由于将发行版名称更改为“半成品”工作的结果德班克德比安通过手动编辑几个系统文件。而且,由于上面接受的答案,我可以通过创建一个名为debianunder的子目录EFI(除了kdebian子目录之外)来修复它,其中包含grub.cfg仅包含以下内容的文件:

search.fs_uuid 6d4c4d33-240f-4577-9282-c3862db81a30 root hd0,gpt3 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

(数值可能会根据每个系统6d4c4d33-240f-4577-9282-c3862db81a30而变化)hd0,gpt3

相关内容