error: file '/grub/i386-pc/normal.mod' not found.
grub rescue>
Run Code Online (Sandbox Code Playgroud)
我能做什么?我只是坐着盯着它看。
我找到了我大约四年没有使用过的旧上网本 (Dell Inspiron 1010)。我用 Ubuntu 12.10 替换了 Windows XP。我使用了可启动的 USB 驱动器。我安装并重新启动。我收到了normal.mod
未找到的消息。
我该怎么办?键入exit
, reboot
, 或quit
? 我应该重新安装吗?
bai*_*ain 46
Grub 有一个在启动时加载的小型核心映像。核心映像动态加载提供更多功能的模块。i386-pc/normal.mod not found
表示grub无法加载normal.mod,这是一个提供普通命令的grub模块。要加载normal.mod,您需要告诉 grub 它在哪里。为此,您可以使用 grub 命令行(又名救援控制台)。如果引导出现问题,Grub 将启动命令行,或者您可以在 grub 启动时按住 shift 键手动启动它(强制显示 grub 菜单),然后按“c”键。
使用 grub,您可以探索驱动器、分区和文件系统。你需要:
下面只是一个例子。您需要使其适应您的本地驱动器和分区设置。
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
Run Code Online (Sandbox Code Playgroud)
如果你得到"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
Run Code Online (Sandbox Code Playgroud)
为什么grub没有找到?
检查 $prefix - grub 目录的绝对位置
(这是在 grub-install 安装 grub 时设置的)
grub> echo $prefix
(hd0,msdos2)/boot/grub
Run Code Online (Sandbox Code Playgroud)
检查 $root - 不包含设备的路径的默认设备
grub 最初将其设置为 $prefix 中的设备
grub> echo $root
hd0,msdos2
Run Code Online (Sandbox Code Playgroud)
root 和 prefix 指向错误的分区 (hd0,msdos2)
将 $root 和 $prefix 设置为我们找到 normal.mod (hd0,msdos1) 的分区
grub> set root=(hd0,msdos1)
grub> set prefix=(hd0,msdos1)/boot/grub
Run Code Online (Sandbox Code Playgroud)
加载并运行正常模块
grub> insmod normal
grub> normal
Run Code Online (Sandbox Code Playgroud)
ls 列出所有设备和分区
grub> ls
(hd0) (hd0,msdos5) (hd0,msdos1)
Run Code Online (Sandbox Code Playgroud)
ls分区
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
Run Code Online (Sandbox Code Playgroud)
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/
Run Code Online (Sandbox Code Playgroud)
查看 /boot/grub
是否存在 i386-pc 目录意味着这是
x86_64-efi 目录的 BIOS 安装存在将表明 EFI 安装
grub> ls (hd0,msdos1)/boot/grub
i386-pc/ locale/ fonts/ grubenv grub.cfg
Run Code Online (Sandbox Code Playgroud)
search
或search.file
命令设置不$prefix
正确,然后 do insmod search
, for ls
doinsmod ls
等。在运行find /boot/grub -name *.mod
的 Linux 安装上运行以查看所有动态加载的 Grub 模块。小智 32
今天下午在机器上解决了这个问题。似乎这个问题的一个原因是安装程序认为你有 EFI 安全启动,而你没有,因此加载了不正确的 GRUB 文件。
您需要做的是安装 GRUB 2。为此,您需要启动到实时实例,挂载您的根分区并安装。
从实时实例中,找到加载根分区的分区。GParted 会告诉你这个,或者你可以使用
sudo fdisk -l
Run Code Online (Sandbox Code Playgroud)
转到安装 ubuntu 的分区。
一旦你有了你的分区,你就需要挂载它。假设根分区在 /dev/sda5 上,那就是:
sudo mount /dev/sda5 /mnt
Run Code Online (Sandbox Code Playgroud)
然后安装 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
归档时间: |
|
查看次数: |
460982 次 |
最近记录: |