无忧启动论坛

标题: 如何把grldr放置到扩容后的MBR中? [打印本页]

作者: pppfj    时间: 2013-9-28 20:14
标题: 如何把grldr放置到扩容后的MBR中?
本帖最后由 pppfj 于 2013-9-28 21:02 编辑

    听说win7的分区软件在分区时为硬盘的MBR保留了2048个扇区,因此有了把整个grldr文件“塞进”MBR的想法,但不知如何去做。会使用磁盘编辑软件直接编辑磁盘扇区,是把grldr.mbr文件直接写入MBR的前18个扇区(注:不覆盖第一扇区的分区表),从第19扇区开始放置grldr文件?还是直接从第1扇区(注:不覆盖第一扇区的分区表)开始放置grldr文件?如果都不是,该如何做?
    与ntldr相比,grldr文件不受操作系统保护,更容易被他人误删,感觉还是放入MBR更安全。
    望不吝赐教,谢谢!
作者: 不点    时间: 2013-9-28 21:41
这没有技术困难。主要是应该注意安全,谨慎行事。

建议安装 wee63.mbr 或 wee127.mbr 到硬盘的最开头。有很多工具可以安装 wee 到 mbr。比如,bootice,weesetup 等。安装程序会自动保持分区表不变,比较安全。如果手动用十六进制工具进行操作,那就有可能因疏忽大意而毁掉分区表,造成不可挽回的损失。你得保证 MBR 上有足够的空间。如果 MBR 上没有足够的空间,那么你后续手动写入的 GRLDR 就会破坏硬盘分区的数据结构,那就糟糕透了。

wee63.mbr 占据 63 扇区。硬盘最开头的 63 扇区被占用。wee 的安装工具软件通常支持 wee63.mbr 的安装。

wee127.mbr 占据 127 扇区。硬盘最开头的 127 扇区被占用。wee 的安装工具软件通常不支持 wee127.mbr 的安装。因此,你就不要用它了。

然后,你用十六进制工具软件或者 dd 之类的命令,将 GRLDR 或 GRUB.EXE 文件放在 MBR 中剩余的空间里。随便放在哪里都可以。比如,你就放在扇区号 128 的位置,就是说,放置在从 (hd0)128+1 开始的连续空间中便可。

假定 grldr (或 grub.exe)占用 1024 扇区,那么,你的 wee 菜单中就可以用如下一行命令来执行 grldr (或 grub.exe):

(hd0)128+1024

grldr 和 grub.exe 都是 wee 的命令,直接执行它们便可。其实,NTLDR 和 BOOTMGR 也是 wee 可以认出的命令,因此你也可以用同样的方法来启动 NTLDR 和 BOOTMGR。不过,启动 NTLDR 和 BOOTMGR 之前需要用 root 或 rootnoverify 命令设置当前默认分区为 Windows 启动分区(就是 BOOT.INI 或者 BCD 所在的分区),否则,NTLDR 或 BOOTMGR 就可能找不到启动所需的其他文件,导致启动失败。

由于其中有手动操作的步骤,因此,一定要小心谨慎啊!
作者: pppfj    时间: 2013-9-28 22:51
    太感动了!为了一个小小问题,不点大师码了这么多字,既全面,又细致,处处体现出关心。不但欣赏您的作品,更佩服您的人品。
    说到编辑分区表的事,不久之前确实办过一次蠢事。那次在windows下直接用winhex把grldr.mbr写进了mbr的前18个扇区,瞬间就蓝屏了,而且还没有采取备份mbr的措施。蓝屏的刹那,知道自己错了,把分区表给覆盖了。费老劲儿了才把分区表重建起来,幸资料未受损。您的教导是对的,确实要慎之又慎。
    从您介绍的方法来看,利用了wee的直接扇区读取能力,我没有想到这个办法。只是有一个疑问:记得在论坛里看到过一个帖子,说grldr的前半部分就是grldr.mbr,为什么直接把grldr写入从1扇区开始的、空间足够大的mbr(保留分区表)不行呢?grldr.mbr不是可以找到grldr吗?
    谢谢!
