字体:  

熟悉grub的进来帮个忙…………悬赏(200pb)

youminbuluo 发表于: 2008-7-23 22:49 来源: 远景无限博客

我现在要用grub4dos启动操作系统比如
title   XP Professional  
        rootnoverify (hd0,3)
        makeactive
        chainloader +1

boot
这样就会激活 (hd0,3)
有没有办法在完成启动后再把(hd0,0)给激活了,因为本来hd0,0是激活的,我想从这个盘开始引导

重赏之下,必有能人啊!

[ 本帖最后由 youminbuluo 于 2008-7-23 22:53 编辑 ]

最新回复

aronmalache at 2008-7-23 23:02:17
你说明白一点是怎么回事,我怎么不明白你要干什么?
youminbuluo at 2008-7-23 23:21:59
大概正常人都不能理解我为什么要这么做
title   *** system
        rootnoverify (hd0,3)
        makeactive
        chainloader +1
boot
我在menu.lst写入这个,就可以引导(hd0,3)上的操作系统,由于那个系统本身的原因,必须要求它被引导时所在分区处于激活状态,因此 makeactive是必须的 (比如要引导winxp,这个就可以不写)

我现在的要求就是,在完成这个引导任务之后,此时(hd0,3)被激活,下次启动就会从(hd0,3)启动了,这是我不希望看到的。因此我需要grub再把(hd0,0)给激活了,因为本来hd0,0是激活的,我想从这个盘开始引导

[ 本帖最后由 youminbuluo 于 2008-7-23 23:24 编辑 ]
youminbuluo at 2008-7-23 23:25:30
这个确实困难,我认为,grub也是的,功能虽然多,每句话意思我都知道,就是不知道怎么组合!!

版主快来啊

[ 本帖最后由 youminbuluo 于 2008-7-23 23:46 编辑 ]
aronmalache at 2008-7-23 23:54:49
首先需要确认你的grub是安装在MBR上的,如果没有安装在MBR上,可能有些时候会出些问题。其中的makeactive是本次执行中激活硬盘分区。如果是安装在MBR上的grub,则它可以在启动时首先于活动分区内的boot loader装入内存,获得系统控制权。此时是否激活的分区只是看被引导的系统是否需要,比如windows一般是有这个需要的,所以用makeactive语句。比如你这里的makeactive(hd0,3)是代表激活第一块硬盘上的第四个区,而只要grub写入了第一块硬盘(hd0)的MBR,就无须再考虑重新激活(hd0,0)
如果grub不再hd0的MBR上,那么我不能保证grub引导的百分之百成功。因为它需要自己所在的分区是被激活的,比如grub安装在hd0,1,那么如果使用了makeactiv(hd0,3),就可能造成引导失效。这和所使用grub关系比较密切,也和不同的硬件情况有些关系。一直是grub的一个问题,没有办法重新激活自己,如果使用了grub2,则可以避免此类问题,它会自动激活自己。
(如果是安装在hd0,0,就相当于安装在hd0,即本硬盘的MBR上)
youminbuluo at 2008-7-24 00:04:49
确实说得有道理啊………………
茅塞顿开,给了我新的希望

一直是grub的一个问题,没有办法重新激活自己,如果使用了grub2,则可以避免此类问题,它会自动激活自己。

这个还有4dos的么??

恩,如果我直接把grub写入MBR,这就相当于直接写在整个硬盘上了,是不是??
此时如果再往C盘安装windows估计MBR的grub又会没有了,是这么回事么……………………
aronmalache at 2008-7-24 00:15:18
grub4dos只是0.95或者0.9x版的GRUB,grub2是没有4dos的,至少现在是这样。
可以简单的认为如果把Grub写入MBR就是写入整个硬盘,但是并不准确,它是硬盘的一个特殊区域,BIOS在执行POST过程之后会自动读取MBR里面的信息,然后根据里面的信息讲控制权移交。
如果重新安装Windows(注意不是用ghost的)到系统任何一个主分区,它都会自动重写MBR内的主引导记录,grub的记录自然就没了,即使是不在MBR,grub也不能正常启动。这时可以通过各种发行版本的Linux LiveCD进行恢复,很简单的。
sheji at 2008-7-24 01:31:34
上面aronmalache说的都不错。

