Grub错误:找不到文件'/grub/i386-pc/normal.mod'?


17

我最近在机器上安装了arch(希望成功)。但是当我重新启动时,我遇到了问题。我看到黑屏,上面写着文字

Grub loading.
Welcome to GRUB!
error: file '/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>

此后,我用Google搜索了答案。我几乎找到了一个在这里对Ubuntu论坛尚未然后我看到的评论说这是不真实的一个。还有另一个答案,但是我不确定是否要从实时CD安装,以免造成混乱。

如果您在不断遇到分区,命令,教程和系统问题之后也花了7个小时来设置它,您会理解我的担心。太高兴了

任何人都知道让grub正常工作的简单解决方案吗?


第二个建议(与liveCD和chroot一起使用)可能值得尝试。或它的一种变化:我不是arch用户,但之前已经安装过它,从我的记忆中,您可能想考虑与安装arch的各个阶段有关的建议,其中某些阶段涉及chroot。如果您可以回溯到引导Arch CD的上一步,然后将其挂载并chroot到您的安装中,那么您应该可以尝试一下grub-install。您不必重复任何步骤,只需将它们用作指导即可从liveCD扎根。
goldilocks 2013年

虽然我现在不在电脑里,但我确实相信我尝试了grub的安装,但没有用。-–
Griffin

@Griffin不能像在“ grub-install”中那样失败,还是不能解决问题?
derobert

@derobert grub-install不是有效命令\
Griffin

@goldilocks第二个也不起作用
Griffin

Answers:


9

真的很烦

显然,目录/ boot / grub / i386-pc根本不在位,我终于通过将整个/ usr / lib / grub / i386-pc复制到/ boot / grub来解决了这个问题。就这样。

cp -r /usr/lib/grub/i386-pc /boot/grub

我也这样做了,因为它也丢失了。不幸的是,这并没有解决。
Wolfpack'08 2008年

8

我正处于类似问题的中间(偶然也在拱门上)

Grub找不到此文件并运行,因为它使用了不正确的“前缀”

这就是你要做的。您启动到grub救援模式,然后只需弄清楚如何使其启动即可。

首先运行set这将列出变量,例如我的是

cmdpath=(hd0)
prefix=(hd1,msdos3)/boot/grub
root=hd1,msdos3

现在,前缀是grub在其中查找normal.mod文件的变量。在我的情况下,hd1,msdos3/ dev / sdb3相同(类似地,hd0,msdos1将是/ dev / sda1)您可能要执行的操作以查看有效分区列表,方法是输入ls

现在,以我为例,再次将grub安装在/ dev / sdb1上,该文件作为/ boot安装在我的arch分区中,因此正确的前缀为(hd1,msdos1)/ grub

因此,要启动我,我需要这样做:

set prefix=(hd1,msdos1)/grub
insmod normal
normal

在您的情况下,您将必须记住或猜测安装grub的分区。您可能会猜错,它不会造成任何危害,insmod命令将仅会失败,您可以在另一个分区上重试。

此后,grub正常加载,我可以从列表中选择要引导的内容。通常,当发生此类混乱时,将grub重新安装到mbr(使用grub-install)应将其永久修复,因此您不必在每次引导时都这样做。但是,如果要解决这个问题并不容易,我将很难找到解决方法(或者我会分享您应该做的事情)。

仅当此操作失败(例如,前缀正确但仍无法启动)时,才应求助于现场CD或应急CD来解决此问题(最好避免这种情况)


这可能是一个古老的问题,但是我发现有人必须回答如何实际使用grub抢救,而不是使用实时CD和USB来解决问题。我们并不总是有现场媒体来帮助我们,即使我们这样做,通常也可以在我们喜欢的环境中工作更好。
Cestarian '16

很好的解释!(特别是关于“猜测错误不会对任何事情造成伤害的注释”)。在错误地认为删除Windows分区不会对Ubuntu产生影响之后,我遇到了双启动Windows + Ubuntu系统的相同问题。无论如何,这篇文章确实有助于理解如何解决该错误。由于我不记得哪个分区包含grub,因此我只列出了所有分区ls,然后逐个尝试,直到找到正确的组合为止:-)
Leigh 2016年

@Leigh很高兴它对某人有所帮助:)
Cestarian

1
修理东西总是好的,但是了解如何修理它会更好:-)干杯。

