![由于 GRUB“没有此设备”错误,Linux 安装无法启动](https://linux22.com/image/1296148/%E7%94%B1%E4%BA%8E%20GRUB%E2%80%9C%E6%B2%A1%E6%9C%89%E6%AD%A4%E8%AE%BE%E5%A4%87%E2%80%9D%E9%94%99%E8%AF%AF%EF%BC%8CLinux%20%E5%AE%89%E8%A3%85%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8.png)
我想我已经用尽了所有我知道的方法,所以我要发射信号弹。我会尽量覆盖所有内容(尽管是部分内容),所以请耐心等待。
我决定在之前安装 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 修复了这个问题。但这次这些方法不起作用FIXMBR
。FIXBOOT
提示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)。我不知道为什么它错位如此之多,也不知道这有什么关系。我可能会再试一次,放入/boot
sdc/(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
只需使用启动修复磁盘实用。对我来说效果很好。