由于 GRUB“没有此设备”错误,Linux 安装无法启动

由于 GRUB“没有此设备”错误,Linux 安装无法启动

我想我已经用尽了所有我知道的方法,所以我要发射信号弹。我会尽量覆盖所有内容(尽管是部分内容),所以请耐心等待。

我决定在之前安装 Ubuntu 10.10 的位置安装 Linux Mint 11。在此安装之前,我有一个装有 Windows XP 的分区,很久以前,我曾用它来进行双启动。我在这次安装中删除了该分区。

安装后,系统无法启动。检查 CD/DVD 后,系统打印:

error: no such device: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
GRUB rescue>

启动 Ubuntu 没有任何问题。我似乎记得上次安装(而不是升级)Ubuntu 时也遇到过类似的问题。时间过去了一段时间,但我认为我已经使用XP CD 修复了这个问题。但这次这些方法不起作用FIXMBRFIXBOOT

提示GRUB rescue>似乎已损坏。即使help不起作用。我能够ls,结果如下:

GRUB rescue> ls
(hd0) (hd0,msdos1) (hd1) (hd1,msdos1) (hd2) (hd2,msdos5) (hd2,msdos3) (hd2,msdos2) (hd2,msdos1)

此外,我不知道这个设备是什么。我在 下找不到匹配的 UUID /dev/disk/by-uuid。事实上,我的启动硬盘(sda,见下文)没有 UUID。我的设置是 Frankenbox。我知道在这种混合中不要依赖设备枚举,但为了便于讨论,下面给出了它们。

  • Ch 0 主控:250GB PATA (sda)
    • sda1
  • Ch 0 从属:无
  • 通道 1 主控:80GB SATA (sdb)
    • sdb1:/
    • sdb2:/home
    • sdb3:交换
  • Ch 1 从属:DVD SATA
  • SATA 扩展卡:250GB SATA (sdc)
    • sdc1

当我在 sda 上发现一些残留(且令人困惑)的 RAID 元数据时,我以为自己找到了宝藏。该驱动器之前未出现在 Linux 安装中,但使用后出现了dmraid -r -E /dev/sda。然而,启动失败仍然存在。

直到刚才,我可以使用 Mint 安装 CD“从本地驱动器启动”,这确实会带我进入 sdb1 上的安装。使用 CD 启动驱动器并运行以下命令后,问题变得更糟,只给出提示GRUB>而不是启动驱动器。

# GRUB-install --no-floppy /dev/sdb1
# update-GRUB
GRUB> find /boot/GRUB/stage1
GRUB> root (hd1,0) # result of above
GRUB> setup (hd0)

肯定存在不匹配的情况,因为 sdb 有 3 个分区,似乎(hd2)GRUB rescue>提示符下,但(hd1)实际启动时却不是。但是,如果我使用了 UUID(我想我已经使用了),这应该不是问题。使用 live CD,我看到 sdb1:/boot/GRUB/menu.list 包含

# kopt=root=UUID=[UUID of sdb1]
...
# groot=[UUID of sdb1]

据我所知,根本问题是 GRUB 出于某种我不理解的原因试图启动一个不存在的设备。我不知道如何根据给定的 UUID 确定它要查找什么。我没有看到 sda 上任何东西的 UUID。

现在,我甚至无法使用 CD 启动驱动器。

更新:

我认为将/boot分区放在与 MBR 相同的驱动器上可能会有所帮助,因此我添加了 sda2,设置了标志boot,然后重新安装(这可能有点过头了)。

我再次收到grub rescue>提示,但是现在,当ls我收到

grub rescue> ls
(hd0) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1) (hd2) (hd2,msdos3) (hd2,msdos2) (hd2,msdos1)

因此,在此提示符下,sda 不再是 (hd0),sdb 也不再是 (hd1)。我不知道为什么它错位如此之多,也不知道这有什么关系。我可能会再试一次,放入/bootsdc/(hd0)。

答案1

由于引导加载程序中的 UUID 标记错误,我也遇到了同样的错误,这家伙给了我答案这些可用的命令处于 grub 恢复模式。

首先,您需要识别包含 grub 菜单文件的驱动器和分区,这些文件通常位于 /boot/grub

ls [to identify your drive and partition options]
ls (hdx,p)/ [to identify which partition has the /boot folder]

然后,您可以从上面找到的驱动器和分区手动加载启动菜单。

set prefix="(hdx,p)/boot/grub"
set root="(hdx,p)"
insmod normal
normal

就我而言,我手动并有目的地修改了启动驱动器的 UUID,更新了 grub 菜单和 fstab,但忘记加载新的引导加载程序来更新引导加载程序中的 UUID 和/或驱动器。然后,驱动器在 grub 中没有按预期顺序排列,上面的操作解决了所有问题;它恢复了菜单,这样我就可以重新进入并使用新的 UUID 信息更新引导加载程序

答案2

解决方案就是将 GRUB 加载程序 (MBR?) 放在正确的驱动器上。在这种情况下,在 Linux 中加载的内容为 /dev/sdc,而在 GRUB 中加载的内容为 (hd0)。

答案3

只需使用启动修复磁盘实用。对我来说效果很好。

相关内容