Gentoo Logo

Gentoo Grub错误汇总

内容:

1.  篇首语

致谢

感谢Earthwingspenetrodeloyaltononepillaairheadnephrosyamakawa 和其他所有人在原上发表的建议。

免责声明

示例中提供的仅是例子,请务必确保根据你的系统的实际情况改变分区号及类似信息。遵照本文档中所提供的解决方案须自己承担风险。

2.  Grub loading, please wait...

状况

代码 2.1: Grub输出

GRUB loading stage 1.5
GRUB loading, please wait...

出现这段信息之后,系统停止。如果你试图用grub软盘引导系统,这种问题就会消失。

解决方案

根据The_Bell你可以改变你BIOS中的引导命令。

调整你的BIOS使它不要首先从软盘启动。

penetrode上说这可能是由于错误的CFLAGS设定引起的。尽管现在的grub ebuild过滤掉了-fstack-protector,如果其他的不起作用运用干净的CFLAG重新编译grub也不会有问题。

代码 2.2: 使用干净的CFLAG重构GRUB

# CFLAGS="-O2 -march=i686 -fomit-frame-pointer -pipe" emerge grub

3.  GRUB错误12

状况

代码 3.1: Grub输出

12:Invalid device requested.

如果设备字符串语法正确也会返回这个错误,另外这种错误的出现又不属于任何其它的错误。

解决方案

当你通过交互命令在你的引导设备中安装grub时,你是否在grub命令提示符后执行下面两行呢?

代码 3.2: 交互安装命令

grub> root (hd0,0)
grub> setup (hd0)

(hd0,0)应该用你的引导分区替换,而(hd0)用你选择的HDD替换。谨记(hd0)将安装引导管理器到你的第一块硬盘(即主引导盘)的主引导记录(MBR)中。

4.  Grub错误15

状况

这个错误可能会发生在GRUB配置的两个不同阶段,或是在初始化配置期间(将GRUB安装在主引导记录中)抑或是在引导系统和试图连接Linux时(也或者是其它情况)。

代码 4.1: Grub输出──初始化配置

grub> root (hd0,0)
 Filesystem type is xfs, partition type 0x83

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15: File not found

代码 4.2: Grub输出──引导一条记录

Booting 'gentoo Linux'

root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
kernel (hd0,0)/boot/kernel-2.4.20 root=/dev/hda3 vga=792

Error 15: File not found
Press any key to continue...

解决方案──初始化配置

如果特定的文件名没有找到而其它的(诸如磁盘和分区信息)是正确的将返回这一错误。

幸运的是,这条错误标明了缺少一个内核映像文件。你要确保你的引导分区中存在以上提到的相关的文件。

为了找到你的内核的精确命名,从一个安装光盘中启动,挂载你的根分区和引导分区(如果可用的话)。然后,切换到你的Gentoo系统并列出所有可用的文件,看哪一个内核映像是你要启用的:

代码 4.3: 调整存在的内核映像

# cd /boot
# ls

这将列出所有在你的引导分区所获得的内核。如果你的内核不存在,请确保你已经编译了一个内核(用genkernel或是手工编译):

代码 4.4: 重新编译内核

# cd /usr/src/linux/
# make menuconfig
# make

并将它复制到你的引导分区:

代码 4.5: 复制内核

# cp /usr/src/linux/arch/i386/boot/bzImage /boot

调整内核的名字使其和你的grub.conf文件中定义的相同。另外还要确保你的grub.conf文件中关于内核的行关联到那个分区(相对的或绝对的)。

另外一个报告的错误是BIOS忽略了内核或grub stages所在的盘。除此之外,grub保存它stages的分区不应使用RAID-5(或其它的剥离技术)设定。

解决方案──引导一个选项

首先,调整你所用的rootsetup行是正确的。

如果你确定它们是可用的,那么你可能用了有缺陷的GRUB版本(0.93.20031222)。请升级你的Portage树或是屏蔽此版的grub:

代码 4.6: 屏蔽Grub

(在chrooted环境下执行这些)
# echo "=sys-boot/grub-0.93.20031222" >> /etc/portage/package.mask
# emerge grub -p

你同样可以用由GRUB作者所推荐的grub-install脚本:

代码 4.7: 运用grub-install

(如果你使用一个单独的引导分区你则还需要--root-directory选项,否则就不用管它)
# grub-install --root-directory=/boot /dev/hda

如果这些都失败了,你的引导分区可能已经损坏。请检查分区错误:

代码 4.8: 检查分区错误

(确保引导分区,在此处是/dev/hda1)
# fsck -y /dev/hda1

5.  Grub错误17

状况

代码 5.1: Grub输出

root (hd0,0)
filesystem type unknown partition type 0x7

Error 17 : Cannot mount selected partition

解决方案

如果分区请求存在而文件系统类型不能被GRUB识别将返回此错误信息。

请一定检查你的root(x,y)在你的grub.conf中已经设置。

另外,如果你要引导Windows,请确保你的grub.conf文件中有root (hdX,Y)(或rootnoverify (hdX,Y))和chainloader (hdX,Y)+1

6.  Grub错误18

状况

代码 6.1: Grub输出

kernel (hd1,4)/bzImage root=/dev/hdb7

Error 18: Selected cylinder exceeds max supported by BIOS

解决方案

当试图读取的线性块地址在BIOS可转换区之外时返回这个错误。这通常出现在如果你的硬盘大于BIOS可以控制(旧机器上(E)IDE硬盘的512MB和通常状况下高于8G)。

