无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 54639|回复: 472

反馈一个 grldr.mbr 0.4.6a 的 bug

  [复制链接]
发表于 2013-10-21 12:03:26 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 Pauly 于 2013-11-5 20:40 编辑

磁盘分区情况:三主分区,三逻辑分区,全部为 NTFS 格式。将 grldr.mbr 直接写入 MBR(保留分区表),然后在 hd0,4 放上 grldr。从此硬盘启动,grldr.mbr 在第一个分区中未找到 grldr 后即卡住。
经逐一测试,2013-5-16 版本无此问题,其后版本均有此问题。请开发者有时间修复一下,谢谢。

=================================================
已经修正,请从 http://bbs.znpc.net/forum.php?mo ... age%3D1&page=21 下载。
发表于 2013-12-9 15:27:15 | 显示全部楼层
grub> geometry (hd0)
drive 0x80(LBA): C/H/S/=966/255/63, Sector Count/Size=15518790/512
十分钟后
Error 25: Disk read error


非常好。这就知道,我的新代码没有产生太大的错误。至少是成功返回到 grub4dos 中了。失败的现象则表明,即使一个一个扇区去读,也照样不行。这问题就更深了…… 我们还得继续猜测、试验、研究……

回复

使用道具 举报

发表于 2013-10-21 14:53:34 | 显示全部楼层
可是 5 月 16 日以后,没有改动 grldr.mbr 启动代码。因此我提醒 Pauly 再观察观察究竟毛病在什么地方。比如说,会不会是编译器不同所造成的?

点评

我说的是 0.4.6a 的 grldr.mbr,从二进制内容可以看出 5-16 跟其后的 5-22 有明显的内容不同。  详情 回复 发表于 2013-10-22 09:09
回复

使用道具 举报

 楼主| 发表于 2013-10-22 09:09:17 | 显示全部楼层
不点 发表于 2013-10-21 14:53
可是 5 月 16 日以后,没有改动 grldr.mbr 启动代码。因此我提醒 Pauly 再观察观察究竟毛病在什么地方。比如 ...

我说的是 0.4.6a 的 grldr.mbr,从二进制内容可以看出 5-16 跟其后的 5-22 有明显的内容不同。
回复

使用道具 举报

发表于 2013-10-22 09:38:51 | 显示全部楼层
那我明白了,你说的 5月22 日,不是在 googlecode 上下载的。yaya 的代码拖后到 6月23日才正式进入svn代码库里面。

那么,这个情况就需要 yaya 解决了。我还是用我以前说过的话来作个评论吧:0.4.6 的代码需要锤炼,需要时间去排除 bug。

其实,0.4.5 以前的代码,也是经历了长期的排错过程,排错过程中曾经发现很多逻辑错误,以及一些手误(typo)。

长期+用户多=可靠

回复

使用道具 举报

发表于 2013-10-26 17:16:14 | 显示全部楼层
这个问题确实是个问题,其实我是因为这个问题google搜索到这里的(以前别人的帖子也反馈过这个问题)我用0.4.4一直没有问题,因为这版本不支持ext4分区,才改用0.4.6
我的情况是:
第一个分区NTFS,WinXP,
第二个分区NTFS,Win7,后面还有若干逻辑分区,gentoo的linux分区,我用grub4dos引导XP,Win7,Gentoo
grldr,menu.lst必须放在Winxp分区下,0.4.6只能搜索第一个分区后卡住。
用BOOTICE安装到mbr,grub4dos-0.4.6a-2013-07-24
回复

使用道具 举报

发表于 2013-10-28 16:38:36 | 显示全部楼层

点评

换成0.46a后,isolinux不能用boot /grldr 来调用g4d,不知有什么讲究?  详情 回复 发表于 2013-10-29 05:42
回复

使用道具 举报

发表于 2013-10-29 05:42:55 | 显示全部楼层
2011yaya2007777 发表于 2013-10-28 16:38
已经修正,请从 http://bbs.znpc.net/forum.php?mod=viewthread&tid=6176&extra=page%3D1&page=21 下载。

换成0.46a后,isolinux不能用boot /grldr 来调用g4d,不知有什么讲究?
回复

使用道具 举报

发表于 2013-10-29 17:10:46 | 显示全部楼层
外部软件是根据 grldr 的一些特征来确定是不是 GRLDR 的。所以,grub4dos 的开发者就应该尽力保证格式不变,保持一致性,方便别人调用。

