[请教]双硬盘双系统grub启动问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

[请教]双硬盘双系统grub启动问题

#1

帖子 chouychou » 2006-07-12 20:48

我有两块硬盘,分别单独安装有A_ubuntu6.06(装有grub) 和 B_Win 2000,单独使用时都能顺利启动系统

现在为方便我将A硬盘挂为master,B硬盘挂为Slaver
在grub.conf文件后加入:

titile Microsoft Windows 2000
root (hd1,0)
savedefault
makeactive
chainloader +1

但启动时执行此段语句后就不动了,也不能进入windows系统

请教问题出在哪里呢??
执行root (hd1,0)时还能检测到硬盘的
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#2

帖子 chouychou » 2006-07-13 9:43

高手支个招阿,到底问题在哪里呢?


小弟多谢了!
头像
henry_yue
帖子: 35
注册时间: 2006-07-11 18:25
联系:

#3

帖子 henry_yue » 2006-07-13 10:53

我和你一样碰到了相同的问题
但我已经成功解决
在grub下把savedefault那行给删了,就行了。
为什么我也不知道
而且在引导进入windows下 也要把两行map给删掉。
我查了查grub的文档,里面没有对上面的两条指令的任何解释。不过删掉后确实能救决问题。
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#4

帖子 oneleaf » 2006-07-13 10:53

试试,看行不行.

titile Microsoft Windows 2000
map (hd0) (hd1)
map (hd1) (hd0)
root (hd0,0)
savedefault
makeactive
chainloader +1
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#5

帖子 chouychou » 2006-07-13 12:38

都试了好像还不行阿
现在又试过
N01(删掉savedefault)
title Microsoft Win2000_1
root (hd1,0)
makeactive
chainloader +1
运行完还是没反应了,在grub命令行模式下运行后,继续显示grub>提示符,不能进windows系统
另外:我在命令行模式下执行savedefault怎么显示是""不识别的命令", 好像不支持此命令

NO2:
title Microsoft Win2000_1
map (hd0) (hd1)
map (hd1) (hd0)
root (hd0,0)
savedefault
makeactive
chainloader +1
显示:Error 13: Invalid or unsupported executable format
好像也不支持map命令,执行完没起到任何作用
因为执行root命令显示为:Filesystem type is ext2fs
如果映射成功的话应该到slaver硬盘阿,格式应该为fat的


真是郁闷阿
搞现在要在windows 和ubuntu间切换天天拔电源~~~~~~~
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#6

帖子 chouychou » 2006-07-13 12:42

henry_yue 写了:我和你一样碰到了相同的问题
但我已经成功解决
在grub下把savedefault那行给删了,就行了。
为什么我也不知道
而且在引导进入windows下 也要把两行map给删掉。
我查了查grub的文档,里面没有对上面的两条指令的任何解释。不过删掉后确实能救决问题。
到底是什么意思呢???
什么叫“在 grub下”删除阿?
“进入windows下”删除??

我上面的方法对么?怎么还是不行阿

多谢指教了!
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#7

帖子 oneleaf » 2006-07-13 12:59

title Microsoft Windows 2000
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
makeactive
chainloader +1

这样写试试?
头像
henry_yue
帖子: 35
注册时间: 2006-07-11 18:25
联系:

#8

帖子 henry_yue » 2006-07-13 13:14

建议看一下grub的教程
同时我怀疑你的windows是hd0还是hd1。你可以试一试。
改一改root命令
你可以看看你的linux是hd几?
还有你的主板是不是支持硬盘主次对换,如果有的话,你可以试试,看看现在的windows是不是还完好无损
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#9

帖子 chouychou » 2006-07-13 15:09

oneleaf 写了:title Microsoft Windows 2000
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
makeactive
chainloader +1

这样写试试?
这样还是不行阿,一样没反应了

非常感谢你的指导!!
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#10

帖子 chouychou » 2006-07-13 15:23

henry_yue 写了:建议看一下grub的教程
同时我怀疑你的windows是hd0还是hd1。你可以试一试。
改一改root命令
你可以看看你的linux是hd几?
还有你的主板是不是支持硬盘主次对换,如果有的话,你可以试试,看看现在的windows是不是还完好无损
不是吧,windows不会挂吧?我之前也试过很多次的,还可以进windows

grub 我安装系统之前还是看了些的,但还是不太理解你刚说的意思阿,能不能解释清楚点呢?? 多谢了!
硬盘我确认hd0--ubuntu, hd1--windows
主板支不支持对换这个就不清楚了,机子是比较老的,怎么看是否支持呢? 多谢指教了!

附硬盘信息:(不只system那个Win95是什么意思??难道检测我系统为win95才进不了 ??但我的确是装的Win2000阿)

Disk /dev/hda: 8455 MB, 8455200768 bytes
255 heads, 63 sectors/track, 1027 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 981 7879851 83 Linux
/dev/hda2 982 1027 369495 5 Extended
/dev/hda5 982 1027 369463+ 82 Linux swap / Solaris