作者: 不点    时间: 2013-9-29 00:43
能回答的问题,通常大家都愿意回答。不用谢。

grldr 的开头有 16 扇区是用来寻找 grldr 的。这具有历史的原因。NTLDR 通过 boot.ini 加载 GRLDR 时,只能加载 16 个扇区,不能完整加载 grldr 文件。所以,我们需要安排 16 个扇区的引导头,用来搜索 GRLDR 文件,找到后把它完整加载到内存。grldr.mbr 后来独立出来了,其大小是 18 个扇区,专门用来放在 MBR 上,搜索和加载 grldr 文件。然而 grldr 的头部仍然是 16 扇区,并且 grldr 的第一扇区中没有放置分区表的位置了,在分区表的位置上是 grldr 的代码。因此,grldr 的头部已经不能用于 MBR 了,它只能与 GRLDR 构成一个整体而在 boot.ini 中被 NTLDR 使用。用于 MBR 的,只能是 grldr.mbr 文件。

grldr.mbr 的功能是在硬盘各分区根目录下查找 grldr 文件并启动它。这是个很简单的功能,它只有 18 扇区,源代码全都是用 assembly 写成的。它不能用 (hd0)xxxxxx+yyyyyy 的方式加载引导扇区文件,它甚至也不能加载位于某个子目录中的 grldr 文件(只能寻找根目录下的 GRLDR 文件)。

wee63.mbr 就不同了。它实际上是一个简化了的 grub4dos 系统,它具有命令行和简单的菜单功能(就如同一个简单的操作系统那样)。对比一下,grldr.mbr 是没有命令行的,也没有菜单。wee63.mbr 的源代码使用了 assembly 和 C 两种编程语言。编译的结果占用 63 扇区,比 18 扇区大了很多。

结论是,grldr.mbr 无法满足你的需要。需要使用 wee63.mbr 或 wee127.mbr 才行。

目前,wee127.mbr 主要是给 map 命令增加了磁盘仿真功能。比如,你可以用 wee127.mbr 建立一个虚拟软盘。

如果你的 MBR 上的空闲扇区足够多,能够放得下一个软盘 IMG 的话,你就可以用 wee127.mbr 来启动这个软盘映像了。

作者: 2012_willylin    时间: 2013-9-29 02:18
不点 发表于 2013-9-29 00:43
能回答的问题,通常大家都愿意回答。不用谢。

grldr 的开头有 16 扇区是用来寻找 grldr 的。这具有历史的 ...

這個解釋滿精辟的,平常都是把grldr直接給裝去MBR也沒注意是幾個sector,先標記有空再細節看清楚。
所謂的把grldr 放到擴容後的MBR是指GPT裡的「protective MBR」嗎!?Legacy MBR (LBA 0)
作者: chenall    时间: 2013-9-29 10:44
用最新版weesetup

把grldr文件放在同目录下,扫行命令就会把grldr安装到mbr,当然了MBR需要有足够大的空间。
weesetup -d (hd0) -g grldr
作者: 不点    时间: 2013-9-29 12:14
weesetup 即使使用 --force 之类的参数,似乎也有拒绝写入引导记录的情况发生。比如,前次我遇到的 diskgen 的 bug,它创建了一个非法的分区项目,分区 (hd0,3) 的 16 字节分区表项以 55 AA 开头,导致 weesetup 拒绝安装。

拒绝安装是对的。但是,拒绝安装的时候,应该打印出分区表,让用户明白拒绝的原因。否则,没有提示信息,用户一头雾水,还以为安装成功了呢。

weesetup 也应该有个文档吧,建议 chenall 把 weesetup 的文档放在网上,供查阅。


作者: pppfj    时间: 2013-9-29 13:06
2012_willylin 发表于 2013-9-29 02:18
這個解釋滿精辟的,平常都是把grldr直接給裝去MBR也沒注意是幾個sector,先標記有空再細節看清楚。
所謂 ...

