重启后 GRUB 在命令行中启动

Ant*_*bry 71 dual-boot boot-loader grub2 uefi

我在我的笔记本电脑上安装了 Linux Mint 以及预装的 Windows 10。 当我打开电脑时,大部分时间都会出现正常的 GRUB 菜单:

GRUB 菜单

但是在启动 Linux 或 Windows 然后重新启动后,我 GRUB 以命令行模式启动,如下面的屏幕截图所示:

GRUB 命令行

可能我可以键入一个命令以从该提示符启动,但我不知道。有效的是使用 Ctrl+Alt+Del 重新启动,然后反复按 F12 直到出现正常的 GRUB 菜单。使用这种技术,它总是加载菜单。不按 F12 重新启动总是在命令行模式下重新启动。

我认为 BIOS 启用了 EFI,并且我在 /dev/sda 中安装了 GRUB 引导加载程序。

为什么会发生这种情况,我如何确保 GRUB 始终加载菜单?

编辑

正如评论中所建议的,我尝试清除grub-efi软件包并重新安装它。这并没有解决问题,但现在当它在命令提示符模式下启动时,GRUB 显示以下消息:

error: no such device: 6fxxxxx-xxxx-xxxx-xxxx-xxxxxee.
Entering rescue mode...
grub rescue>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我检查了blkid命令,这是我的 linux 分区的标识符。也许这些额外的信息可以帮助弄清楚发生了什么?

eli*_*eli 86

引导过程找不到根分区(磁盘的一部分,包含启动系统的信息),因此您必须自己指定其位置。

我认为你必须看看这篇文章:how-rescue-non-booting-grub-2-linux

简短的摘要:

grub rescue>命令行输入

ls
Run Code Online (Sandbox Code Playgroud)

...列出所有可用设备。
然后你必须通过每一个,输入类似的东西(取决于 ls 命令显示的内容):

ls (hd0,1)/
ls (hd0,2)/ 
Run Code Online (Sandbox Code Playgroud)

...依此类推,直到您发现:

(hd0,1)/boot/grub   OR (hd0,1)/grub
Run Code Online (Sandbox Code Playgroud)

...或者,在“UEFI”的情况下,它看起来像:

(hd0,1)/efi/boot/grub OR (hd0,1)/efi/grub
Run Code Online (Sandbox Code Playgroud)

现在您必须相应地设置引导参数 - 只需键入以下内容(使用适合您的情况的正确数字)并在每行后按回车:

set prefix=(hd0,1)/grub
Run Code Online (Sandbox Code Playgroud)

... 或(如果grub在子目录中):

set prefix=(hd0,1)/boot/grub
Run Code Online (Sandbox Code Playgroud)

然后继续

set root=(hd0,1)
insmod linux
insmod normal
normal
Run Code Online (Sandbox Code Playgroud)

现在它应该启动了。

现在转到命令行(例如启动“终端”),然后执行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

...这应该更正丢失的信息,它应该会在下次启动。

如果不是 - 您必须再次执行这些步骤,可能需要再次修复或安装 grub:
请查看本文中的“引导修复”工具:https ://help.ubuntu.com/community/Boot-修复(我对它有积极的体验,当之前的步骤在重启后无法生存时)

  • 我会尝试这个,但是这个答案并没有解释为什么有时 grub 能够找到分区,但是如果我在加载之前按 F12,它就能够找到分区。 (4认同)
  • 具有讽刺意味的是,引导修复是将其置于这种状态的开始...... (2认同)
  • 这对我有用,除了更改不是持久的。一旦我重新启动系统,我就会再次获得引导加载程序 CLI。 (2认同)
  • 我发现在执行“sudo update-grub”之前,我需要执行“sudo grub-mkconfig”,否则“update-grub”正在安装一个不起作用的配置。 (2认同)

AlF*_*lFX 10

这是许多使用 Windows 10 双启动的 PC 发生的一些有趣的事情。最近发生在我和朋友身上。请注意,我不知道为什么,我只能推测这取决于某些 Windows 10 更新。正如有人所说,确实这是由于引导过程由于某种原因没有找到根分区,所以 GRUB 要求您通过 CLI 告诉他它在哪里。

这就是我得到的

无论如何,感谢您提出这个问题,我发现它试图解决我的问题,我创建了这个帐户只是为了回答这个问题。修复非常简单:

  • 进入 BIOS/UEFI
  • 检查引导分区:是否正常或太多?你认得他们吗?删除不需要的。
  • 将引导顺序重置为默认值
  • 重新启动,您应该会看到通常的 GRUB 菜单

  • 这正是我安装 Manjaro 时的情况。重新启动后,它总是会转到 grub shell,这很麻烦。问题是在 UEFI 启动选项中,硬盘的顺序是: 1. Live CD(不再连接)。2. Windows 启动管理器(实际进入 grub shell 的那个)。3. Manjaro(实际上是Manjaro 的grub)。在 UEFI 引导顺序中将 Manjaro 放在首位后,计算机启动并按预期进入 grub。 (2认同)

小智 6

我突然发现,经过一些更新后,Windows 将快速启动选项设置为启用。这导致了我的 ubuntu 启动问题))快速启动选项可以在 BIOS/启动设置中的某个位置找到

  • 我尝试了很多建议,但没有奏效。解决办法很简单,关闭快速启动即可。Linux 根分区位于第二个驱动器上,没有足够的时间进行初始化。也许这个评论会帮助有人关注这个答案。 (2认同)

GAD*_*D3R 5

你可以通过Super Grub2磁盘启动你的linux系统,从这里下载iso并创建一个可启动的USB

成功启动kali linux后,重新安装grub-efi如下:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --debug /dev/sda
update-grub
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题。我发现有时在 Windows 10 中启动时启动顺序会发生变化。我的笔记本电脑中有两个 SSD。一个安装了 ubuntu 和 grub,另一个安装了 windows。Windows 10更新时启动顺序有时会改变,将Windows SSD放在第一位,导致系统始终启动到Windows。最近它随机改变了它,我开始看到系统启动进入 grub 提示符。一旦我更改了 BIOS 中的启动顺序,grub 菜单就会正常加载。


小智 5

如果在 GRUB 命令提示符下输入“exit”将您带到 GRUB 菜单,则可能是 BIOS 实用程序中的引导优先级顺序存在问题。

对我来说,修复方法是重新排序启动顺序 - 我在启动时输入 BIOS 实用程序并重新排序“UEFI 硬盘驱动器优先级”,以便 Ubuntu 分区排在第一位。

我的理解是,在 GRUB 菜单上输入“exit”将退出 GRUB 并导致 BIOS 尝试启动下一个可用的引导加载程序。