中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 20:15
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 报告GRUB的一个BUG! 查看 8,280 回复 69
31 发表于 2006-06-14 12:41 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
23年会员
UID 9
状态 离线
Originally posted by 不点 at 2006-6-14 08:05 AM:
wengier: 显示了你说的信息之后,还应当显示以下两条信息中的一个:

Gate A20 is turned on successfully.

或者

Failed to turn on Gate A20!!

你是说,从显示这条信息就开始变慢了?那么应该是 A20 的控制,影响了虚拟机的行为。应该属于虚拟机的 BUG。因为我们的 A20 控制,并未触及系统时钟。我这里的 qemu 出现另外一个 BUG,就是方向键(也就是箭头键)都失去作用了。刚刚在 http://grub4dos.jot.com/ 发布的二进制程序解决了 qemu 的问题,不知是否也解决了 vmware 的问题。请报告。


嗯,又试了一下最新版本,发现VMWare中的此问题也已解决,可见就是这个BUG引起的。不过仍然发现有一个问题(在VPC中也有出现),那就是找不到/menu.lst(MENU.LST文件位于在C:\下),但(hd0,0)/menu.lst则可以。比如说启动GRUB.EXE时不指定任何命令行参数或在命令行下指定--config-file=/menu.lst的话会失败(随后将自动转入GRUB命令行),而在命令行下指定--config-file=(hd0,0)/menu.lst则可以正常显示menu.lst中的菜单。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

32 发表于 2006-06-14 13:22 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
33 发表于 2006-06-14 13:28 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
34 发表于 2006-06-14 13:34 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
不过现在怎么/menu.lst会无条件执行?如果有/menu.lst内在菜单就不会出现,这是怎么回事?
35 发表于 2006-06-14 15:52 ·  中国 河南 南阳 联通
银牌会员
★★★★
不甘寂寞的人
积分 2,491
发帖 1,115
注册 2003-09-24 00:00
22年会员
UID 10292
性别 男
状态 离线
wengier: 你说到的问题,我会再看看的。

qwe1234567:不要等中文版,估计很快会发布 pre6 的。

本来就是这样设计的,当 menu.lst 和 GRLDR 在同一分区、同一根目录时,优先执行它;也就是说,它在 preset_menu 之前就要检查执行了。

---------

这还没完,还得麻烦你们继续测试,更改之后我会来这里通报的。你们刚刚下载到的,是一个最保守的版本,把 A20 控制中有关重启键盘的指令全都去除了。你们的机器是正常了,但 USB 键盘的机器可能就遭殃了。所以,还得再打开某些设置,看看怎么样可以照顾更多的机器。这恐怕要反复多次。
因为我们亲手创建,这个世界更加美丽。
36 发表于 2006-06-14 16:00 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
37 发表于 2006-06-14 17:16 ·  中国 河南 南阳 联通
银牌会员
★★★★
不甘寂寞的人
积分 2,491
发帖 1,115
注册 2003-09-24 00:00
22年会员
UID 10292
性别 男
状态 离线
刚刚上载了一个中文版的,你可以暂时用用。

我在等待 DVHZ 的测试情况。根据他的测试,再做相应调整。
因为我们亲手创建,这个世界更加美丽。
38 发表于 2006-06-15 11:24 ·  中国 河南 南阳 联通
银牌会员
★★★★
不甘寂寞的人
积分 2,491
发帖 1,115
注册 2003-09-24 00:00
22年会员
UID 10292
性别 男
状态 离线
好了,DVHZ 和 qwe1234567 的问题都已经彻底解决了,感谢您们两位不辞辛劳大力协助!现在还有 wengier 的问题没能解决。这个问题仍然很顽固,比 qwe1234567 所说的问题还要顽固。同样,如果该问题发生在我的机器上,我比较有把握的说,能够解决它。但是,发生在别人的机器上,我就缺少调试的手段了。