原来的mbr默认大小只有63个扇区,“扩容后的MBR”本意指:采取手工编辑分区表,或采用win7的分区软件进行分区,增大硬盘前部保留扇区。仍旧是MBR磁盘体系,非gpt体系。
作者: pppfj    时间: 2013-9-29 13:52
不点 发表于 2013-9-29 00:43
能回答的问题,通常大家都愿意回答。不用谢。

grldr 的开头有 16 扇区是用来寻找 grldr 的。这具有历史的 ...

    大师的讲解,更加深了对grldr引导过程的理解。
    “安排 16 个扇区的引导头,用来搜索 GRLDR 文件,找到后把它完整加载到内存。”这句话没有理解透彻。一旦把grldr“塞进”增容后的第一分区前的保留扇区(mbr区)中后,因无文件系统,就不存在“文件”的概念了,“搜索grldr文件后把它完整加载到内存”就不太好理解了。但从大师回复来看,MBR区的grldr肯定是可以启动的。
    我猜想过程是不是这样:16 个扇区的引导头不但能够从所支持的几种文件系统中搜索到并加载grldr的剩余部分,而且也能够从自身所处扇区位置判断出grldr所处位置,一旦判断在MBR区,就按照“grldr”连续存放的逻辑,把剩余部分读入,并转移控制权?
    这样的猜测好像也不对,因为从大师的指导中可以看出,位于mbr区的grldr完全载入载入内存,是通过wee的(hd0)xxx+???命令实现的,“16 个扇区的引导头”不需要再搜索了。这就产生了另外一个疑问:当wee转移控制权的时候,是转移给“16 个扇区的引导头”,让引导头在搜索一把,还是转移给grldr真正的功能部分?
    第2个问题:当通过wee加载并启动了grldr后,内存中的wee是不是就被grldr覆盖掉,消失了?亦或虽然没有消失,但再也无法发挥作用,所占的内存随时可能被别的程序或命令覆盖?
    如果懂得编程的话,上面的问题读一下源代码应该就知道个大概了,但本人只是一个非电脑行业的“外行”,读不了代码,所以有此疑问。有机会和大师近距离交流非常难得,有点刨根问底了。见谅!
作者: pppfj    时间: 2013-9-29 13:55
本帖最后由 pppfj 于 2013-9-29 14:11 编辑
chenall 发表于 2013-9-29 10:44
用最新版weesetup

把grldr文件放在同目录下,扫行命令就会把grldr安装到mbr,当然了MBR需要有足够大的空间 ...


C大也来了,感动,感谢!
您指导的方法,容后测试,再行回复。这样的方法更简便易行,避免了手工编辑磁盘扇区的风险。
几位前辈殚尽竭虑,呕心沥血,成效卓著,向您及其他为开源软件默默奉献的大师们致以崇高的敬意!
作者: 不点    时间: 2013-9-29 16:34
pppfj,大家都是 “草根”、“屁民”,谁也不比谁 “高一头、宽一肩膀”,只是 “爱好有差别、行业有不同” 而已,不必太客气。

grldr 头部的 16 扇区以及 grldr.mbr 的 18 扇区,都只能搜索文件系统中的 GRLDR 文件,不能按照扇区编号去加载 GRLDR 文件。你可以理解为,它的代码量很小,功能很有限。

wee 按照扇区序列加载整个 grldr 到内存之后,grldr 就不需要再搜索自己了。grldr 就直接定位到自己的内核部分,并启动它。grldr 内核一旦接管控制,以前的引导代码(包括 wee 以及 GRLDR 的头部代码)就废弃了,就像火箭把卫星送入轨道之后,火箭就扔掉了。

多级火箭的加载方法,看起来有些 “费劲”。或许有人希望只用一个较大的 wee1024.mbr 就完成 grldr 的加载。这当然是可能的,只是目前还没有人去这么做。现成的东西,比如馒头、香蕉,都可以马上吃掉。而小麦需要进行加工才能食用,那属于 “未来” 的事情。“未来” 怎么样,那是很有变数的,需要有人去做额外的工作才能得到。我们还是主要着眼于 “现实” 吧,“解决问题” 本身就是一个很 “现实” 的事情,不能等到 10 年后去解决。

