查看: 7995|回复: 15

讲grldr写入mbr到底是写在硬盘的哪里??

[复制链接]

jankalon

jankalon

当前离线

积分245

IP卡

狗仔卡

电梯直达

1#

发表于 2009-3-20 22:01:55

|

只看该作者

|倒序浏览

|阅读模式

加入VIP会员,获无忧币,赠积分,送勋章,下载无限制,获论坛最高级会员权限 !

我一直以为,别人常常说将grldr写入mbr,应该是写入mbr中的第一部分,即bootloader那里。。。。开机启动的时候,读取bootloader的信息进入grub。。。我一直以为这样子的。但是,我看来这个之后,(http://info.7fnet.com/Document/139/2007-06-E25F201F9014599E.html)才发现我错了。。

但是,我还是有点搞不懂。就是别人说的那个将grldr写入mbr。到底是将grldr写入硬盘的哪里呢????

收藏0

支持0

反对0

回复

使用道具

举报

提升卡

沉默卡

喧嚣卡

变色卡

千斤顶

显身卡

Climbing

Climbing

当前离线

积分7792

IP卡

狗仔卡

2#

发表于 2009-3-21 02:14:18

|

只看该作者

你给的链接介绍的是GNU Grub Legacy的启动过程(或者说是传统的启动过程),grub4dos与此略有不同。

当然,我下面所说的可能也不是很准确,但大体应该差不多。

所谓的将grldr写入MBR,只是将grub4dos的引导代码写入了MBR(严格来说,是将引导代码写入了硬盘的0磁道(占用0磁道前面的18个扇区,而传统的MBR只是占用了一个扇区),而grub4dos的主体grldr文件则存放在硬盘的某个可识别分区的根目录下,这段引导代码的作用就是查找各分区的根目录下是否有grldr文件,如有,则加载它并进入grub4dos环境。grub4dos本身相当于一个小的操作系统,传统的操作系统(例如DOS)的加载过程是:MBR(主引导代码) -> PBR(分区引导扇区) -> 操作系统内核,而grub4dos的启动过程是:MBR引导代码 -> grldr(内核)。

关于GRUB Legacy的启动过程,与grub4dos不同处在于,它将自己的启动过程分成了三个阶段:MBR(stage1) -> stage1.5 -> stage2。其中,MBR + Stage 1.5相当于grub4dos的MBR(写入位置也都是在硬盘的0磁道,也不止占用一个扇区),其中,stage 1.5主要是分区访问代码。而stage2则相当于grldr。grub legacy相比grub4dos来说,它的缺陷在于它写入0磁道的stage 1.5一次写入只支持一种分区类型,也就是stage2所在的那个分区类型(例如fat或ext),因此,grub legacy的stage2所在的分区是固定的,stage2无法任意移动,而grub4dos的MBR代码则包括了所有可支持分区的访问代码(相当于将所有的stage 1.5合并到了一起),因此,它同时支持各种分区格式,因此,grldr可以放到任意可支持分区的根目录下。

补充内容:我参考了下面的链接(GNU GRUB Legacy官方文档)的内容:

http://www.gnu.org/software/grub/manual/grub.html#Images

发现我前面讲的果然有一些问题:

1、grub legacy的stage1正好是512字节,它既可以写入MBR,也可以写入PBR(分区引导扇区)。

2、当stage1安装到mbr时,stage 1.5既有可能安装在mbr后面的0磁道某扇区中,也有可能安装在某分区的引导扇区上,当然也有可能以文件的形式存放在硬盘某分区上。至于具体是如何安装的(安装到哪里),文档介绍不详。stage1此时的唯一作用就是加载并执行stage 1.5,stage1与stage1.5的区别在于,stage1不识别分区文件系统,而某个stage1.5可以识别某一个文件系统(有多个stage1_5文件用来分别识别多个文件系统)。stage1内部只能记录它要加载的引导代码的块列表(扇区列表,也就是blocklist),而stage1.5则可以从文件系统中加载文件。

3、当stage1安装到PBR(作为分区的引导扇区)时,它将直接加载Stage2(跳过stage 1.5),这时候它内部记录的是stage2存在硬盘上对应的块列表(blocklist)。

当然,我的理解还是可能不完全准确,总之,这个过程是挺复杂的,而grub4dos则极大的简化了这个过程,将stage1和所有的stage 1.5合而为一段统一的引导代码,当然,你也可以将它拆开并安装到对应分区的引导扇区中。

回复

使用道具

举报

显身卡

likehanlei

likehanlei

当前离线

积分1132

IP卡

狗仔卡

3#

发表于 2009-3-21 12:45:58

|

只看该作者

这个···呵呵,精神可嘉

LZ莫非想仔细研究不点的启动方式?

回复

使用道具

举报

显身卡

jankalon

jankalon

当前离线

积分245

IP卡

狗仔卡

4#

楼主|

发表于 2009-3-21 13:22:37

|

只看该作者

原帖由 likehanlei 于 2009-3-21 12:45 发表

这个···呵呵,精神可嘉

LZ莫非想仔细研究不点的启动方式?

这个嘛~~~前段时间在学习grub4dos,最近又想弄懂什么主分区,扩展分区等问题,这两个一结合起来就让我产生这些问题呢了。。。。

回复

使用道具

举报

显身卡

jankalon

jankalon

当前离线

积分245

IP卡

狗仔卡

5#

楼主|

发表于 2009-3-21 13:23:40

|

只看该作者

原帖由 likehanlei 于 2009-3-21 12:45 发表

这个···呵呵,精神可嘉

LZ莫非想仔细研究不点的启动方式?

这个嘛~~~前段时间在学习grub4dos,最近又想弄懂什么主分区,扩展分区等问题,这两个一结合起来就让我产生这些问题呢了。。。。

回复

使用道具

举报

显身卡

aidixiao

aidixiao

当前离线

积分1706

IP卡

狗仔卡

6#

发表于 2009-3-28 23:05:18

|

只看该作者

通过climbing版主的讲解,又明白了很多东西,谢谢版主!

回复

使用道具

举报

显身卡

cnstars

cnstars

当前离线

积分711

IP卡

狗仔卡

7#

发表于 2009-4-6 15:54:23

|

只看该作者

给个系统启动的流程

给个系统启动的流程:MBA->PBR->GRLDR->OS

回复

使用道具

举报

显身卡

xt66010

xt66010

当前离线

积分110

IP卡

狗仔卡

8#

发表于 2009-4-7 19:48:59

|

只看该作者

有点深.继续关注......

回复

使用道具

举报

显身卡

shn

shn

当前离线

积分1733

IP卡

狗仔卡

9#

发表于 2009-4-21 12:41:30

|

只看该作者

哇!!好多贴啊。学到东西了。2楼和7楼的,多谢啊。原来模糊的东西现在有些清楚了

回复

使用道具

举报

显身卡

shn

shn

当前离线

积分1733

IP卡

狗仔卡

10#

发表于 2009-4-21 12:43:47

|

只看该作者

再问一下。grub.mbr文件是不是可以在通过bootmgr文件再调用,从而可以进入grub模式呢?

回复

使用道具

举报

显身卡

wlgwwg

wlgwwg

当前离线

积分1548

IP卡

狗仔卡

11#

发表于 2009-4-21 12:47:56

|

只看该作者

不错,一直以为跟DOS的启动过程一样的

回复

使用道具

举报

显身卡

noskin

noskin

当前离线

积分100

IP卡

狗仔卡

12#

发表于 2009-4-21 15:45:54

|

只看该作者

感谢C版的解答,受益良多。

回复

使用道具

举报

显身卡

Climbing

Climbing

当前离线

积分7792

IP卡

狗仔卡

13#

发表于 2009-4-22 00:08:45

|

只看该作者

回复 #10 shn 的帖子

不是grub.mbr,而是grldr.mbr。

是的,你可以通过ntldr/boot.ini、bootmgr/bcd再次调用grldr.mbr,这相当于再次执行grub4dos的mbr引导代码,然后再次进入grub4dos环境(也正因为这个问题,所以才会出现逻辑不严密下的死循环情况),类似的,你也可以在ntldr/boot.ini中直接调用grldr(因为grldr前面的18个扇区就相当于grldr.mbr),但这种方式不适合于bootmgr。总之,启动grub4dos的方式是多种多样的,你可以很容易的从另一个引导管理器中进入grub4dos环境。

回复

使用道具

举报

显身卡

binghuoxk

binghuoxk

当前离线

积分14990

IP卡

狗仔卡

14#

发表于 2009-8-30 13:28:56

|

只看该作者

这贴不错,学习了...

回复

使用道具

举报

显身卡

demonp

demonp

当前离线

积分71

IP卡

狗仔卡

15#

发表于 2009-8-30 17:46:48

|

只看该作者

原帖由 Climbing 于 2009-4-22 00:08 发表

不是grub.mbr,而是grldr.mbr。

是的,你可以通过ntldr/boot.ini、bootmgr/bcd再次调用grldr.mbr,这相当于再次执行grub4dos的mbr引导代码,然后再次进入grub4dos环境(也正因为这个问题,所以才会出现逻辑不 ...

Climbing 斑竹,我正好也有一个类似的问题,为什么在ntldr/boot.ini方式下无法直接调用bootmgr呢?

是不是nt60的PBR在调用bootmgr时做了什么特别的处理。

如果是这样,用ntldr/boot.ini引导win7或VISTA是不是必须调用pbr才行?

回复

使用道具

举报

显身卡

yichya

yichya

当前离线

积分16720

IP卡

狗仔卡

16#

发表于 2009-8-31 14:14:40

|

只看该作者

原帖由 demonp 于 2009-8-30 17:46 发表

Climbing 斑竹,我正好也有一个类似的问题,为什么在ntldr/boot.ini方式下无法直接调用bootmgr呢?

是不是nt60的PBR在调用bootmgr时做了什么特别的处理。

如果是这样,用ntldr/boot.ini引导win7或VISTA是不 ...

据说这是因为老啤酒盖子说:在一个NTLDR下面再引导一个NTLDR没什么用.这也导致了在NTLDR/boot.ini下不能直接加载setupldr.bin

回复

使用道具

举报

显身卡