您是个天才
Ashish Doneriya

5

在全新安装Mint 15之后,我今天才遇到这个问题。

安装程序会创建/boot/grub/x86_64-efi模块,但不会创建常规/boot/grub/i386-pc模块。

从Live CD重新安装Grub可以解决此问题。

/ dev / sda/ dev / sda1替换为引导设备和引导分区,并从Live CD运行以下命令:

sudo mount /dev/sda1 /mnt
sudo grub-install --boot-directory=/mnt /dev/sda
sudo reboot

1

谢谢你的帖子。在装有Windows Vista的旧Dell Optiplex计算机上重新安装Linux CentOS 5.11之后,我解决了几乎相同的错误消息-“未找到文件'/grub2/i386-pc/normal.mod'”。 -引导系统。

使我的情况复杂的是,我已经尝试并未能在FEDORA默认分区上安装较新的Fedora 20发行版,该发行版使用GRUB2而不是GRUB(LEGACY)。然后,我尝试直接在此之上安装CentOS,保留Windows分区并覆盖FEDORA分区。

在安装CentOS的过程中,我不理会第一个(Windows)分区(hd0,0),并在第二个(boot)分区(hd0,1)上创建了/ boot目录。然后,我选择了当时不修改MBR,而是选择了另一个选项(另一个分区上的引导程序)。

安装成功后,重新启动进入上述错误。

我怀疑第一个分区上的引导信息一直指向GRUB2位置。CPU找不到normal.mod,可能是因为先前创建的FEDORA00分区已被删除。

这是我的步骤:

  1. 从我的Centos 5安装CD引导进入救援模式(“ Linux救援”)。

  2. 挂载本地驱动器:chroot / mnt / sysimage

  3. 切换到单用户模式:su

  4. 更新CentOS安装:yum更新

  5. 使用emacs编辑器将“ Microsoft Windows Vista”添加到grub.conf文件:emacs /boot/grub/grub.conf,并将Vista设置为默认操作系统。

    注意:请参阅www.cyberciti.biz/faq/grubconf-for-windows-vista-or-xp-dual-boot/和https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html /Installation_Guide/sn-medialess-editing-grub-conf.html。)

  6. 尝试更新MBR:grub-install / dev / hda

  7. 重新引导至一个未识别的GRUB错误,该错误显示CPU在显示“ GRUB”后挂起。

  8. 从原始Windows Vista安装磁盘(或其他Windows恢复磁盘)重新启动,然后选择修复磁盘的选项。收到消息MBR已修复。

  9. 正确重新启动进入Windows Vista。

我确信存在更优雅的解决方案,但这对我有用。我也尝试下载GRUB到GRUB2迁移包,如在描述http://help.ubuntu.com/community/Grub2/Upgrading,通过尝试:

$ yum install grub-pc

但是找不到包。也许我应该尝试一下yum install grub


0

添加到flittermice ...

如果从USB引导,并具有i386文件夹,则可以以root用户身份打开损坏分区上的i386文件夹,然后从USB复制工作的i386文件夹。


0

我分两个阶段进入了CentOS 6.7系统。首先,我遵循了上面的flittermice的建议,从实时CD引导,将/ dev / sda2挂载为/ mnt,然后从/ mnt / usr /复制了i386-pc文件夹...(您可以找到您的文件夹在哪里)通过find /|grep i386)到/ boot / grub并重新启动。

这给了我grub>而不是grub rescue> ;-)。

然后,我在这里遵循了一个指南[ https://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux/]来查找并启动我的分区。它是(hd0,2),因为(hd0,1)被交换占用了。

后来,我发现无法使该引导“自动”进行,这可能是因为我的/ boot在ext4上,其inode大小为256,而旧的grub1需要128。我将尝试遵循[ http:// kb.kristianreese.com/index.php?View=entry&EntryID=113]在安装之前准备分区。


0

重新安装Ubuntu。转到“做其他事情”。选择Windows安装分区作为安装引导加载程序的位置。

如果您已有Windows安装,则必须将grub安装到同一分区;否则,请执行以下步骤。否则,您将遇到问题。

这与14、15、16、17 Ubuntu所有版本以及可能的早期版本有关。当系统询问您将引导加载程序安装在何处时,请勿创建并选择/ boot分区;而是使用Windows分区。

谢谢。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.