其实,从某种程度上说,wee127.mbr 就够用了。也就是说,如果你安装了 wee127.mbr,它有比较完善的 map 功能,这样也就基本上不需要 grldr 了。当然,如果你需要显示国际化的 UTF-8 字符,或者其他一些高级功能,那还是需要 GRLDR 的。


作者: asqw101451    时间: 2013-10-18 19:05
无忧的环境就是好啊,大家很热心,虽然不太懂,支持一下。
作者: 天涯海角1216    时间: 2013-10-18 21:39
用最原始的stage1加载stage2,再加载任意位置GRLDR。。。
只需2个扇区文件去加载grldr。。。
作者: 天涯海角1216    时间: 2013-10-18 21:53
本帖最后由 天涯海角1216 于 2013-10-18 22:09 编辑

给个做好的,恢复到MBR,注意不要修改分区表。
将grldr从偏移0X2000开始到最后写入硬盘2号扇区以后。。。。

(即把头部16个扇区去掉,用stage1-2引导)

333.jpg (99.59 KB, 下载次数: 160)

333.jpg

stage1 2.rar

779 Bytes, 下载次数: 20, 下载积分: 无忧币 -2


作者: pppfj    时间: 2013-10-18 23:34
天涯海角1216 发表于 2013-10-18 21:53
给个做好的,恢复到MBR,注意不要修改分区表。
将grldr从偏移0X2000开始到最后写入硬盘2号扇区以后。。。。 ...

好,容后测试,再行汇报!
作者: pppfj    时间: 2013-10-19 17:10
天涯海角1216 发表于 2013-10-18 21:53
给个做好的,恢复到MBR,注意不要修改分区表。
将grldr从偏移0X2000开始到最后写入硬盘2号扇区以后。。。。 ...

天涯斑竹,不好意思,试验没有成功。
    我用一个U盘做的测试。具体制作过程如下:
    1、用磁盘软件将U盘的第一分区起始位置向后调整到640扇区,留下了640个扇区的MBR区,可容纳:640×512=327680=327k字节数据,grldr只有266k,大小足够。
    2、将您所给的14楼附件的前440字节写入mbr第一扇区的前440字节,绕过分区表后,将对应第二个扇区的512个字节写入第二扇区。
    3、打开grldr文件,按照您的指导,将从偏移地址2000H开始,直至文件结尾的内容,写入磁盘从第三扇区开始的位置,连同第1、第2扇区在内,大约好像占用了500多个扇区,具体记不清了。

    重启后,选择U盘启动,黑屏,只有光标一直在闪烁,无法进入grub>命令行,引导不成功。

    可以排除U盘启动的原因。为了查找原因,我做了一些测试,同一台机器,同样是这个U盘,同样的分区结构,将grldr.mbr写入前18个扇区,可以成功引导U盘第一分区中的grldr文件进入grub>提示符。
    不知道咋回事。
    猜想是不是因为grldr文件大小随版本不同不断变动,第二扇区中的代码不知道要读取多少个扇区所致?——外行瞎猜,不要见笑。
作者: 天涯海角1216    时间: 2013-10-19 19:34
第二个扇区倒数3,4两个字节是加载grldr的扇区数,我写入600个,你按照实际修改。
作者: pppfj    时间: 2013-10-19 22:25
天涯海角1216 发表于 2013-10-19 19:34
第二个扇区倒数3,4两个字节是加载grldr的扇区数,我写入600个,你按照实际修改。

  读入600个扇区肯定够用了,我猜想代码后面多读的几十个空白扇区,除了多占用了一些内存之外,应该不会对程序运行造成什么影响吧?不能启动到命令行,也没有出错信息,屏幕上只有一个光标在闪烁,会不会是grldr的内核没有被正确载入内存并被执行呢?
  虽然有这个怀疑,不过,明天我还是打算按斑竹说的,把读入的扇区数量修改一下,再试一试。