如果楼主的grub是写在激活分区的(一般是hd0,0),理应可以启动任何硬盘的任何分区上的任何系统(包括单一分区上的多系统)。
所以就不明白楼主为什么会非要要求这个hd0,3处于激活状态?猜想你这个分区的系统是ghost出来的,或者自己在安装的时候没有计划好应有的盘符而现在需要解决应程序的路径问题?对于后者,就算你改变了激活顺序也不能重排盘符。前者倒是可以。但改变激活,似乎都需要做重新引导的动作。(可以启动grub,载入工具激活需要分区,重启运行。下次还得换回去。)这种情况还是重装该分区系统为好。
sheji at 2008-7-24 01:38:56

QUOTE:

原帖由 youminbuluo 于 2008-7-24 00:04 发表
此时如果再往C盘安装windows估计MBR的grub又会没有了,是这么回事么…
如果你把grub安装在C盘上,那你就可以简单的用拷贝方法备份出grub相关文件(很小的),在C盘安装了新系统以后,可以在该(任何)系统界面立即复制过去即成,不必动用别的工具。
aronmalache at 2008-7-24 02:18:13
楼上说的文件恢复方法并不是很准确,因为文件恢复了,MBR上的信息也没有被恢复,仍然是需要在上面安装grub的。
diony at 2008-7-24 08:40:21

QUOTE:

原帖由 youminbuluo 于 2008-7-23 23:21 发表
在完成这个引导任务之后,此时(hd0,3)被激活,下次启动就会从(hd0,3)启动了
不太理解楼主的意思。尤其是这句话(除非grub4dos和grub有区别)。

那个makeactive不是对硬件的操作,也不会真的把(hd0,3)设为active状态,如果本来的活动分区是(hd0,0),启动之后的实际活动分区也仍然是(hd0,0),何来“下次启动就会从(hd0,3)启动”呢?
youminbuluo at 2008-7-24 08:40:28
我现在用那个grubinst把grub一代写入到mbr就可以了
真的是非常感谢,看你的一个回帖,胜看别人的10个主题帖啊

PS:昨天经我测试,引导win,makeactive是不需要写的
youminbuluo at 2008-7-24 08:47:08

如果你用的是linux,那估计本来grub就写在MBR了,自然每次系统从MBR读取,自动搜索到grub的配置文件,不用管哪个分区是激活的

而我以前是MBR先将控制引导权交给第一个分区的第一个扇区,然后通过boot.ini中的相关语句调用grldr,然后才出现grub菜单,这样做就必须保证第一个分区是激活的啊

到此楼为止,斑竹给了100pb  ;shej 20 bp; diony 10 pb(忘了发消息了)
禁止灌水!



[ 本帖最后由 youminbuluo 于 2008-7-24 08:54 编辑 ]
youminbuluo at 2008-7-24 08:57:25
现在还有一些很小的疑问,
1.安装win的时候,MBR被写入的内容是不是就是让系统去找激活的分区,再由那个激活的分区的第一个扇区引导,如果是win,第一扇区就会去找ntldr?
而安装grub的时候,则MBR写入的内容是让系统去各个分区查找grldr,再从grldr引导?
2.规定每个分区起始扇区,终止扇区,类型的东西写在哪里?貌似是主引导记录(MBR)中有一个分区表(MBR也就是占用一个扇区,512B),定义主分区和扩展分区的分区信息,那为什么我们安装grub或者重新安装win的时候,MBR改变了,而分区信息没有丢失,难道那MBR中引导信息没用那么多字节,还留了一些给分区表用?

[ 本帖最后由 youminbuluo 于 2008-7-24 09:09 编辑 ]
tooth_oracle at 2008-7-24 10:26:53
学习中。
diony at 2008-7-24 13:02:17

QUOTE:

原帖由 youminbuluo 于 2008-7-24 08:47 发表

如果你用的是linux,那估计本来grub就写在MBR了,自然每次系统从MBR读取,自动搜索到grub的配置文件,不用管哪个分区是激活的

