我已经使用 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 可以通过一个签名的可复制二进制构建来满足其对安全启动兼容的引导加载程序的所有需求。
在我看来,对于永久安装的操作系统,它应该像这样工作:
- 内置默认值
$prefix
是/EFI/debian
,它是 ESP 上应该存在的目录。 - 嵌入式配置告诉 GRUB 首先遵循基于内存磁盘的配置。 GRUB 的默认根文件系统是 ESP。
- 由于
$prefix
已设置且目录存在于 ESP 上,因此第一个if
...then
条件将不成立,并且search
应跳过命令。 /EFI/debian/x86_64-efi/grub.cfg
ESP 上不存在(它将存在于 Debian 安装介质上),因此第二个if
...then
条件也不会成立。/EFI/debian/grub.cfg
ESP 上应该有一个(/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 的目录中(当从启动的操作系统访问它时)?或者您的固件可能区分大小写解释路径名,而目录名的实际字符大小写不同?then
grubx64.efi
/EFI/debian
/boot/efi/EFI/debian/
无论如何,它最终会搜索/.disk/info
和/.disk/mini-info
应该仅存在于安装介质上,而那些失败的搜索会导致您看到错误消息。
由于 GRUB 以其他方式工作,因此这些消息很可能是无害的,并且只是一个轻微的外观干扰。但如果您希望摆脱它们,您应该efibootmgr -v
检查 UEFI 引导变量中的引导路径以及 GRUB 在通往真实 GRUB 配置文件的过程中引用的所有路径名(如上所述),并更正任何差异,如下所示你找到他们。
答案2
显然,这个问题是由于将发行版名称更改为“半成品”工作的结果德班到克德比安通过手动编辑几个系统文件。而且,由于上面接受的答案,我可以通过创建一个名为debian
under的子目录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