Disk /dev/hdb: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 * 1 1252 10056658+ c W95 FAT32 (LBA)
/dev/hdb2 1253 5005 30145972+ f W95 Ext'd (LBA)
/dev/hdb5 1253 2504 10056658+ b W95 FAT32
/dev/hdb6 2505 3756 10056658+ b W95 FAT32
/dev/hdb7 3757 5005 10032561 b W95 FAT32
头像
henry_yue
帖子: 35
注册时间: 2006-07-11 18:25
联系:

#11

帖子 henry_yue » 2006-07-13 15:59

按照上面的分区信息应该是hd1
我的意思是,你可以在刚刚启动进入系统选择菜单时
点击“c”,进入grub的命令行模式,
然后依次输入以下的代码看看到底是哪条代码的那个错误

代码: 全选

root (hd1,0)
chainloader +1
上面介绍的其他代码你可以按照grub的menu.lst
的说明加入。试一试。如果不行的话,请把结果给我 !
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#12

帖子 chouychou » 2006-07-13 16:26

henry_yue 写了:按照上面的分区信息应该是hd1
我的意思是,你可以在刚刚启动进入系统选择菜单时
点击“c”,进入grub的命令行模式,
然后依次输入以下的代码看看到底是哪条代码的那个错误

代码: 全选

root (hd1,0)
chainloader +1
上面介绍的其他代码你可以按照grub的menu.lst
的说明加入。试一试。如果不行的话,请把结果给我 !
哦,理解了
我都试过了阿,不行,请看我5楼贴

执行root (hd1,0)后显示:Filesysterm type is fat(大约是这样,反正不是ext2fs, 所以盘符我确认没错)
但就是执行chainloader +1 后没反应阿
继续显示为 "grub >"
没有启动系统阿,
如果再执行boot 的话,就会定住不动,或者死机
头像
henry_yue
帖子: 35
注册时间: 2006-07-11 18:25
联系:

#13

帖子 henry_yue » 2006-07-13 18:00

在chainloader +1 之前加上 makeactive,怎么样呢 ?
windows的引导不能使用boot,grub的介绍中说了 chainloader +1 是链式引导的标志,用这个可以引导微软系列的所有系统 ,你的windwos是在 hd1上的第几个分区呢?
chouychou
帖子: 11
注册时间: 2006-06-30 9:42

#14

帖子 chouychou » 2006-07-13 22:15

henry_yue 写了:在chainloader +1 之前加上 makeactive,怎么样呢 ?
windows的引导不能使用boot,grub的介绍中说了 chainloader +1 是链式引导的标志,用这个可以引导微软系列的所有系统 ,你的windwos是在 hd1上的第几个分区呢?
前面加过makeactive阿
windows放我C 盘,根据硬盘信息(hd1,0)应该没错的
头像
henry_yue
帖子: 35
注册时间: 2006-07-11 18:25
联系:

#15

帖子 henry_yue » 2006-07-14 10:21

不知道该怎样帮你了,我也没招了,给你点grub的介绍看看吧,希望会有些帮助。
朋友,你装好linux后是不是每次启动后系统就默认进入到linux,想让它变成windows吗?请修改你的引导装入器吧(当然它不止这个功能)!由于现在的linux都喜欢用GRUB来引导,LILO已越来越少用了,所以我在这里主要给大家讲讲GRUB这个东东!!

##################
# GRUB的优点 #
##################
GRUB 是引导装入器(boot loader) -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。
GRUB 是一个很棒的boot loader。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:假设 GRUB 菜单配置不正确,但仍可以引导系统。哦,对了 -- GRUB 还有一个彩色引导菜单。

更令人惊讶的是,这是一个自由软件!!!



##################
# GRUB菜单 #
##################
先来看一个例子,这是位于/boot/grub/目录下的menu.lst文件。
此文件将在开机是产生一个菜单,包含有Debian linux,Windows2000,RedHat linux和 Mandrake linux,共四个选择项。我一共分了8个区,一个fat16(0x6),一个ntfs(0x7),三个ext2fs分区(0x83),一个swap分区(0x82)。ntfs用来装win2000,三个ext2fs装了三个linux,c盘fat16分区没有装任何东西。
#例子由此开始

######################
# #
# 一个GRUB configure 的例子 #
# #
######################

timeout 10
default 2


# --> Debian linux <--

title Debian linux
root (hd0,2)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
initrd /boot/initrd-2.2.18.gz


# --> Debian END <--

# --> Windows 菜单选项 <--

title Windows2000
root (hd0,0)
chainloader +1

# --> Winddows 结束 <--

# --> RedHat linux 菜单选项 <--

title RedHat linux
root (hd0,8)
chainloader +1 # 在硬盘主引导分区装了lilo,所以也用了chainloader。

# --> RedHat linux 结束 <--

# --> Mandrake linux 菜单选项 <--

title Mandrake linux
root (hd0,5)
kernel /boot/vmlinuz-2.4.3-20mdk root=/dev/hda6 ro
initrd /boot/initrd-2.4.3-20mdk.img

# --> Mandrake linux 结束 <--


#例子到此结束

以符号井"#"开头的行表示被注释掉,没有任何意义。

timeout表示默认等待的时间,这儿是10秒钟。超过10秒,用户还没有作出选择的话,系统将自动选择默认的操作系统。

