字体:  

SOS 求助,关于Grub的奇怪问题

tooth_oracle 发表于: 2008-7-20 00:07 来源: 远景无限博客

我的台式机,先成功安装64位的Ubuntu,正常运行,后将同一磁盘上的XP升级为Vista,然后按照下面大家都熟悉的方法激活Ubuntu。
  1. LiveCD启动
  2. 命令行sudo grub
  3. find /boot/grub/stage1
  4. root (hd0,X)
  5. setup (hd0)
第三步出了问题,报错为: Erro 15:File not found.
检查后发现/boot竟然没有 grub目录!再检查,原来的boot分区被当作一个额外的磁盘,挂接到/media下,即为“/meida/disk/grub”.
可是,我用" find /meida/disk/grub/stage1 "并不能成功工作,报错仍为: Erro 15:File not found.

如何办啊,各位高手。拜谢了。

最新回复

tooth_oracle at 2008-7-20 00:27:07
这下NB大了,Vista也进不去了,告诉我磁盘么有装可引导的系统。大概是我动LiveCD中的分区管理器搞的。
本来想进Vista把boot激活试试看~~~我靠。

今天晚上老子困了,不搞你了,明天继续搞四你!嫩在滚刀肉,老子重装一遍Ubuntu总行吧?在不行老子格了你。
tiancaiabc at 2008-7-20 15:47:20
3. Grub Error 15
出现症状:

该错误可能出现在Grub配置的两个不同的阶段, 一种可能是出现在Grub的安装配置阶段(也就是在MBR上安装Grub的时候), 屏幕显示如下:

grub> root (hd0,0)Filesystem type is xfs, partition type 0x83grub> setup (hd0)Checking if "/boot/grub/stage1" exists... noChecking if "/grub/stage1" exists... noError 15: File not found
还有一种情况就是启动电脑后选择启动linux或其他在Grub启动列表中列出的系统时, 屏幕显示如下:

Booting 'gentoo Linux'root (hd0,0)Filesystem type is ext2fs, partition type 0x83kernel (hd0,0)/boot/kernel-2.4.20 root=/dev/hda3 vga=792Error 15: File not foundPress any key to continue...
解决方法 (第一种情况) :

该错误在找不到指定的文件时出现, 但是此时像磁盘或分区信息这样的其他配置都没问题(只是找得到相应的分区或磁盘, 至于对不对它可不管)。 一般来说没找到的文件以kernel居多。 首先需要确认一下在你的/boot里的那个kernel, 如果需要存在于你/boot里那个kenel的完整的文件名, 使用livecd, rescue盘或其他安装在硬盘上的linux系统引导成功后挂载那时在配置Grub时候指定的/分区和/boot(需要的话), 然后使用chroot进入那时的根分区, 使用下面的命令进行查找。

# cd /boot# ls  
如果发现kernel文件丢失, 进入/usr/src/linux(再此之前确认一下该目录下放置了kernel的source code)重新compile一个, 命令如下:
# cd /usr/src/linux/# make menuconfig# make
完成之后拷贝进/boot:

# cp /usr/src/linux/arch/i386/boot/bzImage /boot
重命名一下kernel, 和你在grub.conf中指定的一样就可以了。 顺便再检查一下grub.conf中kernel那行引用的分区是否正确。

除了kernel的丢失或损坏, BIOS无法识别存放Grub的stages和kernel的硬盘分区也会出现相同的Missing 错误。同时存放Grub的stages和kernel的分区不应该是使用software RAID-5(或者是使用其他优化存储技术的分区, 比如LVM或LVM2)的。

解决方法 (第二种情况) :

第一, 检查grub.conf的root行和setup行配置正确。如果你确认你使用的方法是正确的, 那可能你使用的Grub版本存在bug(比如0.93.20031222这个版本), 使用你所用发行版的软件工具新安装一个或是升级你原来所用的Grub)。

Gentoo用户可以使用下面的命令:

(在chroot环境下执行该命令)

# echo "=sys-boot/grub-0.93.20031222" >> /etc/portage/package.mask# emerge grub -p
然后你也可以使用Grub开发人员建议使用的 grub-install脚本进行Grub的在MBR中的安装:

(--root-directory 在你使用单独的/boot分区时是必选项)

# grub-install --root-directory=/boot /dev/hda
如果上面的方法你都试过, 但是还是没法解决问题的话, 请检查一下你的/boot分区, 可能是你的/boot分区存在问题:

(确认一下你将要进行fsck的分区是处于unmount状态下的, 在给出的例子中使用的是/dev/hda1。)

