无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6718|回复: 15
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-20 22:01:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一直以为,别人常常说将grldr写入mbr,应该是写入mbr中的第一部分,即bootloader那里。。。。开机启动的时候,读取bootloader的信息进入grub。。。我一直以为这样子的。但是,我看来这个之后,(http://info.7fnet.com/Document/139/2007-06-E25F201F9014599E.html)才发现我错了。。
但是,我还是有点搞不懂。就是别人说的那个将grldr写入mbr。到底是将grldr写入硬盘的哪里呢????
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合而为一段统一的引导代码,当然,你也可以将它拆开并安装到对应分区的引导扇区中。
回复

使用道具 举报

3#
发表于 2009-3-21 12:45:58 | 只看该作者
这个···呵呵,精神可嘉
LZ莫非想仔细研究不点的启动方式?
回复

使用道具 举报

4#
 楼主| 发表于 2009-3-21 13:22:37 | 只看该作者
原帖由 <i>likehanlei</i> 于 2009-3-21 12:45 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=1643082&ptid=139082" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
这个···呵呵,精神可嘉<br />
LZ莫非想仔细研究不点的启动方式?
<br />


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

使用道具 举报

5#
 楼主| 发表于 2009-3-21 13:23:40 | 只看该作者
原帖由 <i>likehanlei</i> 于 2009-3-21 12:45 发表
这个···呵呵,精神可嘉<br />
LZ莫非想仔细研究不点的启动方式?
<br />


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

使用道具 举报

6#
发表于 2009-3-28 23:05:18 | 只看该作者
通过climbing版主的讲解,又明白了很多东西,谢谢版主!
回复

使用道具 举报

7#
发表于 2009-4-6 15:54:23 | 只看该作者

给个系统启动的流程

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


回复

使用道具 举报

8#
发表于 2009-4-7 19:48:59 | 只看该作者
有点深.继续关注......
回复

使用道具 举报

9#
发表于 2009-4-21 12:41:30 | 只看该作者
哇!!好多贴啊。学到东西了。2楼和7楼的,多谢啊。原来模糊的东西现在有些清楚了
回复

使用道具 举报

10#
发表于 2009-4-21 12:43:47 | 只看该作者
再问一下。grub.mbr文件是不是可以在通过bootmgr文件再调用,从而可以进入grub模式呢?
回复

使用道具 举报

11#
发表于 2009-4-21 12:47:56 | 只看该作者
不错,一直以为跟DOS的启动过程一样的
回复

使用道具 举报

12#
发表于 2009-4-21 15:45:54 | 只看该作者
感谢C版的解答,受益良多。
回复

使用道具 举报

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环境。
回复

使用道具 举报

14#
发表于 2009-8-30 13:28:56 | 只看该作者
这贴不错,学习了...
回复

使用道具 举报

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才行?
回复

使用道具 举报

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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-11 06:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表