无忧启动论坛

标题: 讲grldr写入mbr到底是写在硬盘的哪里?? [打印本页]

作者: jankalon    时间: 2009-3-20 22:01
标题: 讲grldr写入mbr到底是写在硬盘的哪里??
我一直以为,别人常常说将grldr写入mbr,应该是写入mbr中的第一部分,即bootloader那里。。。。开机启动的时候,读取bootloader的信息进入grub。。。我一直以为这样子的。但是,我看来这个之后,(http://info.7fnet.com/Document/139/2007-06-E25F201F9014599E.html)才发现我错了。。
但是,我还是有点搞不懂。就是别人说的那个将grldr写入mbr。到底是将grldr写入硬盘的哪里呢????
作者: Climbing    时间: 2009-3-21 02:14
你给的链接介绍的是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    时间: 2009-3-21 12:45
这个···呵呵,精神可嘉
LZ莫非想仔细研究不点的启动方式?
作者: jankalon    时间: 2009-3-21 13:22
原帖由 <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,最近又想弄懂什么主分区,扩展分区等问题,这两个一结合起来就让我产生这些问题呢了。。。。
作者: jankalon    时间: 2009-3-21 13:23
原帖由 <i>likehanlei</i> 于 2009-3-21 12:45 发表
这个···呵呵,精神可嘉<br />
LZ莫非想仔细研究不点的启动方式?
<br />


这个嘛~~~前段时间在学习grub4dos,最近又想弄懂什么主分区,扩展分区等问题,这两个一结合起来就让我产生这些问题呢了。。。。
作者: aidixiao    时间: 2009-3-28 23:05
通过climbing版主的讲解,又明白了很多东西,谢谢版主!
作者: cnstars    时间: 2009-4-6 15:54
标题: 给个系统启动的流程
给个系统启动的流程:MBA->PBR->GRLDR->OS



作者: xt66010    时间: 2009-4-7 19:48
有点深.继续关注......
作者: shn    时间: 2009-4-21 12:41
哇!!好多贴啊。学到东西了。2楼和7楼的,多谢啊。原来模糊的东西现在有些清楚了
作者: shn    时间: 2009-4-21 12:43
再问一下。grub.mbr文件是不是可以在通过bootmgr文件再调用,从而可以进入grub模式呢?
作者: wlgwwg    时间: 2009-4-21 12:47
不错,一直以为跟DOS的启动过程一样的
作者: noskin    时间: 2009-4-21 15:45
感谢C版的解答,受益良多。
作者: Climbing    时间: 2009-4-22 00:08
标题: 回复 #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    时间: 2009-8-30 13:28
这贴不错,学习了...
作者: demonp    时间: 2009-8-30 17:46
原帖由 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    时间: 2009-8-31 14:14
原帖由 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




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3