该问题产生的原因,应该是 GNU GRUB 设计上的一个缺陷造成的。GNU GRUB 在读取磁盘扇区之后,要对所读取的磁道进行缓冲,也就是说,保留一份放在内存中,以便下次读取同一磁盘空间的时候,能够避免访问磁盘。

可是这个机制带来的 BUG 非常多,而且这样的 BUG 都非常隐蔽。GNU GRUB 之所以败在 LILO 手下,有三大根本原因(我的观点):一个是 A20 门控问题,一个是引导路线曲折蜿蜒(BUG隐蔽而且多多)所带来的各种不良后果,再一个就是糟糕的磁盘缓冲设计。到目前为止,前两个问题都在 GRUB4DOS 中得到了比较好的解决。如果我们能够拔掉这最后一个钉子,那么就为 GRUB4DOS 的普及扫清障碍了。

实际上,GRUB 中连续访问同一个磁盘文件的现象并不多见,所以,磁盘缓冲其实是多此一举,没什么必要性,也因此它并不能给磁盘访问带来足够的好处,反而是个累赘,因为多了一道手续,既要为缓冲区保留可贵的内存,又要复制磁盘扇区到缓冲区,实际上反而是减缓了磁盘访问的效率。

可见,如果把磁盘缓冲这块赘肉割去,那么 GRUB 的代码结构和内存占用就能够更加精简、更加合理以及更加有效率。不过这是我们未来可以考虑的问题,现在顾不上这些了。

----------

wengier 如果能制作一个磁盘映像来反复再现该问题,那就比较容易解决了,因为我可以亲自去调试。或者,wengier 如果能有时间的话,也可以自己调试。调试从 stage2.c 入手,其中有下面的代码:

/* Try config_file */
if (*config_file)
is_opened = grub_open (config_file);

首先应该在这后面添加一条打印语句,看看 grub_open 的操作是成功了还是失败了(应该是失败了,否则不会有问题;但还是要打印出来确认一下)。

既然是失败了,那我们就要跟踪到 grub_open 的函数体内部,在里面添加其它打印命令,看看究竟是什么语句导致 grub_open 返回代表失败的 0 值的。如果还要调用其它函数,那就继续跟踪进去,这样一步一步,反复试验,顺藤摸瓜,总可以把那个 BUG 揪出来的。
因为我们亲手创建,这个世界更加美丽。
39 发表于 2006-06-15 14:59 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
中文版已经收到。
现在我还有个问题,就是如果从可可启动光盘启动硬盘后,如果不按方向键让内植菜单停下来手工选择正确的寻找路径的话,GRUB就会进入GRUB命令提示符出现:
find --set-root /menu.lst

Error 17: File not found
Booting 'find /boot/grub/menu.lst'

fallback 2
find --set-root /boot/grub/menu.lst
Error 17: File not found
Booting 'find /grub/menu.lst'

fallback 3
find --set-root /grub/menu.lst
(hd0,4)
Filesystem type is fat, partition type 0xb
configfile /grub/menu.lst

About to reset the boot drive. Report bug if the machine hangs here.

GNU GRUB version 0.97 (639K lower / 130048K upper memory)





grub>

这个问题可以解决吗?

[ Last edited by qwe1234567 on 2006-6-15 at 15:14 ]
40 发表于 2006-06-15 15:52 ·  中国 河南 南阳 联通
银牌会员
★★★★
不甘寂寞的人
积分 2,491
发帖 1,115
注册 2003-09-24 00:00
22年会员
UID 10292
性别 男
状态 离线
我来分析一下。在硬盘中找 /menu.lst 和 /boot/menu.lst 都失败了,它们应该是不存在。

/grub/menu.lst 找到了,它在 (hd0,4) 分区,也就是第一个逻辑分区。

当执行 configfile /grub/menu.lst 时,出现了未知错误,导致打开该文件失败。

因此我感觉这个 BUG 和 wengier 说的是一样的。你们能否制作一个硬盘和光盘映像,让我也可以再现这一情况呢?

