我有一个双启动系统,AVLinux(基于 Debian 的发行版)和 Windows 11 安装在两个单独的分区中,我的 PC 使用 EFI。我的系统运行良好,直到昨天,当我启动 PC 时,Grub 的黑屏显示未知文件系统。错误消息和grub rescue>控制台以输入命令。
根据这个问题的第一个答案,我设法从 Grub 的救援控制台启动 Grub 的菜单,使用ls
这个控制台找到安装了 grub 的 Linux 分区,然后发出命令手动启动Grub 文件夹中的正常(hd0,gpt4)
内核模块。假设这是我的 Linux 分区(安装了 Grub),我发出了:
set prefix=(hd0,gpt4)/boot/grub
insmod normal
normal
获取 Grub 菜单并成功启动两个操作系统
不幸的是我必须在每次启动时发出相同的命令因为我无法摆脱那个屏幕......
我已经遵循了几乎所有的建议(比如我之前链接的建议),建议使用
sudo grub-install /dev/sda
sudo update-grub
命令(其中/dev/sda
指的是您要重新安装 Grub 的驱动器,对我来说应该是/dev/nvme0n1
)但没有任何变化。
当然,我也尝试遵循类似这样的建议,建议从 Linux 的实时版本(对我来说是 Kali Linux)重新安装 Grub,方法是挂载我的 Linux 分区(再次,安装了 Grub 的分区/boot/grub
)、我的 EFI 分区、efivars 分区,然后使用 chroot 发出 grub-install:
sudo mount /dev/sdXY /mnt
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
mount -t efivarfs none /sys/firmware/efi/efivars
grub-install /dev/sdX
update-grub
exit
其中:sdX
= 磁盘 | sdXX
= efi 分区 | sdXY
= 系统分区(安装了 Grub 的分区)
但什么也没有改变。
我还尝试过efibootmgr
改变 bootorder 的顺序并禁用一些 bootnums,但没有结果。
我甚至尝试使用启动修复程序,并读取它解决了许多问题,但是 - 再次 - 没有任何效果......
似乎在启动的最初阶段,Grub 试图从错误的位置启动其菜单,因此我必须手动设置位置/boot/grub
才能获取菜单屏幕。不幸的是,我不知道如何检查这一点,如果可以,如何配置 Grub 以在正确的位置查找...
顺便说一句,我不确定,但我认为问题是在 Windows 更新后出现的。
/dev/nvme0n1p3
我的 Windows 分区在哪里,/dev/nvme0n1p4
Linux 的分区在哪里
这里是通过发出efibootmgr设置后获得的输出efibootmgr -v
:
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0002,0001,0006,0003,0007,0008,0009,000A
Boot0000* Windows Boot Manager HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\MX21\grubx64.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.}....................
Boot0001* ubuntu HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* MX21 HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\MX21\grubx64.efi)
Boot0003* debian HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\debian\grubx64.efi)
Boot0006* mx HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\mx\grubx64.efi)
Boot0007* Windows Boot Manager HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)..BO
Boot0008* UEFI:CD/DVD Drive BBS(129,,0x0)
Boot0009* UEFI:Removable Device BBS(130,,0x0)
Boot000A* UEFI:Network Device BBS(131,,0x0)
有人对此有线索吗?我不知道该尝试什么了……
好的,我解决了。
问题出在 UEFI 固件运行了我的 EFI 分区中的一个错误启动项;更具体地说,它是您可以在 efibootmgr 输出中看到的Boot0000 。
就我而言,我无法使用 efibootmgr 重新安排启动顺序,但我能够通过更改UEFI 固件中设置的BBS 启动优先级来做到这一点。更确切地说,步骤如下:
最后一次重新启动后,它就运行得很好了。
希望这能帮助别人
问题几乎肯定是由于 EFI 分区太小(100MB)造成的。当 Windows 更新时(如果这是原因),它可能扰乱了安装以腾出空间。我应该说我无法解释您看到的每一个症状,但我可以说 100MB 勉强够启动一个操作系统,更不用说两个了。
大多数 BIOS 支持多个 EFI 分区,创建另一个(大小最好为 1GB)可能是最好的解决方法,无需进行大规模磁盘重组。我会启动您的实时安装程序,并使用 gparted 将 p4 的大小减少 1G,在释放的空间中创建一个 fat32 文件系统,并将启动标志设置为 p1。然后使用新的 EFI 分区进行手动启动修复以重新安装 grub。现在您将有两个用于 Kali 的 BIOS 启动菜单条目,您可能需要反复试验才能找到正确的条目。要解决这个问题...
您的 BIOS 启动菜单中有一堆垃圾。我会访问 p1,查看 EFI 目录,然后删除非 Windows 条目;如果仅此方法无法解决问题,则使用 efibootmgr(但如果您不清除残留的引导加载程序,它们可能会不断弹出)。EFI 目录之外可能还有其他文件,但只有当您确定自己在做什么时才可以删除它们(尽管 Windows 启动修复可能会在需要时修复您犯的任何错误)。当然,请确保不要删除您的新 BIOS 启动菜单,但如果您这样做,它很可能会重新被发现。