yaya 如果有时间的话,可以研究一下 isolinux 的代码,看看它调用 grldr 的机理,以及能否满足 isolinux 的条件。
回复

使用道具 举报

发表于 2013-10-29 18:39:14 | 显示全部楼层
谁可以提供 isolinux 的 boot 命令源代码供研究?

我下载了1个 isolinux4.05.iso 。执行
boot: ../grldr
加载 0.4.5c 版本的 grldr ,返回:
Invalid or corrupt kernel image.

点评

4.06/4.07都可以直接用boot命令来启动0.45c的但不能启动0.46a,4.05记不得了,应该也与4.06相似的。  详情 回复 发表于 2013-11-1 16:50
回复

使用道具 举报

发表于 2013-10-29 19:36:07 | 显示全部楼层
以下的教程确实提到可以用 boot /grldr 来从 syslinux 启动 grub4dos:
http://www.rmprepusb.com/tutorials/chainload-syslinux

我觉得我们可以(通过试验)首先确定究竟从何时开始出问题了。定位了时间,就比较容易解决了。

回复

使用道具 举报

发表于 2013-10-29 20:39:42 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-10-29 20:41 编辑

用BOOTICE 以恢复PBR的形式,写入新版0.4.6a的grldr.pbr后,U盘如下:
1.jpg
2.jpg

点评

是否是恢复 MBR? 恢复 PBR 不会影响分区表,除非这个U盘是 FDD 模式,下次 BOOTICE 将加强对分区表有效性的检查。  详情 回复 发表于 2013-11-1 16:35
回复

使用道具 举报

发表于 2013-11-1 16:24:58 | 显示全部楼层
这是 BOOTICE 的问题。前面已经有帖子详细论述过此事。可惜由于服务器损坏,这个帖子没有恢复。
已经将此事反映到 BOOTICE。
回复

使用道具 举报

 楼主| 发表于 2013-11-1 16:35:50 | 显示全部楼层
mygamexxx 发表于 2013-10-29 20:39
用BOOTICE 以恢复PBR的形式,写入新版0.4.6a的grldr.pbr后,U盘如下:

是否是恢复 MBR?
恢复 PBR 不会影响分区表,除非这个U盘是 FDD 模式,下次 BOOTICE 将加强对分区表有效性的检查。

点评

用最新的BOOTICE测试版,此现象消失。  详情 回复 发表于 2013-11-1 16:43
回复

使用道具 举报

发表于 2013-11-1 16:43:23 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-11-1 16:50 编辑
Pauly 发表于 2013-11-1 16:35
是否是恢复 MBR?
恢复 PBR 不会影响分区表,除非这个U盘是 FDD 模式,下次 BOOTICE 将加强对分区表有效 ...


用最新的BOOTICE测试版,此现象消失。

另外,由于手机升级后,大容量存储模式的U盘用于启动出现了明基笔记本电脑disk error的问题,联想台式机启动native pe停止在native界面的问题,包括0pe,算了,不使用手机启动电脑了。
如果将手机存储卡放置于读卡器上,启动电脑又正常。

点评

启动初期依中文提示按空格键就行了。  详情 回复 发表于 2013-11-3 17:37
回复

使用道具 举报

发表于 2013-11-1 16:50:38 | 显示全部楼层
2011yaya2007777 发表于 2013-10-29 18:39
谁可以提供 isolinux 的 boot 命令源代码供研究?

我下载了1个 isolinux4.05.iso 。执行

4.06/4.07都可以直接用boot命令来启动0.45c的但不能启动0.46a,4.05记不得了,应该也与4.06相似的。

点评

请提供测试环境,以便重现。  发表于 2013-11-2 13:16
回复

使用道具 举报

发表于 2013-11-1 20:33:54 | 显示全部楼层
11 楼是 SD 卡,格式化为 FDD 模式。逻辑0扇区,也可以说是分区引导扇区。
回复

使用道具 举报

发表于 2013-11-2 10:46:02 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2013-11-2 13:13 编辑

使用 ISOLINUX4.06.iso 进入命令行 boot:
/grub.exe   可以进入g4d环境
/grldr 提示 Invalid or corrupt kernel image.
/grldr.mbr 提示 Loading /grldr.mbr .. ready. 之后死机。
g4d 版本是 0.4.5b 2011_12_10