而我以前是MBR先将控制引导权交给第一个分区的第一个扇区,然后通过boot.ini中的相 ...
给我干啥?我就是路过来灌水的……
sheji at 2008-7-24 13:33:43

QUOTE:

原帖由 aronmalache 于 2008-7-24 02:18 发表
楼上说的文件恢复方法并不是很准确,因为文件恢复了,MBR上的信息也没有被恢复,仍然是需要在上面安装grub的。
我是在“如果grub安装在C分区”的前提下,和MBR无关,即不从MBR来引导grub。只有这种方式,才可以实现无论在任何硬盘任何分区上安装什么操作系统都不会影响到别的系统的正常引导及运行。
sheji at 2008-7-24 13:47:05
又从头看了一遍,发现我可能理解错了楼主的关于“激活”的含义。
我理解成:激活分区的引导分区。
如果是我理解错了,那楼主的问题,就会变成是一个不是问题的问题。就是原本就没有问题,有问题的仅仅是grub的语句而已。
winvistartm at 2008-7-24 15:43:37
我的XP分区在(hd0,1),不是激活分区,从来不用加makeactive参数。
chainloader (hd0,1)+1
就这么简单!
个人理解只要可以启动grub,后面的一切不再是问题
aronmalache at 2008-7-24 16:13:44
makeactive能大大提高兼容性,确实有很多情况不使用makeactive会带来很多麻烦。
下面我来介绍一下MBR处的引导过程吧:
通常情况下i386系列的计算机都要有一个BIOS芯片,里面是基本输入输出系统,在启动时BIOS首先对硬件加电,然后执行POST过程,即加电自检过程,也有书籍翻译为自举。紧接着系统是从系统的引导磁盘进行的,比如说第一块硬盘。
一个引导用的磁盘必须配置一个包含引导记录的逻辑块,而每个硬盘通常可以设置几个这样的记录,其中一个在硬盘开始的,叫做主引导记录(MBR),如果有主引导记录,优先级高于其他引导记录。这种单独的引导记录只有512B大小,它的结构如下:
十六进制地址               内容
0x000     0x002         记录跳转到0x0XX的位置
0x033     ...                磁盘参数(被BIOS使用)
0x0XX     0x1fd          引导程序
0x1fe      0x1ff           0xaa55(BIOS需要的一个magic number)
在执行过POST之后,BIOS会把引导程序从磁盘把引导程序装入内存并交接控制权,其中,引导程序的位置之所以在上面被标记为0x0XX,是因为Linux的引导系统和DOS的不同,Linux引导工具(Lilo,Grub)使用的位置是0x03e,而DOS系列(包括Windows)使用的是0x01e。
一般情况下这里的记录只是引导程序的一部分,因为这里的空间实在有限,现在有很多附加功能的引导程序(比如grub,ntldr之类的)都会在MBR上的这段程序执行后再读取自己在硬盘其他部分写入的文件,一般ntldr的附加文件就是在系统盘根目录下的ntldr文件(系统、隐藏、只读属性),而grub一般是在/boot分区里面,但是grub4dos为了合适windows的使用,也创建一个grldr文件,但是很多附加信息都是保存在<system root>/grub文件夹下的。只有在所有的这些都装入内存之后,才能进入正常的引导。这也是有些朋友Windows出问题提示ntldr文件丢失的原因,之所以能够有提示,是因为MBR上的记录没有丢失,而是丢失了MBR上nt loader所要加载的ntldr文件。可以引导,但不知道下一步要做什么。
sheji at 2008-7-25 03:02:54
嗯,楼上说的对。

但也正因为几乎所有系统都喜好往有限的、重要的、也是病毒注意的这个MBR弹丸之地写程序,以至于等到出了问题不能用简单的方法来恢复MBR(不注意及时备份分区信息的行为是大量的存在的,而且多少个月后再找出来也不一定就会那么容易和顺利),所以我个人都将这些行为统称为垃圾行为,并予以一视同仁的清空,恢复到“简单MBR”状态。(我有事儿没事儿都可以用分区工具清空一下MBR,比如我怀疑有病毒侵入)

接着就如同19楼说的那样,启动任何系统都将不是问题。(还用得着解决问题吗?)