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

error: file '/grub/i386-pc/normal.mod' not found. grub rescue> 

我能做什么? 我只是坐着盯着它看。

我找到了我的旧上网本(戴尔Inspiron 1010),我已经使用了大约四年了。 我用Ubuntu 12.10替换了Windows XP。 我使用了我的可启动USB驱动器。 我安装并重新启动。 我收到的消息是normal.mod

我该怎么办? 键入exitrebootquit ? 我应该重新安装吗?

Grub有一个小的核心映像,在启动时加载。 核心映像动态加载提供进一步function的模块。 i386-pc/normal.mod not found表示grub无法加载normal.mod ,这是一个提供正常命令的grub模块。 要加载normal.mod,你需要告诉grub它在哪里。 要执行此操作,您可以使用grub命令行(也称为Rescue Console)。 如果启动有问题,Grub将启动命令行,或者您可以在grub启动时按住shift键手动启动它(强制显示grub菜单),然后按“c”键。

使用grub,您可以浏览驱动器,分区和文件系统。 你需要:

  • 使用lssearch.file找到grub安装
  • 设置grub变量$ prefix和$ root
  • 加载并运行正常模块

以下只是一个例子。 您需要将其调整为本地驱动器和分区设置。

normal.mod在哪里? 看看一些可能的位置

 grub> search.file /i386-pc/normal.mod error: no such device: /i386-pc/normal.mod grub> search.file /grub/i386-pc/normal.mod error: no such device: /grub/i386-pc/normal.mod grub> search.file /boot/grub/i386-pc/normal.mod hd0,msdos1 

如果你得到"Unknown command 'search.file'"这意味着search.file命令不可用。 这可能是因为你在grub rescue>提示符而不是grub>提示符。 在这种情况下,您仍然可以继续使用ls命令和您的分区布局知识来查找normal.mod

发现它在(hd0,msdos1)

 grub> ls (hd0,msdos1)/boot/grub/i386-pc/normal.mod normal.mod 

格鲁布为什么没找到它?
check $ prefix – grub目录的绝对位置
(这是通过grub-install安装grub时设置的)

 grub> echo $prefix (hd0,msdos2)/boot/grub 

check $ root – 默认设备,用于不包含设备的路径
grub最初将此设置为来自$ prefix的设备

 grub> echo $root hd0,msdos2 

root和prefix指向错误的分区(hd0,msdos2)
将$ root和$前缀设置为我们发现normal.mod(hd0,msdos1)的分区

 grub> set root=(hd0,msdos1) grub> set prefix=(hd0,msdos1)/boot/grub 

加载并运行正常模块

 grub> insmod normal grub> normal 

其他一些可能有用的命令

ls列出所有设备和分区

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

分区

 grub> ls (hd0,msdos1) Partition hd0,msdos1: Filesystem type ext* - Last modification time 2014-05-08 15:56:38 Thursday, UUID c864cbdd-a2ba-43a4-83a3-66e305adb1b6 - Partition start at 1024KiB - Total size 6290432Kib 

ls文件系统(注意/结尾)

 grub> ls (hd0,msdos1)/ lost+found/ etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz initrd.img cdrom/ 

看里面/ boot / grub
存在i386-pc目录意味着这是一个BIOS安装
x86_64-efi目录的存在将指示EFI安装

 grub> ls (hd0,msdos1)/boot/grub i386-pc/ locale/ fonts/ grubenv grub.cfg 

  • Grub手册:故障排除:GRUB仅提供一个救援shell,涵盖了上述基本恢复方法
  • 有关可用的命令和变量,请参阅Grub手册:命令行和菜单项命令列表以及特殊环境变量 。
  • 有可能加载其他缺少的模块,例如,如果无法识别searchsearch.file命令,请设置$prefix ,然后执行insmod search ,为ls执行insmod ls等。运行find /boot/grub -name *.mod on一个有效的Linux安装程序,可以查看所有动态加载的Grub模块。
  • 您始终可以从外部媒体启动并重新安装Grub 。

今天下午在机器上解决了这个问题。 似乎这个问题的一个原因是安装程序认为您有EFI安全启动,而不是因此加载错误的GRUB文件。

您需要做的是安装GRUB 2.为此,您需要启动到实例,挂载根分区并安装。

从实时实例中,找到加载根分区的分区。 GParted会告诉你这个,或者你可以使用

sudo fdisk -l

转到安装ubuntu的分区。

一旦有了分区,就需要安装它。 假设根分区在/ dev / sda5上,那就是:

sudo mount /dev/sda5 /mnt

然后安装GRUB 2

sudo grub-install /dev/sda --root-directory=/mnt [使用复制和粘贴这个,因为你需要一些空格才能正确。]

假设这是你的问题,那么你应该能够重启,一切都会正常工作。

这方面的原始解决方案来自: http : //ubuntujournal.blogspot.com/2012/11/fix-new-install-of-ubuntu-1210-wont-boot.html

我没有在论坛上找到这些信息,所以我想分享一些信息,尽管很久以前这个问题被问到了:

如果你有一个安装了Ubuntu的大型(例如1TB)分区,并且没有为/ boot /分配额外的分区,则可能是出现此类错误的原因。 当GRUB启动时,它使用biosdisk驱动程序从/ boot / grub /目录中读取普通驱动程序。 有时,在biosdisk扇区支持的最大值之后,此目录可能位于硬盘驱动器上的某个位置。 例如,系统升级后可能会出现此问题。 此外,我在新安装Ubuntu 13.10后总是面临这个问题,但它可能会有所不同,因为它取决于主板/ BIOS。

你可以检查一下使用grub恢复 – 设置正确的PREFIX和ROOT之后,尝试ls / boot – 如果你没有看到任何东西,但是从live cd / flash驱动器启动时可以看到文件 – 比你上面描述的问题。

您可以执行不同的操作以使系统可引导,但是将来(在dist-upgrades期间)避免该问题的唯一方法是将/ boot目录放在单独的小分区上。