作者: 不点    时间: 2013-10-20 08:32
多载入的尾部扇区,不影响 grldr 的执行。

天涯海角自己测试成功了吗?我假定天涯海角测试成功了。

那么可能还有什么问题呢?

有啊。我没有看天涯海角的引导代码,但我知道,两个扇区是无法完成加载的。困难在于,当 BIOS 对 USB 设备不支持 LBA 模式的读取时,必须探测正确的 CHS 值,才能成功启动超过一个磁道长度的 GRLDR 扇区序列。光是这 CHS 探测的代码,就要满满地占用 2 个扇区。再加上扇区引导记录也要占用一个或两个扇区,因此,最低的扇区占用是 3 个扇区。如果选择不探测,那么确实能够做到在一个扇区之内完成加载。不探测时,必须由用户在你所规定的位置填写正确的 H 和 S 值,才可以保证成功加载。然而用户确定 H 和 S 是麻烦的,除非用户事先知道 H 和 S 的值。

如果假定 BIOS 支持 LBA,那么只需 1 个扇区即可完成加载。Wee 就是这样做的。Wee 的第一扇区可以加载 127 扇区的引导代码。为什么是 127 呢?那是因为,这个 127 就是 LBA 模式的 BIOS 每次传递的最大扇区数。如果加载的扇区数超过 127,那么需要反复调用 BIOS 多次,可以用一个循环来实现。wee 只调用了一次 BIOS,所以,wee 不需要循环。要读取更多的扇区,必须修改 Wee 的代码,增加一个循环。

为了加载 GRLDR,可以假定 GRLDR 为 512K,即 1024 个扇区。GRLDR 不可以超过 512K。超过之后,GRLDR 就有可能无法被成功加载,或者在某些情况下(例如 PXE 启动时)产生内存冲突(内存覆盖),导致死机或运行失常。要知道,机器的最大可用常规内存也达不到 640K。所以,512K 的 GRLDR 就已经很大了。

用 BIOS 加载扇区,当不支持 LBA 模式时,最大的困难就是 H 和 S 的确定。如果这个没问题,那基本上就不会有问题了,顶多还有一个 “扇区号过大,超出 BIOS 加载能力” 的问题,不过这不会出现,因为我们这里的扇区都是在磁盘最开头,都在 1M 以内,是最安全的了,没有理由加载失败。


作者: 不点    时间: 2013-10-20 09:11
进一步的引申。假如你为 MBR 保留 8M 以上的扇区数,那么你可以安装 fbinst 了。

fbinst 能够保证万无一失。fbinst 失败的情况,都可以通过调整安装参数(例如是否复制 BPB)来解决。到目前为止,没有见到一个真实的、经过确认的失败报告。理论上,fbinst 也可能成为主板 BIOS 攻击的对象,不过,从实践来看,却没有人给出一个确认无误的失败报告。


作者: 天涯海角1216    时间: 2013-10-20 10:44
本帖最后由 天涯海角1216 于 2013-10-20 10:52 编辑
pppfj 发表于 2013-10-19 22:25
读入600个扇区肯定够用了,我猜想代码后面多读的几十个空白扇区,除了多占用了一些内存之外,应该不会对 ...


你用BOOTICE 恢复到MBR,注意分区表!
这个是在我的本子IBM R51E上测试成功的,可能是2011的grldr。
直接恢复,无需修改代码!注意分区表就行了。。。

stage-grldr.rar

130.28 KB, 下载次数: 16, 下载积分: 无忧币 -2


作者: 天涯海角1216    时间: 2013-10-20 10:46
不点 发表于 2013-10-20 08:32
多载入的尾部扇区,不影响 grldr 的执行。

天涯海角自己测试成功了吗?我假定天涯海角测试成功了。

