实时USB错误“您需要先加载内核”

我有一个带有持久性的Ubuntu 18.04的mkusb活动USB,它在我的一些电脑上可以正常启动。但是在一台笔记本电脑上,我收到了以下错误提示:
error: disk `hd0,4' not found.
error: you need to load the kernel first.

我需要做什么才能“首先加载内核”?
编辑:一个占用了SD卡槽的SD卡导致了这个问题。移除SD卡可以让mkusb正常启动,并消除错误。一旦启动,如果需要使用SD卡,我会重新插入SD卡到SD卡槽中。

1
  1. 有问题的电脑是哪一台?请具体指明品牌和型号;
  2. 请告诉我您在创建持久化启动盘时使用了哪些设置。如果您记不清楚,并且有另一个USB闪存驱动器或者内存卡(以及一个USB卡适配器),请创建一个新的持久化启动盘并使用默认设置(当mkusb询问时);
  3. 请按照@Jos的回答建议,在grub菜单环境中进行检查,输入grub> ls ... 并通过编辑您的原始问题报告结果。
- sudodus
1
  1. 你使用的是哪个操作系统(发行版和版本,例如Ubuntu 18.04.1 LTS)来运行mkusb?我问这个是因为我需要这些数据来找出问题的原因(如果可能的话,重现这个问题);
  2. 如果你有一个至少16GB的USB闪存驱动器或存储卡,你可以尝试使用新的压缩镜像文件。使用mkusb从该文件克隆到一个闪存驱动器或存储卡,并检查该系统是否在有问题的计算机上正常工作。
- sudodus
1
  1. 当您启动时,计算机上是否连接了多个带有持久性实时系统的USB闪存驱动器?如果是这样的话,可能会导致驱动器和分区之间的混淆。
- sudodus
1@sudodus更新了我的帖子来回答那些问题。这是系统上唯一连接的活动USB驱动器。虽然还有其他SD卡连接到系统上,但我还没有尝试拆下它们。我会试一下!明天再报告。 - Display name
1谢谢关于任务/问题#1,2,4的详细信息:-) 它应该在那台电脑上工作。例如,我已经在一台带有M2驱动器的NUC电脑上进行了测试。我在18.04.1 LTS中经常使用mkusb。-- 那其他的任务/问题(#3,5,6)呢?7. 还有一个关于持久化活动驱动器分区#3中的文件**mountpoint/boot/grub/grub.cfg**的新任务:请挂载该分区并将grub.cfg文件复制/粘贴到您的原始问题中,并将每行缩进4个空格以将其呈现为“代码”。 - sudodus
1@sudodus系统中还有另一张SD卡,但它不是一个活动的USB。我移除了这张SD卡,一切都正常工作。我不确定为什么mkusb或grub会混淆并尝试从SD卡启动。当其他USB插槽中没有mkusb时,我的BIOS和正常的18.04安装不会尝试从SD卡启动。问题只发生在我使用mkusb USB启动时。简单的解决办法是在使用mkusb USB启动时移除SD卡。 - Display name
这就是为什么我要求您显示持久化启动盘分区#3中mountpoint/boot/grub/grub.cfg的内容的原因。根据您创建持久化启动盘的计算机条件,可能会有所不同,在某些情况下,目标驱动器的定义可能不像其他情况那样具有排他性。 - sudodus
@sudodus 我不太明白你要做的事情。如果你能给我一个指南,我可以执行那些操作。我尝试在网上搜索,但只是更加困惑了。 - Display name
请在grub菜单环境中检查,如@Jos所建议的,输入grub> ls ... 并通过编辑您的原始问题报告结果。在grub菜单中按下'c'键以进入grub提示符,在此处运行ls命令。 - sudodus
  1. 如果您有一个至少16GB的USB闪存驱动器或存储卡,您可以尝试使用新的压缩映像文件。使用mkusb从该文件克隆到闪存驱动器或存储卡,并检查该系统是否在有问题的计算机上运行。请参阅此链接以及其中的链接。
- sudodus
  1. 当您启动时,计算机上是否连接了多个带有持久性系统的USB闪存驱动器?如果是这样,可能会导致驱动器和分区混淆:您可以尝试使用或不使用额外的USB闪存驱动器,并根据#3在grub菜单环境中进行检查,看到了什么不同,并且在继续引导(进入持久性系统驱动器)时报告这些差异。
- sudodus
  1. 对于持久化存储驱动器中第3个分区中的文件 mountpoint/boot/grub/grub.cfg,有一个新任务:执行命令 sudo mount /dev/sdx3 /mnt 其中 x 是持久化存储驱动器的盘符(可能是 b 或者 c)。然后运行 gedit /mnt/boot/grub/grub.cfg 并将内容从 gedit 复制/粘贴到您原始问题的编辑窗口(这里在 AskUbuntu 上)。
- sudodus
我现在没有时间尝试其他的镜像并且折腾那个。/media/jhunter/casper-rw/upper/boot/grub/ 目录下只有两个文件 grubenvunicode.pf2,没有 grub.cfg 文件。我想我很满意地移除SD卡并直接使用_mkusb_。这张SD卡根本不是一个实时系统(只是存储)而且我也没有使用其他任何实时USB设备。感谢你的帮助和坚持,@sudodus。 - Display name
1有人弄清楚为什么会发生这种情况吗?我一直在使用Linux好几年了,但最近更换主板后才开始遇到这个问题。目前我根本无法在UEFI模式下安装任何Linux。 - IamSierraCharlie
5个回答

如果你进入到一个grub提示符,那意味着grub找不到它所期望的引导文件。当grub无法为你加载文件和引导时,可以按以下步骤执行命令序列。首先,查找grub可见的所有分区:

grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)

这将列出磁盘和磁盘上的分区。其中一个分区包含了你的Linux系统。假设它是(hd0,1),然后执行以下命令:

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-4.15.0-45-generic root=/dev/sda1

根据你的系统,用有效的分区(/dev/sda1)替换(hd0,1)、版本号和分区。对于vmlinuz,你只需输入vmlinuz-然后按Tab键。

grub> initrd /boot/initrd.img-3.13.0-29-generic
版本字符串应与vmlinuz的字符串完全相同。
grub> boot
现在应该可以启动您的系统。

其中一个分区保存着你的Linux系统。我该如何确定是哪一个呢?谢谢。 - Display name
3你可以执行 ls (hd0,1) 来列出其内容。如果你看到熟悉的文件夹和 vmlinuz,那是一个 Linux 系统。 - Jos
1这对我有用,但是我不得不使用linux /boot/vmlinuz-4.15.0-45-generic root=/dev/sda1 nomodeset,因为我的Spectre x360(2019)笔记本电脑配备了NVidia GeForce GTX显卡,Ubuntu在登录后会冻结。另外,当我查看/dev/文件夹时,我无法看到任何可用于root=...的分区!所以我不得不从LiveUSB安装分区编辑器中写下正确的分区名称,顺便说一句,直到我通过删除安装菜单中的quiet splash并在该行末尾添加acpi=off来编辑grub命令之前,我甚至无法运行它。 - user72056
1哇塞,你救了我的命!!!我整天都在尝试各种方法。就低调地按照每一行代码的要求进行操作,最后一次回车简直是个大爆炸。瞧,它竟然成功初始化了我之前的操作系统。我太开心了! - testing_22
2请注意,在我的系统上,我必须执行ls (hd0,1)/才能看到目录内容。如果没有加上斜杠/,输出结果只会显示有关分区的大量信息,例如文件系统类型,这也是有用的,但对于确定内容并不帮助。 - Caleb Jay
这对我来说非常有效,但似乎这不是一个永久的解决方案。每次启动时,我都必须一遍又一遍地做同样的事情。我还注意到,通过 grub 菜单中的高级选项选择其中一个可用内核可以绕过此问题。有没有办法使新安装的内核成为默认加载? - 83ingD33p

当我遇到这种情况时,我只需禁用安全启动,问题就解决了。


我需要做什么才能“首先加载内核”?
使用“启动盘创建器”创建拇指驱动器时,我无法使用拇指驱动器引导,并得到了同样的建议。
我的答案略有不同。
在我14岁的Dell台式机上运行Lubuntu 19.10,我使用“启动磁盘创建器”将“ubuntu-19.10-desktop-amd64.iso”加载到了一个闪存驱动器中。
我新的Dell笔记本电脑进行的第一次实验出现了类似的错误,提供的是相同的...“首先加载内核”。
阅读上面的评论后,我检查了我的USB端口,并发现我的Logitech鼠标似乎是唯一的USB连接。
断开USB鼠标可以消除错误。
不需要grub命令。

另一种可能有效的方法是简单地关闭安全启动。这里建议点击此处,对我来说起到了作用。

为了解决我的问题,我将BIOS的启动模式从UEFI改为Legacy。