试试升级你的BIOS或将你的引导分区移动到前面(或至少到恰当的范围内)。

7.  GRUB GRUB GRUB GRUB GRUB ...

状况

代码 7.1: Grub输出

GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB
  GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB
...

解决方案

通过airhead可以知道这可能是由让你的bios自动检测你的硬盘引起的。试试将你的bios选项设定成User Type HDD。

另外一种可能是你将Grub装在主引导分区上和试图将它重新安装(例如是因为更换硬盘)但是运用了错误的setuproot命令。

8.  检查设备推测BIOS驱动。这可能要花费很长时间。

状况

当你试图安装grub,它在显示下面几行后挂起:

代码 8.1: Grub输出

# grub

Probing devices to guess BIOS drives. This may take a long time.

解决方案

一个报告的原因是由外来的硬盘设备配置文件引起的,如在一条线上有多个ultra/non-ultra DMA硬盘。

9.  安装Grub时,系统挂起

状况

安装Grub时,系统挂起

代码 9.1: Grub输出

# grub
(在这一步,安装停止)

解决方案

如果你没有软盘设备,你是否使用了--no-floppy开关?

代码 9.2: 使用--no-floppy开关安装grub

# grub --no-floppy

10.  Uncompressing Linux... Ok, booting the kernel.

状况

出现下面的行后系统挂起:

代码 10.1: Linux输出

Uncompressing Linux... Ok, booting the kernel.

解决方案

严格来讲,这并不是grub错误。一种可能的原因是ACPI没有正常工作但是在内核中却已经将它启用。请尝试在bios中禁用它。

11.  Grub只显示一个Grub提示符

状况

当引导系统时,返回一个grub命令提示符而非一个你在grub.conf文件中所定义的选单。

解决方案

挂载你的引导分区并检查grub/grub.conf,如果它存在。

代码 11.1: 挂载和检查

# mount /dev/hda1 /mnt/gentoo/boot
# cat /mnt/gentoo/boot/grub/grub.conf

同时确定 menu.lst 的符号链接存在:

代码 11.2: 检查符号链接

# ls -l /mnt/gentoo/boot/grub/menu.lst
lrwxrwxrwx  1 root root 9 Mar  7 14:00 /mnt/gentoo/boot/grub/menu.lst -> grub.conf

如果没有,请重新建立符号链接:

代码 11.3: 重新建立menu.lst的符号链接

# cd /mnt/gentoo/boot/grub
# ln -snf grub.conf menu.lst

如果是这种情况,请重新安装grub:

代码 11.4: 重新安装Grub

(在chrooted环境下运行)
# grub-install --root-directory=/boot /dev/hda

12.  在/boot/boot找不到设备:找不到或没有块设备

状况

当运行grub-install安装GRUB时,获得以下错误:

代码 12.1: Grub输出

# grub-install --root-directory=/boot /dev/hda
在/boot/boot找不到设备:找不到或没有块设备

解决方案

检查你是否忘记了以下的:

代码 12.2: 更新mtab文件

# grep -v rootfs /proc/mounts > /etc/mtab

13.  在Grub菜单中点击回车后系统重新启动

状况

系统启动时在Grub菜单中点击回车,系统重新启动。

解决方案

请尝试禁用内核中的帧缓冲支持。如果这样做不起作用,禁用APM和ACPI。

14.  在Grub菜单中点击回车,出现黑屏

状况

系统引导过程中,在Grub菜单中点击回车,出现黑屏,但是系统却仍有响应(例如,你的numlock指示灯还可切换)。

解决方案

禁用帧缓冲(通常是从你的grub.conf中移除vga=XYZ)并检查你的内核配置中的处理器架构。

15.  Grub Image缺失

状况

系统启动时看不到Gentoo闪屏。

解决方案

首先检查grub.conf中的闪屏文件确实存在。如果存在,再检查grub ebuild。可能是你所用的版本的闪屏图像的补丁被注释掉了。

16.  选择Windows选项后,系统从第二个硬盘中启动Windows失败,

状况

选择了Windows选项以后,系统拒绝引导而且没有明显的原因。

解决方案

cyrillic提示我们你可以用不同的命令"映射"你的硬盘像下面一样改变grub.conf中的Windows选项:

代码 16.1: 硬盘映射

title Windows XP
  map (hd0) (hd1)
  map (hd1) (hd0)
  chainloader (hd1,0)+1

17.  Grub segfaults when trying to install

状况

这种状况经下面的解释说是只与现在将grub安装到引导分区的grub-0.95.x相关联的。

代码 17.1: 安装Grub

grub> root (hd0,0)

grub> setup (hd0)

Segmentation fault

解决方案

与此相关的是一个知名bug而且在grub 0.96中已经确定。同时grub 0.94 r1和grub 0.94 r2应该能正常工作。如果它同样失败了,你可以试着emerge已经在amd64下稳定和在x86下还不稳定(~x86)的grub-static。要获得附加信息请参考bug #79378



打印

更新于2008年 9月 6日

本翻译的原始版本已经不再被维护

总结: 这个错误汇总的目的在于列出人们可能会遇到的GRUB的问题和错误。所有这些解决方案是由很多Gentoo论坛中的使用者而获得的。

Hartwig Brandl
审校

Ioannis Aslanidis
编辑

Sven Vermeulen
编辑

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.