这里的 stage 是 Pauly 的 bootice 里 GRUB2.0 的前2个扇区,我测试过,完全可以。。。
一个扇区也可以引导整个grldr。。。
作者: 天涯海角1216    时间: 2013-10-20 11:23
这个是在我的本子IBM R51E上测试成功的,这个是20131018的新版grldr。

直接恢复这600个扇区。





stage-grldr-20311018.rar

131.79 KB, 下载次数: 18, 下载积分: 无忧币 -2


作者: 不点    时间: 2013-10-20 11:53
没有几何参数的探测适应过程,也就不能保证有较高的成功率。虽然在一部分机器上测试成功,但不能大面积推广。

前面提到,要么采用 fbinst,要么集成 grldr.mbr 末尾的几何参数探测代码。否则不能应付各种主板变态的、五花八门的 CHS 值。

感觉采用 fbinst 是最根本的,因为它的成功率最高。


作者: 快雪时晴    时间: 2013-10-20 13:33
本帖最后由 快雪时晴 于 2013-10-20 14:14 编辑
不点 发表于 2013-10-20 11:53
没有几何参数的探测适应过程,也就不能保证有较高的成功率。虽然在一部分机器上测试成功,但不能大面积推广 ...


能否安装WEE63到MBR,把GRLDR用WINHEX写到硬盘最后的剩余空间处,这个扇区偏移数是知道的,比如1**678
然后用(hd0)1**678+1024移交控制

这样可以吗,有点类似pauly的XORLDR了
^^^^^^^^^^^^^^^^^^^^^^^^
经实验,可行,谢谢不点!
作者: pppfj    时间: 2013-10-20 13:48
本帖最后由 pppfj 于 2013-10-20 13:54 编辑

To 天涯斑竹:
    原因已找到,测试已成功。
    将您14楼提供的只包含2个扇区的文件和您在23楼提供的拼接好grldr文件的前2个扇区做了对比,发现第二扇区的末尾四个字节不同。
14楼第二扇区末尾4字节:
  1. 3D 00  20 08
复制代码
23楼第二扇区末尾4字节:
  1. 0A 02  20 08
复制代码
按照您在17楼的说法:
第二个扇区倒数3,4两个字节是加载grldr的扇区数,我写入600个,你按照实际修改。

这里是决定读入多少扇区进内存的关键位置。
  我不是学计算机专业的,高位低位搞不太明白,只好都做了计算:
  第14楼:3D00=15616,太多了,不像。是字节吗?15616/512=30个扇区,又太少了。
          003D=3D=61个扇区,太少了。
  第23楼:0A02=A02=2562,太多了,不像。按字节折算为扇区:2562/512=5个扇区,更不像。
          020A=20A=522,非常接近拼接GRLDR后的扇区数量,我拼接后为517个扇区。
  因此,我假定上述最后一个推断是正确的,没有直接使用您在23楼提供的拼接好的文件,而是选择自己把昨天已制作好的U盘的第二个扇区最后四个字节由:
  1. 3D 00  20 08
复制代码
,改为:
  1. 0A 02  20 08
复制代码
,重启后选择U盘启动,顺利启动到grub>提示符下,成功!
    谢谢斑竹指点!
    猜想:是不是14楼的附件只读取61个扇区?
    另问:1.是不是计算机的双字节顺序,都是低位在前,高位在后,使用的时候要颠倒一下顺序?
2.第二扇区最后两个字节:
  1. xx xx  20 08
复制代码
是做什么用的?
作者: 快雪时晴    时间: 2013-10-20 13:55
pppfj 发表于 2013-10-20 13:48
To 天涯斑竹:
    原因已找到,测试已成功。
    将您14楼提供的只包含2个扇区的文件和您在23楼提供的拼 ...

IBM兼容PC,INTEL继承,都是低位在低地址,高位在高地址
因此在存储空间(磁盘,内存)中你看到 AB CD .... 其对应的数值就是 0xCDAB
作者: pppfj    时间: 2013-10-20 14:04
本帖最后由 pppfj 于 2013-10-20 16:48 编辑