默认的操作系统就是由default控制的。default后加一个数字n,表明是第n+1个。需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一个软驱是fd0,等等。所以,default 2 表示默认的操作系统在这儿是 Redhat linux。

接下来,正如你所想象的,title表示的是“Debian linux”菜单项。root (hd0,2)表示第一个硬盘,第三个分区。这儿的root 于linux的root分区及其不同,此root非彼root也!

在 Linux 中,当谈到 "root" 文件系统时,通常是指主 Linux 分区。但是,GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统,也可能不是。我们讨论的是 GRUB,需要指定 GRUB 的 root 分区。进入 root 分区时,GRUB 将把这个分区安装成只读型,这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区。

到目前为止,您可能会感到一点疑惑,因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。在 Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。

知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro说明/boot/vmlinuz-2.2.18 就是要载入的内核。后面的都是传递给内核的参数。root=/dev/hda3就是linux的硬盘分区表示法,ro是以readonly的意思。
initrd用来初始的linux image,并设置相应的参数。

是不是感觉很简单啊!再来看一看windows的定义段吧。
这里,我添加了一项来引导 Windows2000。要完成此操作,GRUB 使用了“链式装入器”(chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 win2000 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。

我的RedHat linux在硬盘主引导分区装了lilo,所以也用了chainloader。

GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试把“color light-gray/blue ”加在default语句的下面,下一次启动GRUB时,看看有什么变化,再试一试“color light-blue/red",惊喜吗? 有趣吧!

######################
# GRUB的交互性 #
######################




GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置,不必重新安装 GRUB。事实上,如有必要,只要更新 menu.lst 文件即可,一切将保持正常。

只有少数情况下,才需要将 GRUB 引导装入器重新安装到引导记录。首先,如果更改 GRUB root 分区的分区类型(例如,从 ext2 改成 ReiserFS),则需要重新安装。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由于它们来自更新版本的 GRUB,很有可能要重新安装引导装入器。其它情况下,可以不必理睬!

GRUB的最大的特点就是交互性特别强。在开机时,按一下“c”,将进入GRUB 控制台。显示如下:

GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub>

欢迎使用 GRUB 控制台。现在,再研究命令:
我将通过GRUB 控制台绕过lilo来启动RedHat linux,

grub> root (h

现在,按一次 Tab 键。如果系统中有多个硬盘,GRUB 将显示可能完成的列表,从 "hd0" 开始。如果只有一个硬盘,GRUB 将插入 "hd0,"。如果有多个硬盘,继续进行,在 ("hd2") 中输入名称并在名称后紧跟着输入逗号,但不要按 Enter 键。部分完成的 root 命令看起来如下:

grub> root (hd0,

现在,继续操作,再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按 Tab 键时得到以下列表:

grub> root (hd0, (tab,按tab一下键)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82

如您所见,GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解 GRUB 新奇的硬盘和分区命名语法,然后就可以继续操作了
grub> root (hd0,8)
现在已安装了 root 文件系统,到装入内核的时候了

grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]

您已经安装了 root 文件系统并装入了内核。现在,可以引导了。只要输入 "boot",Linux 引导过程就将开始。是不是很cool啊,GRUB的menu.lst更像一个linux下的脚本程序。


#####################
# GRUB启动盘 #
#####################
要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB 文件复制到该文件系统,最后运行 "grub" 程序,它将负责设置软盘的引导扇区。准备好了吗?

将一张空盘插入 1.44MB 软驱,输入:

# mke2fs /dev/fd0
创建了 ext2 文件系统后,需要安装该文件系统:

# mount /dev/fd0 /mnt/floppy
现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:

# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一个步骤,就能得到可用的引导盘。

在linux bash中,从 root 用户运行“grub”,该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。
在 grub> 提示符处,输入:

grub> root (fd0)
grub> setup (fd0)
grub> quit

现在,引导盘完成了。
如果要把GRUB装到硬盘上,也很容易。这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上,创建 /boot/grub 目录,并将 stage1 和 stage2 文件复制到该目录中,可以通过重新引导系统并使用引导盘,或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下,启动 GRUB,并用 root 命令指定 root 分区。例如,如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中,应输入 "root (hd0,4)"。接着,决定在哪里安装 GRUB -- 在硬盘的 MBR,或者如果与 GRUB 一起使用另一个“主”引导装入器,则安装在特定分区的引导记录中。如果安装到 MBR,则可以指定整个磁盘而不必指定分区,如下(对于 hda):

grub> setup (hd0)

如果要将 GRUB 安装到 /dev/hda5 的引导记录中,应输入:

grub> setup (hd0,4)

现在,已安装 GRUB。引导系统时,应该立即以 GRUB 的控制台方式结束(如果安装到 MBR)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。



小结:在这里只是介绍了 GRUB 的一部分。例如,可以使用 GRUB 来执行网络引导,引导 BSD 文件系统,或更多操作。另外,GRUB 有许多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,请阅读 GRUB 出色的 GNU 文档。只要在 bash 提示中输入 "info grub" 就可以阅读该文档。
回复