# fsck -y /dev/hda1


原文:http://jilujilu.ycool.com/post.1881381.html
tiancaiabc at 2008-7-20 15:48:05
仅供参考
diony at 2008-7-20 23:08:31
对,grub-install命令就可以。没必要非要进grub然后才装到mbr上的,直接用命令就可以了。命令可以加参数,指定安装位置等。具体看命令运行时的说明。

不过在我的印象里,参数不应该是--root-directory=/boot 吧,这个参数应该是指定boot的上级目录(也就是root)的。按楼主的情况,boot大概是单独分了一个区,那样的话把自动挂载的那个先umount掉,然后自己手动mount到/media/boot上,然后参数用/media就好了。

也有可能我记错了,楼主仔细看一下命令的提示。
aronmalache at 2008-7-20 23:56:02
你可以修改一下fstab,然后把/boot重新挂在一下。
tooth_oracle at 2008-7-23 19:33:20
以下是Ubuntu中文论坛上一个高手的解答,成功搞定我的问题。

“find /grub/stage1”

他接下来如此解释:

因为你说你有单独的 /boot 分区的。
find /boot/grub/stage1 的第一个"/"并不是指整个文件系统的根,而是指某个分区的根。它的意思是说,寻找所有的分区 (hdx,y),找到存在 (hdx,y)/boot/grub/stage1 的,就返回信息 (hdx,y) 给你看,鉴于你的 /boot 是独立分区,并不存在任何分区下有名为 boot 的文件夹,因此返回 Error 15.

你用 livecd 启动时,整个文件系统的根是在内存盘里的,这时的整个文件系统和你从硬盘启动时的文件系统组织完全不同。从光盘启动时并没有用到硬盘里的任何文件,硬盘里的所有分区当然不会自动挂载到文件系统里--文件系统里的东西都是从光盘里来的。这时的/boot只是内存里的一个幻影而已,你原来的boot分区对于livecd来说,作为一个外来的东西,点击它就挂在/media下面,这是对的。
tooth_oracle at 2008-7-23 19:34:35
热情让我感动,这是论坛精神
diony at 2008-7-24 08:35:08

QUOTE:

原帖由 tooth_oracle 于 2008-7-23 19:33 发表
以下是Ubuntu中文论坛上一个高手的解答,成功搞定我的问题。

“find /grub/stage1”

他接下来如此解释:

因为你说你有单独的 /boot 分区的。
find /boot/grub/stage1 的第一个"/"并不是指整个文件系统的根 ...
嘿嘿,跟我说的基本是一个意思。不过我对grub相当不熟悉了,基本上只懂在外面用grub-install来装,还没有失败过。
tooth_oracle at 2008-7-24 10:16:50
你的表达让菜鸟不太看得懂。

我现在有点郁闷了:该不该花一部分精力去了解些基础的东西呢?是个用品而已,花精力去研究,我觉得没必要,也不在有乐趣(尽管曾经有过)。
另一方面,向基础多些了解,对使用Ubuntu似乎很有必要。
tooth_oracle at 2008-7-24 10:21:49
不过,Linux处理和Windows相同的一些概念的手法,的确能让人感到某种...“美感”。
但我说不出这种感觉是不是仅来源于处理手法的另类,而非本身有美感。
diony at 2008-7-24 13:08:48
很明显你也是个喜欢折腾系统的好奇宝宝,不学习基础怎么折腾……
sheji at 2008-7-24 13:51:09
如果没有grub的创新,也许你就不会对这些系统有美感的认识了。
mhqqy at 2008-7-24 21:20:52
哈哈,虽然完全不懂,但是来帮你顶帖子了!!呵呵!
tooth_oracle at 2008-7-25 12:36:28

QUOTE:

原帖由 mhqqy 于 2008-7-24 21:20 发表
哈哈,虽然完全不懂,但是来帮你顶帖子了!!呵呵!
winvistartm at 2008-7-25 12:59:38
其实大家好象有个误区,装ubuntu时分区/boot /home 等并把这此分区挂载在系统

应该这样理解:

ubuntu会在/(根目录)下建立文件夹boot home ,当ubuntu启动时会把相关分区挂载在相对的文件夹下,大家看到的就是/boot /home

当系统没有启动只是启动grub,那么相应分区并没被挂载,在此状态时就是/(根目录),这时用find命令查找时就是find /...,而不是find /boot/...

[ 本帖最后由 winvistartm 于 2008-7-25 13:01 编辑 ]