请 hhh333 提供你测试的 ISOLINUX 及 grldr。
回复

使用道具 举报

发表于 2013-11-2 13:57:52 | 显示全部楼层
http://pan.baidu.com/s/1kUbQS
就是我做的PE,有各种启动方式,ISO一启是ISOLINUX
回复

使用道具 举报

发表于 2013-11-2 16:15:13 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-11-2 16:51 编辑

YAYA大帮忙看一下,手机升级后的U盘与以前的是否有什么区别。升级后用手机启动明基笔记本电脑出现disk error. 在联想台式机上加载NATIVE 形式的PE时,停止在NATIVE界面,可能是停止在搜索或挂载WIM文件。非NATIVE形式的PE能够成功启动。
100.jpg
200.jpg
回复

使用道具 举报

发表于 2013-11-2 20:32:18 | 显示全部楼层
hhh333 反映的问题已经解决。下载地址 http://bbs.znpc.net/forum.php?mo ... age%3D1&page=21

“手机升级后的U盘与以前的是否有什么区别” 从截图看不出什么。手机内部有一个类似集线器的装置,把内置卡与外置卡合成一个usb设备,分别赋予LUN0和LUN1。数据传送由手机软件控制。手机软件升级后,估计有什么不适应的。是加载usb驱动后出现问题,还是不加载usb驱动有也问题?

点评

经测试,新的1102版本已经解决了这个问题! 想问一下4.6a与4.5c主要的优势在哪里?我目前想使用它就是因为它提供了启动cd的bin文件(以前我总是从4.5c的前2kB来提取的)  详情 回复 发表于 2013-11-5 15:46
不加载驱动有问题,加载驱动没试,0.4.5a也一样,可能是有什么不一样,使磁盘识别出现问题,包括pe下虚拟盘驱动的识别。  详情 回复 发表于 2013-11-3 14:07
回复

使用道具 举报

发表于 2013-11-3 14:07:25 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2013-11-2 20:32
hhh333 反映的问题已经解决。下载地址 http://bbs.znpc.net/forum.php?mod=viewthread&tid=6176&extra=page ...

不加载驱动有问题,加载驱动没试,0.4.5a也一样,可能是有什么不一样,使磁盘识别出现问题,包括pe下虚拟盘驱动的识别。
回复

使用道具 举报

发表于 2013-11-3 17:37:05 | 显示全部楼层
mygamexxx 发表于 2013-11-1 16:43
用最新的BOOTICE测试版,此现象消失。

另外,由于手机升级后,大容量存储模式的U盘用于启动出现了明 ...

启动初期依中文提示按空格键就行了。

点评

按空格键后启动0pe成功,从过程界面显示的信息看是软盘形式的U盘。  详情 回复 发表于 2013-11-4 11:44
回复

使用道具 举报

发表于 2013-11-4 11:44:14 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-11-4 12:27 编辑
pseudo 发表于 2013-11-3 17:37
启动初期依中文提示按空格键就行了。


按空格键后启动0pe成功,从过程界面显示的信息看是软盘形式的U盘。不过有一个问题,启动成功后我的电脑中无U盘。我是用map --mem的形式启动U盘上的ISO文件。因而无法加载U盘上的PETOOLS。怎么本地硬盘E盘上的PETOOLS也没有呢?重新插拨也不显示U盘,使用于山的非NATIVE的2003PE,启动成功后,U盘也看不到,重新插拨后能显示U盘。

只是唯一一台以前加载USB驱动成功的明基笔记本电脑,现在是启动时disk error,无法测试USB驱动加载成功的现象。
家里的神舟台式机(显示012_)和单位的联想台式机(显示0123)均加载USB驱动不成功。

手机形成的U盘不稳定,经常出现在我的电脑上看不到U盘的情况,特别是经过实模式的启动操作。因为如果WINDOWS启动成功后插入,再重新插拨或插拨到其他电脑上,认不到U盘的现象很少。
回复

使用道具 举报

发表于 2013-11-4 12:10:05 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-11-4 13:52 编辑

不知GRUB4DOS的grldr.mbr和grldr.pbr,能不能弄一个测试版,如果出现disk error时能显示磁盘错误的原因,no grldr时列出磁盘清单,是不是对测试工作有很大帮助。因为这几个状态无法进入命令行,不能用其他的命令来检查错误原因。

手机升级后,原来运行PLPBT都正常的,现在都运行有问题了。
回复

使用道具 举报

发表于 2013-11-4 13:53:48 | 显示全部楼层
本帖最后由 不点 于 2013-11-4 15:02 编辑

使用任何软件,都有限制的。当你的 BIOS 没有足够的访问能力的时候,就会出现 disk error 之类的错误。这还算是好的。更糟糕的 BIOS 在你试图访问大扇区号时,干脆死机,根本就没有机会返回到 grub4dos 的代码中,显示所谓的测试信息。

从另外一个角度来看,选择 grldr.mbr 和 grldr.pbr 本身就是错误的,是一种错误的选择。正确的选择是 fbinst。它可以保证较高的启动成功率。但 fbinst 照样无法应付 BIOS 的 “访问能力” 缺陷。

这就是原因,不用找,也不用费劲去找别的命令来检查。BIOS 的能力有限,或者故意制造启动困难,这就是原因。你去找原因,找来找去,最后还是定位到这个原因,没有用。

你也没有别的办法,你唯一可以做的,是尽力保证所涉及的文件都位于扇区号较小的位置,这样能够尽可能多地获得启动的成功。

到目前为止,还没有一个确认无误的实际例子来证明 fbinst 彻底失败。因此,(在这个意义上)可以认为 fbinst 的成功率是 100%。只要把 grldr 等安排在扇区号较小的位置上,基本可以保证成功。

fbinst 失败的例子应该也是有的,但那是凤毛麟角,很难遇到。比如说,我们的开发者 Roy 就有一台机器,它识别 USB 为 720K 的软盘,最大只支持 720K。Roy 自己会应付这一问题,因此,Roy 没有报告这一问题。这种情况,即使使用 fbinst 也难了,因为 fbinst 至少需要 8M 的可访问空间才可以确定出 CHS 来。这种情况连 grldr.mbr 也无法成功,因为 GRLDR.MBR 需要每磁道至少有 18 扇区才行。720K 的 CHS 是 C=80,H=2,S=9,这个 S=9 就小于 18 了。对于这种情况,你只好放弃 fbinst 以及 grldr.mbr,而用固定 H=2 和 S=9 的 BPB 参数(位于 PBR 中的 BPB 参数)来让它启动,这么一搞,当然这个 U 盘就无法适应别的主板了,而只能应付这一个型号的主板。对于 Roy 的这个特殊情况,我猜测,用 fbinst 并且注意让 grldr 和 menu.lst 都在 720K 的极限之内,仍是可以成功的。就是说,格式化 fbinst 的时候,让 grldr 和 menu.lst 最先放进 ud 区,其它的文件放在后面,这样我估计就应该能够成功进入 grub4dos 了。

再补充点有关 disk error 的说明信息。disk error 是 grub4dos 引导扇区里面的显示信息,引导扇区的代码在查找 grldr 的过程中遇到读盘失败,就出现这条信息,只要 BIOS 的 INT13 本身没有产生死机,就会出现这条信息。如果 INT13 本身死机了,当然就无法显示 disk error 这条信息了。

读盘失败的原因有:

1、如果没有采用 grldr.mbr 而是直接采用分区引导代码,那么,由于分区引导代码没有自动适应 CHS 的能力,因此,出现 BPB 中的 CHS 不能够匹配主板 BIOS 的 CHS 的情况,这样可能导致 int13 读盘失败或死机。如果一个 PBR 的引导代码不采用 “几何参数探测和自适应” 的方法,那么它必须在 BPB 中放置完全正确的 H 和 S 值,保证与这个主板 BIOS 所认定的 H、S 值完全相同,这才行,否则就出现 disk error (或干脆死机)。

2、如果使用了 grldr.mbr,仍然有可能出现 CHS 不匹配的情况,这是因为,grub4dos 的 “自动探测 CHS” 的功能并不保证 100% 成功。真正可以保证 100% 成功的是 fbinst。既然 CHS 有可能不准确,那么这就会出现因执行 INT13 指令而导致的 disk error (或干脆死机)。

3、在 CHS 保证能够完全正确匹配主板 BIOS 的情况下,如果把 GRLDR 放置在靠后的位置,超出主板 BIOS int13 的访问能力,此时也会出现 disk error(或干脆死机)。

4、在主板 BIOS 支持 LBA 模式的情况下,这与上述第 3 条是类似的。即,如果把 GRLDR 放置在靠后的位置,超出主板 BIOS int13 的访问能力,此时也会出现 disk error(或干脆死机)。


如果我没搞错的话,以上这 4 条,好像就是与启动失败有关的全部的可能性。

因此,如果你想让你的 U 盘通用,(目前)你唯一可以使用的软件是 fbinst。如果你不考虑通用的问题,那么你可以自己设定 BPB 中的 H 和 S(匹配你的主板 BIOS) 来让你的这台机器成功启动。

点评

我曾经测试过 手动修改硬盘 MBR扇区 分区表部分 CHS的取值来测试引导. BIOS的行为非常古怪,但与分区表结束CHS的H部分有重要关系. 使用多种软件,包括WINPE环境下的分区工具所识别的硬盘CHS参数,磁头H部分都会受到影响  详情 回复 发表于 2013-11-5 14:06
回复

使用道具 举报

发表于 2013-11-5 06:44:00 来自手机 | 显示全部楼层
本帖最后由 mygamexxx 于 2013-11-5 06:46 编辑

因为是同一台电脑,以前能启动并加载usb驱动成功,只是升级了手机系统和grub4dos后出现,应与Bios无关。
主要与手机形成的u盘不同有关。
回复

使用道具 举报

发表于 2013-11-5 14:04:58 | 显示全部楼层
本帖最后由 不点 于 2013-11-5 14:12 编辑

不一定与 BIOS 无关。你提示说升级了 grub4dos,我想,这就有可能把 GRLDR 等文件放在靠后的物理位置,导致启动失败。

万变不离其宗,无论怎么变化,BIOS 还是一样的。BIOS 的问题就是前面提到的 4 个方面。如果你都做到了,应该不会有问题了。如果你没做到,那出问题是 “家常便饭”,不要臆测是新版 grub4dos 的 bug。


启动是最要紧的,不要舍本逐末。如果你连 grldr 都不能成功加载,“grldr 里面的 usb 驱动” 也就无从谈起。

怎样才能保证启动成功,这才是最基本、最关键、最本质的问题,是你首先要面对和解决的问题。USB 驱动的问题属于上层的问题,不属于基本层次的问题。
回复

使用道具 举报

发表于 2013-11-5 14:06:51 | 显示全部楼层
不点 发表于 2013-11-4 13:53
使用任何软件,都有限制的。当你的 BIOS 没有足够的访问能力的时候,就会出现 disk error 之类的错误。这还 ...

我曾经测试过 手动修改硬盘 MBR扇区 分区表部分 CHS的取值来测试引导.
BIOS的行为非常古怪,但与分区表结束CHS的H部分有重要关系. 使用多种软件,包括WINPE环境下的分区工具所识别的硬盘CHS参数,磁头H部分都会受到影响,直接INT 13调用获得的磁头数也会受到分区表部分 结束磁头的取值影响,这个影响是深远的,甚至可以认为是恶意的,导致分区工具在现有分区的基础上,调整分区或者删掉重建都会受到影响,因为不合适的结束磁头数取值,导致以CHS方式引导受到影响,能够正常启动的机率就会极低.

当修改结束磁头数为255或者240时,则BIOS能很好的适应这种情形,基本上都能成功引导.

修复错误的 CHS参数的正确方法是: 先修改第一分区表项结束磁头值为255或者240(针对普通硬盘),重启一次机器或者断电一次,然后再次引导使用分区工具时,INT 13才会重新识别硬盘的磁头数为 255或者240,这时候分区工具分区时才会有正确的结果.
回复

使用道具 举报

发表于 2013-11-5 14:18:23 | 显示全部楼层
楼上 sgw888 提供的信息就非常好。用 fbinst 可以应付此类恶意(或糟糕)的 bios。
回复

使用道具 举报

发表于 2013-11-5 15:46:04 | 显示全部楼层
2011yaya2007777 发表于 2013-11-2 20:32
hhh333 反映的问题已经解决。下载地址 http://bbs.znpc.net/forum.php?mod=viewthread&tid=6176&extra=page ...

经测试,新的1102版本已经解决了这个问题!
想问一下4.6a与4.5c主要的优势在哪里?我目前想使用它就是因为它提供了启动cd的bin文件(以前我总是从4.5c的前2kB来提取的)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 14:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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