无忧启动论坛

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

[求助] grub4dos 在 ipxe 下的 bug?

[复制链接]
跳转到指定楼层
1#
发表于 2015-9-23 20:27:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ygao2004 于 2015-9-23 20:46 编辑

谁是真的ramos
http://bbs.wuyou.net/forum.php?m ... &fromuid=565395

上面是我做的ramos,  在我准备使用ipxe 下的 grub4dos下的功能时,发现我根本就不能在ipxe运行grub4dos.
无论是使用ipxegrldr 还是 ipxe 下转 grub4dos,ipxe的功能正常,但一运行到grub4dos时实机中就重启,在虚拟机中花屏。
后来我发现



这就是我无法使用ipxe下grub4dos下的原因。只用一用pxe detect 肯定重启。




后来修改了grldr的内置菜单后,能运行了。
但我发现 map --mem  http://xxx.vhd (hd0)时,总是提示


上面的文件有7g,
当我改个小文件时,能成功加载。



2#
发表于 2015-9-23 21:07:47 | 只看该作者
你的内存只有 1G,你却让它装入 7G 的文件。比如说让你吃 三吨 的米饭,你的肚子能盛得下吗?

点评

实机中 map --mem 这个7g文件,成功进入系统。 但在ipxe下 map --mem /img/vhd,成功加载进入了内存,但报错,bootmgr image错误,无法引导。 所以在ipxe下问题多多! 另外我在pxe下也有测试,map --mem /img/v  详情 回复 发表于 2015-9-23 21:26
在虚拟机中的截屏而已,有在实机中亲试,我的帖子中有实机中ramos,内存12g. http://bbs.wuyou.net/forum.php?mod=viewthread&tid=371388&fromuid=565395  详情 回复 发表于 2015-9-23 21:16
回复

使用道具 举报

3#
 楼主| 发表于 2015-9-23 21:16:19 | 只看该作者
本帖最后由 ygao2004 于 2015-9-23 21:29 编辑
不点 发表于 2015-9-23 21:07
你的内存只有 1G,你却让它装入 7G 的文件。比如说让你吃 三吨 的米饭,你的肚子能盛得下吗?


在虚拟机中的为了截屏方便而已,有在实机中亲试,我的帖子中有实机中ramos,内存12g.
http://bbs.wuyou.net/forum.php?m ... &fromuid=565395

回复

使用道具 举报

4#
 楼主| 发表于 2015-9-23 21:26:57 | 只看该作者
本帖最后由 ygao2004 于 2015-9-23 21:34 编辑
不点 发表于 2015-9-23 21:07
你的内存只有 1G,你却让它装入 7G 的文件。比如说让你吃 三吨 的米饭,你的肚子能盛得下吗?


实机中 map --mem  这个7g文件,成功进入系统。
但在实机中ipxe下 map --mem  /img/vhd,成功加载进入了内存,但报错,bootmgr image错误,无法引导。
所以在ipxe下问题多多!
另外我在pxe下也有测试,map --mem  /img/vhd无问题。
回复

使用道具 举报

5#
发表于 2015-9-23 21:36:53 | 只看该作者
有可能是 ipxe 模块不支持大文件。

grub4dos 本身支持大文件,但 ipxe 的代码是移植过来的,它不一定支持大文件。

点评

ipxe下 map --mem /img/vhd 这个7g (不是http方式)这个也会有问题,同样的东西在pxe下无问题。  详情 回复 发表于 2015-9-23 21:40
回复

使用道具 举报

6#
 楼主| 发表于 2015-9-23 21:40:02 | 只看该作者
不点 发表于 2015-9-23 21:36
有可能是 ipxe 模块不支持大文件。

grub4dos 本身支持大文件,但 ipxe 的代码是移植过来的,它不一定支 ...

ipxe下 map  --mem  /img/vhd 这个7g (不是http方式)这个也会有问题,同样的东西在pxe下无问题。
回复

使用道具 举报

7#
发表于 2015-9-23 21:46:45 | 只看该作者
那就是说,ipxe 本身有问题,或者是移植到 grub4dos 以后,出现了某种冲突。

怀疑仍旧是由于 ipxe 的代码不支持大文件所造成的。

点评

是的,7g的大文件,立刻就返回了错误,就说明它没有进行读取。pxe下grub4dos很稳定,但肯定无法读取这么大的文件,所以才试 ipxe的。  详情 回复 发表于 2015-9-23 21:51
回复

使用道具 举报

8#
 楼主| 发表于 2015-9-23 21:51:44 | 只看该作者
不点 发表于 2015-9-23 21:46
那就是说,ipxe 本身有问题,或者是移植到 grub4dos 以后,出现了某种冲突。

怀疑仍旧是由于 ipxe 的代 ...

是的,7g的大文件,立刻就返回了错误,就说明它没有进行读取。pxe下grub4dos很稳定,但肯定无法读取这么大的文件,所以才试 ipxe的。
回复

使用道具 举报

9#
发表于 2015-9-23 22:21:55 | 只看该作者
6楼和8楼互相矛盾。你究竟想说的是啥?

点评

我都不知矛盾的地方在哪?说的就是同一个意思,同意你的说法。  详情 回复 发表于 2015-9-23 22:25
回复

使用道具 举报

10#
 楼主| 发表于 2015-9-23 22:25:45 | 只看该作者
不点 发表于 2015-9-23 22:21
6楼和8楼互相矛盾。你究竟想说的是啥?

我都不知矛盾的地方在哪?说的就是同一个意思,同意你的说法。
回复

使用道具 举报

11#
发表于 2015-9-23 22:39:06 | 只看该作者
6楼说 pxe 下无问题,8楼说 pxe 下不能读大文件。这不是矛盾吗?

点评

误会了前面的说法,pxe下map --mem /img/vhd无问题,但pxe下,不能 map --mem http://吧。 另ipxe 下 map --mem (hd0,0)/img/vhd 虽然能在内存加载完,但无法引导成功,所以即使在ipxe下map --mem htp://加载  详情 回复 发表于 2015-9-23 22:53
回复

使用道具 举报

12#
 楼主| 发表于 2015-9-23 22:53:37 | 只看该作者
不点 发表于 2015-9-23 22:39
6楼说 pxe 下无问题,8楼说 pxe 下不能读大文件。这不是矛盾吗?


误会了前面的说法,pxe下map --mem (hd0,0) /img/vhd无问题,但pxe下,不能  map --mem http://吧。
另ipxe 下 map --mem  (hd0,0)/img/vhd  虽然能在内存加载完,但无法引导成功,所以即使在ipxe下map --mem htp://加载到内存成功,也会无法引导成功。
回复

使用道具 举报

13#
发表于 2015-9-23 23:04:09 | 只看该作者
好的,明白了。是 ipxe 移植过来之后,产生了内存冲突或者其他隐蔽的错误。等待 chenall 前来答复吧。

回复

使用道具 举报

14#
发表于 2015-9-24 09:06:15 | 只看该作者
首先,建议试试最新版本的,楼主的版本有点老.

加载大文件的问题,估计是IPXE和GRUB4DOS使用的内存有冲突,我会再抽时间看看.需要使用IPXE的内存使用情况.

点评

最新版本及高版本 map --mem (hd0,0)/img,直接重启,无法加载完到内存。  详情 回复 发表于 2015-9-24 10:51
回复

使用道具 举报

15#
 楼主| 发表于 2015-9-24 10:51:22 | 只看该作者
chenall 发表于 2015-9-24 09:06
首先,建议试试最新版本的,楼主的版本有点老.

加载大文件的问题,估计是IPXE和GRUB4DOS使用的内存有冲突, ...

最新版本及高版本 map  --mem  (hd0,0)/img,直接重启,无法加载完到内存。
回复

使用道具 举报

16#
发表于 2015-9-27 12:32:53 | 只看该作者
建议你用纯IPXE启动(启动文件undionly.kpxe)测试一下这个7G的大文件vhd试试。
如果成功,说明C大移值的IPXE代码可能内存冲突。
我也好久没测试grldr集成IPXE功能了,不知是否有什么改进?!

点评

测试过了,结果同上,ipxe下对于这个7g文件始终存在上面的两个问题,不论grub4dos版本。报告这些问题,只是我的副产品。  详情 回复 发表于 2015-9-27 13:52
回复

使用道具 举报

17#
 楼主| 发表于 2015-9-27 13:52:06 来自手机 | 只看该作者
zhaohj 发表于 2015-9-27 12:32
建议你用纯IPXE启动(启动文件undionly.kpxe)测试一下这个7G的大文件vhd试试。
如果成功,说明C大移值的I ...

测试过了,结果同上,ipxe下对于这个7g文件始终存在上面的两个问题,不论grub4dos版本。报告这些问题,只是我的副产品。
回复

使用道具 举报

18#
发表于 2015-9-27 15:38:59 | 只看该作者
那就很遗憾了,期待哪一天grub4dos内核支持自己的http,ftp而无需ipxe。
回复

使用道具 举报

19#
发表于 2015-9-28 15:59:15 | 只看该作者
PXE不适用于加载大文件.

这么大的文件加载的需要很长一段时间,还不知直接做成ISCSI的.这样访问速度也比较快.

点评

是的,PXE 是实模式的程序(可用的内存小),再加上网速瓶颈,启动大文件已经是没有意义的了。 不过,集成到 grub4dos 上的 ipxe 代码,它的内存使用与 grub4dos 冲突,这个问题应该解决。我怀疑是 malloc 分配的  详情 回复 发表于 2015-9-28 16:59
回复

使用道具 举报

20#
发表于 2015-9-28 16:59:45 | 只看该作者
chenall 发表于 2015-9-28 15:59
PXE不适用于加载大文件.

这么大的文件加载的需要很长一段时间,还不知直接做成ISCSI的.这样访问速度也比 ...

是的,PXE 是实模式的程序(可用的内存小),再加上网速瓶颈,启动大文件已经是没有意义的了。

不过,集成到 grub4dos 上的 ipxe 代码,它的内存使用与 grub4dos 冲突,这个问题应该解决。我怀疑是 malloc 分配的内存,与 ipxe 的内存产生了交叉和冲突。如果内存有冲突,即使是加载小文件,也不安全。虽然目前没暴露出问题,但假如有 bug,那就是定时炸弹,将来会暴露出问题。

点评

pxe下的grub4dos的blksize实际上超不过mtu(1500),尽管可以设到16384,grub4dos的tftp客户端是受限的。  详情 回复 发表于 2015-9-29 09:40
回复

使用道具 举报

21#
 楼主| 发表于 2015-9-29 09:40:30 来自手机 | 只看该作者
不点 发表于 2015-9-28 16:59
是的,PXE 是实模式的程序(可用的内存小),再加上网速瓶颈,启动大文件已经是没有意义的了。

不过, ...

pxe下的grub4dos的blksize实际上超不过mtu(1500),尽管可以设到16384,grub4dos的tftp客户端是受限的。

点评

你这是个认识误区。这与 grub4dos 没有多少关系。grub4dos 只是调用 pxe 的 bios 函数而已。 是主板(网卡) pxe bios 的限制。在不同的主板(网卡)之下,grub4dos 的具体表现,有很大差异。有的主板(网卡)的  详情 回复 发表于 2015-9-29 11:19
回复

使用道具 举报

22#
发表于 2015-9-29 11:19:48 | 只看该作者
ygao2004 发表于 2015-9-29 09:40
pxe下的grub4dos的blksize实际上超不过mtu(1500),尽管可以设到16384,grub4dos的tftp客户端是受限的。

你这是个认识误区。这与 grub4dos 没有多少关系。grub4dos 只是调用 pxe 的 bios 函数而已。

是主板(网卡) pxe bios 的限制。在不同的主板(网卡)之下,grub4dos 的具体表现,有很大差异。有的主板(网卡)的 pxe BIOS 只支持 512 字节的 block size。

grub4dos 为了安全起见,只探测 1408 的 block size,如果探测的结果是 “失败” 或 “不支持”,则采用默认的 512 字节的 block size。

用户确实可以手动设置 blksize 的大小,不过,那完全只能用于用户自己的电脑,无法把它当作一个通用的选项。刚才说过,有许多主板(网卡)的 pxe BIOS 只支持 512 字节的 blksize,因此,根本不存在其他的 blksize 值能够作为通用的 blksize。有许多电脑支持 1408 的 blksize。其他的电脑则可能支持很大的 blksize。但是,为了安全起见(同义词是 “为了在探测时不至于死机”),grub4dos 只探测一个 1408 的 blksize 就结束探测。如果支持,就采用 blksize = 1408;如果不支持,就采用 blksize=512。

回复

使用道具 举报

23#
发表于 2015-10-2 22:56:04 | 只看该作者
我不了解 ipxe 是以什么样的方式移植到 grub4dos 的。我随便猜测一下可能出现内存冲突的场景。

假如 ipxe 的代码要占据内存地址 32M 以上的某些空间,则这些代码有可能破坏掉 grub4dos 的 malloc 所分配的内存,从而产生问题。还有一种可能性是,ipxe 的代码使用了常规内存,而这些常规内存也是 grub4dos 要使用的内存,从而出现冲突。

又假如 ipxe 本身也调用 grub4dos 的 malloc 函数,这些 malloc 所分配的内存也可能会与内存盘所占据的内存空间产生冲突。

另外,如果 malloc 所分配的内存没有正确释放,或者 free 函数释放内存的时机不正确,都可能带来内存冲突。

点评

其实也不能算是移植... 启动IPXE之后它扩展了原来的PXE中断 GRUB4DOS只是调用了IPXE提供的中断来读取文件.  详情 回复 发表于 2015-10-3 09:12
回复

使用道具 举报

24#
发表于 2015-10-3 09:12:25 | 只看该作者
不点 发表于 2015-10-2 22:56
我不了解 ipxe 是以什么样的方式移植到 grub4dos 的。我随便猜测一下可能出现内存冲突的场景。

假如 ipx ...

其实也不能算是移植...
启动IPXE之后它扩展了原来的PXE中断
GRUB4DOS只是调用了IPXE提供的中断来读取文件.





点评

那么它的中断处理程序是否占用了过大的代码空间?它的中断处理程序又是否使用了过大的数据空间或堆栈空间?这些空间就有可能与 grub4dos 发生冲突了。 两个软件揉到一起,最可能出问题的,就是内存互相覆盖。而且  详情 回复 发表于 2015-10-3 11:27
回复

使用道具 举报

25#
发表于 2015-10-3 11:27:03 | 只看该作者
chenall 发表于 2015-10-3 09:12
其实也不能算是移植...
启动IPXE之后它扩展了原来的PXE中断
GRUB4DOS只是调用了IPXE提供的中断来读取文 ...

那么它的中断处理程序是否占用了过大的代码空间?它的中断处理程序又是否使用了过大的数据空间或堆栈空间?这些空间就有可能与 grub4dos 发生冲突了。

两个软件揉到一起,最可能出问题的,就是内存互相覆盖。而且这还不容易排查。你只有仔细检查 ipxe 的源代码,看看它究竟是怎样使用内存空间的。

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 14:44

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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