To不点大师:
    通过诸多大师们的指点,我对启动过程和grldr的了解提升了一个层次,这是直接使用工具软件无法达到的。折腾的过程,其实是一个学习的过程,这就是我为什么选择手动制作的原因。掌握了解其原理之后,反倒可能会选择使用各种工具软件。
     fbinst软件兼容性更好,也是我计划在今后学习掌握的内容之一。下一步我计划首先尝试和学习Chenall所推荐的wee+grldr的方法,将grldr放入磁盘尾部的空闲扇区,以免被人无意删掉,而后学习fbinst软件的使用。因为U盘是经常借来借去的,放在文件系统中不保险。
作者: 天涯海角1216    时间: 2013-10-20 14:35
pppfj 发表于 2013-10-20 13:48
To 天涯斑竹:
    原因已找到,测试已成功。
    将您14楼提供的只包含2个扇区的文件和您在23楼提供的拼 ...

你的理解是正确的,呵呵!
20 08
这个代码我也不清楚,最初的 gnu 0.97 里就是这个代码,而且不能修改,否则失败!
作者: pppfj    时间: 2013-10-20 16:33
快雪时晴 发表于 2013-10-20 13:55
IBM兼容PC,INTEL继承,都是低位在低地址,高位在高地址
因此在存储空间(磁盘,内存)中你看到 AB CD ... ...

谢谢快雪,几句话简单明了,连历史演变过程都包括了,使我搞清楚了一个问题,又增长知识了。
作者: pppfj    时间: 2013-10-20 16:40
授人以鱼,不如授人以渔。感谢天涯、不点、Chenall等大师传授的“渔”,深层次理解了相关问题,学会自己拼接,就可以随时跟上G4D的版本更新了。
作者: 不点    时间: 2013-10-20 18:51
如果只是给自己用,知道自己的电脑支持 LBA,那么根本问题就不存在了,很容易做。因为 LBA 是线性地址,是一维的,是 “全球通用” 的。这一点就好比 UTF-8 语言字符编码也是全球通用的那样。而 CHS 是三维的,即,所谓的 “几何参数”,太复杂,不同的机器就不一样。所以,只要支持 LBA,那程序的编写就太简单了。本地硬盘是可以保证支持 LBA 的。

看到几位不是在本地硬盘上使用,而是在 U 盘上使用。假如主板不支持 LBA,那么其中有些方案就不行了,必须用 fbinst 才能保证最大的成功率。尤其是,Wee 也是依赖 LBA,所以,Wee 不能应付 USB 上的复杂情况。

除了 LBA 这个 “大问题” 以外,还有 “扇区数极限” 这个小问题。靠近磁盘开头的扇区容易被 BIOS 支持,而靠近磁盘尾部的扇区,就可能因 BIOS 的 “能力不济、鞭长莫及” 而无法访问了。即使是本地硬盘,其 BIOS 的扇区访问能力也是有极限的,有很多主板(是大量的主板),其 BIOS 只能访问 137G 的硬盘空间,不能访问超出这个极限的其他那些扇区数据。在 U 盘上,其极限值可能还要低。就是说,在支持 LBA 的情况下,仍然有 “扇区数极限” 的问题。不要以为,只要支持 LBA 就 “万事大吉” 了。


作者: pppfj    时间: 2013-10-23 11:56
不点 发表于 2013-10-20 18:51
如果只是给自己用,知道自己的电脑支持 LBA,那么根本问题就不存在了,很容易做。因为 LBA 是线性地址,是一 ...

    G4D这类优秀的软件,用户群体比较宽泛,不同的用户有不同的需求特点。
   如电脑专业从业人员,特别是搞电脑维修的,需要面对不同的硬件,因此需要最大限度的兼容性,此时采用fbinst的方案,可能是最佳选择。
   对非电脑行业的普通使用着,面对的是相对比较固定的电脑和硬件,对兼容性的要求不是特别高,在自己身边的电脑上测试能用,一般就不再苛求什么了。当然,软件本身对硬件良好的兼容性是基础,这也是G4D的优势。
作者: pppfj    时间: 2013-10-23 12:24
    wee+grldr的引导方式,让我想起来了grub2。在grub2中,有一个“应急模式”的功能,在由于某种原因grub2不能正常加载的时候,grub2就会进入“应急模式的命令提示符,仅仅支持极少量的几个命令。通过这几个命令,可以手动将grub2加载到正常状态。这是一个不错实践。
    wee+grldr的方式,我认为有异曲同工之妙。相比grub2的应急模式,wee的功能要强大许多,是优点;但相比GRUB2的应急模式和普通模式命令的高度一致性,wee的命令和grldr的命令还是有些区别的。wee能不能算作mini grldr呢?
    不点大师在19楼提到:
如果假定 BIOS 支持 LBA,那么只需 1 个扇区即可完成加载。Wee 就是这样做的。Wee 的第一扇区可以加载 127 扇区的引导代码。为什么是 127 呢?那是因为,这个 127 就是 LBA 模式的 BIOS 每次传递的最大扇区数。如果加载的扇区数超过 127,那么需要反复调用 BIOS 多次,可以用一个循环来实现。wee 只调用了一次 BIOS,所以,wee 不需要循环。要读取更多的扇区,必须修改 Wee 的代码,增加一个循环。

    是否有人愿意让wee的第一扇区不但为加载wee服务,也能够为加载grldr服务呢?在第一扇区留出一个位置,可以定义读入后面连续扇区的数量,简单易行,又具有灵活性。
作者: 不点    时间: 2013-10-23 18:36
如果用 wee 的第一扇区,前面说了,由于要读入超过 127 个扇区,那么,你得修改 wee 的代码,增加一个循环。而至于说要读入多少个扇区,那就不必细算了,统一读入 1024 个扇区(也就是 512K)即可,这也就是 GRLDR 的最大理论长度。wee 的第一扇区是引导代码。第二扇区是空白,这与 grldr.mbr 一样,是用来放置 “备份的 MBR 扇区”。第三扇区开始,就是 GRUB 的核心 pre_stage2。

不过,既然天涯海角给出了成功的办法,也就没必要用 wee 了。更因为这些办法都不能处理针对 CHS 的兼容性,所以,只要有一种就行,多了也就没有太大的意义。


作者: shan    时间: 2013-12-3 22:45
多多浏览,多多受益。感谢各位大师细心指导。
作者: 2012casscqt    时间: 2013-12-18 10:36
chenall 发表于 2013-9-29 10:44
用最新版weesetup

把grldr文件放在同目录下,扫行命令就会把grldr安装到mbr,当然了MBR需要有足够大的空 ...

C大,我制作了一个grldr,请问如何具体 嵌入wee中?感谢您。
作者: chenall    时间: 2013-12-18 23:41
2012casscqt 发表于 2013-12-18 10:36
C大,我制作了一个grldr,请问如何具体 嵌入wee中?感谢您。

这个根本没有办法嵌入到wee中,
只是把GRLDR写入到硬盘MBR上而已,要求你的MBR空间有足够大,除非特殊格式化,一般情况下,都是不可能很大的.
作者: 2012casscqt    时间: 2013-12-19 18:42
chenall 发表于 2013-12-18 23:41
这个根本没有办法嵌入到wee中,
只是把GRLDR写入到硬盘MBR上而已,要求你的MBR空间有足够大,除非特殊格式 ...

是的 我的意思也是把我的GRLDR放到MBR中, 请问如何实现?
作者: chenall    时间: 2013-12-20 11:04
2012casscqt 发表于 2013-12-19 18:42
是的 我的意思也是把我的GRLDR放到MBR中, 请问如何实现?

自己再仔细看一下#6的贴子,一个字一个字地看.
作者: pimalon    时间: 2017-1-9 21:19
wuyou.com 怎么了?几年不来感觉。。。
作者: 921_j    时间: 2017-4-10 23:40
收藏一下,以后学习




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