制作映像之后,要先在你们自己的虚拟机下运行,确信能够再现这一错误情况,然后才可以传给我。

通过你们的描述,我越发觉得应该将 GRUB 的磁盘缓冲摘除掉了!它所带来的坏处,简直没完没了、无穷无尽了。
因为我们亲手创建,这个世界更加美丽。
41 发表于 2006-06-15 17:13 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
这个问题嘛,你就用我上次给你的硬盘映像就可以了,光盘映像嘛随便找一个就可以了,反正你只要从光盘启动后选择从硬盘启动就可以了!
42 发表于 2006-06-15 23:56 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
23年会员
UID 9
状态 离线
Originally posted by 不点 at 2006-6-15 03:52 PM:
我来分析一下。在硬盘中找 /menu.lst 和 /boot/menu.lst 都失败了,它们应该是不存在。

/grub/menu.lst 找到了,它在 (hd0,4) 分区,也就是第一个逻辑分区。

当执行 configfile /grub/menu.lst 时,出现了未知错误,导致打开该文件失败。

因此我感觉这个 BUG 和 wengier 说的是一样的。你们能否制作一个硬盘和光盘映像,让我也可以再现这一情况呢?

制作映像之后,要先在你们自己的虚拟机下运行,确信能够再现这一错误情况,然后才可以传给我。

通过你们的描述,我越发觉得应该将 GRUB 的磁盘缓冲摘除掉了!它所带来的坏处,简直没完没了、无穷无尽了。


呵,基本上就是这种情况。经一些测试和研究后本准备现在上来说说具体情况的,没想到让qwe1234567先说了(主要是这几天太忙,刚才才有点时间继续测试)。。menu.lst是在C:\上,也就是(hd0,0)/上。实现方法很简单,比如说用MS-DOS 7.10完整安装版的光盘版启动,出现启动菜单后选3从硬盘启动,启动后再运行GRUB的话就会出现这种结果,而且一定会出现。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

43 发表于 2006-06-16 20:19 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
Originally posted by Wengier
嗯,又试了一下最新版本,发现VMWare中的此问题也已解决,可见就是这个BUG引起的。不过仍然发现有一个问题(在VPC中也有出现),那就是找不到/menu.lst(MENU.LST文件位于在C:\下),但(hd0,0)/menu.lst则可以。比如说启动GRUB.EXE时不指定任何命令行参数或在命令行下指定--config-file=/menu.lst的话会失败(随后将自动转入GRUB命令行),而在命令行下指定--config-file=(hd0,0)/menu.lst则可以正常显示menu.lst中的菜单。

你这说的问题不会和我说的一样吧?
44 发表于 2006-06-16 21:21 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by qwe1234567 at 2006-6-15 14:59:
就是如果从可可启动光盘启动硬盘后
find --set-root /menu.lst

Error 17: File not found
Booting 'find /boot/grub/menu.lst'

fallback 2
find --set-root /boot/grub/menu.lst
Error 17: File not found
Booting 'find /grub/menu.lst'

fallback 3
find --set-root /grub/menu.lst
(hd0,4)
Filesystem type is fat, partition type 0xb
configfile /grub/menu.lst

About to reset the boot drive. Report bug if the machine hangs here.


这个现象我也经常出现,还有装有grub的IMG文件在光盘上也无法启动,好象有EasyBoot就被排斥了。用0.95的stage1 stage2做成EasyBoot可引导IMG是行的,可能是我比较菜看了好多此类贴子也试了好几种办法,0.97还是没办法运行在光盘上。
这几天装了个虚拟机感觉批处理或某个程序还要照顾能否在虚拟机运行还是不习惯,相比之下不点大师伟大的多!
45 发表于 2006-06-16 23:18 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
23年会员
UID 9
状态 离线
Originally posted by qwe1234567 at 2006-6-16 08:19 PM:

你这说的问题不会和我说的一样吧?


看起来是一样的吧,只不过是我先说的。等我准备来详细报告情况时,你又说了。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

论坛跳转: