无忧启动论坛

标题: grub4dos 在 ipxe 下的 bug? [打印本页]

作者: ygao2004    时间: 2015-9-23 20:27
标题: grub4dos 在 ipxe 下的 bug?
本帖最后由 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,
当我改个小文件时,能成功加载。




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


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


作者: ygao2004    时间: 2015-9-23 21:26
本帖最后由 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无问题。
作者: 不点    时间: 2015-9-23 21:36
有可能是 ipxe 模块不支持大文件。

grub4dos 本身支持大文件,但 ipxe 的代码是移植过来的,它不一定支持大文件。
作者: ygao2004    时间: 2015-9-23 21:40
不点 发表于 2015-9-23 21:36
有可能是 ipxe 模块不支持大文件。

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

ipxe下 map  --mem  /img/vhd 这个7g (不是http方式)这个也会有问题,同样的东西在pxe下无问题。
作者: 不点    时间: 2015-9-23 21:46
那就是说,ipxe 本身有问题,或者是移植到 grub4dos 以后,出现了某种冲突。

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

作者: ygao2004    时间: 2015-9-23 21:51
不点 发表于 2015-9-23 21:46
那就是说,ipxe 本身有问题,或者是移植到 grub4dos 以后,出现了某种冲突。

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

是的,7g的大文件,立刻就返回了错误,就说明它没有进行读取。pxe下grub4dos很稳定,但肯定无法读取这么大的文件,所以才试 ipxe的。
作者: 不点    时间: 2015-9-23 22:21
6楼和8楼互相矛盾。你究竟想说的是啥?
作者: ygao2004    时间: 2015-9-23 22:25
不点 发表于 2015-9-23 22:21
6楼和8楼互相矛盾。你究竟想说的是啥?

我都不知矛盾的地方在哪?说的就是同一个意思,同意你的说法。
作者: 不点    时间: 2015-9-23 22:39
6楼说 pxe 下无问题,8楼说 pxe 下不能读大文件。这不是矛盾吗?
作者: ygao2004    时间: 2015-9-23 22:53
不点 发表于 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://加载到内存成功,也会无法引导成功。

作者: 不点    时间: 2015-9-23 23:04
好的,明白了。是 ipxe 移植过来之后,产生了内存冲突或者其他隐蔽的错误。等待 chenall 前来答复吧。


作者: chenall    时间: 2015-9-24 09:06
首先,建议试试最新版本的,楼主的版本有点老.

加载大文件的问题,估计是IPXE和GRUB4DOS使用的内存有冲突,我会再抽时间看看.需要使用IPXE的内存使用情况.
作者: ygao2004    时间: 2015-9-24 10:51
chenall 发表于 2015-9-24 09:06
首先,建议试试最新版本的,楼主的版本有点老.

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

最新版本及高版本 map  --mem  (hd0,0)/img,直接重启,无法加载完到内存。
作者: zhaohj    时间: 2015-9-27 12:32
建议你用纯IPXE启动(启动文件undionly.kpxe)测试一下这个7G的大文件vhd试试。
如果成功,说明C大移值的IPXE代码可能内存冲突。
我也好久没测试grldr集成IPXE功能了,不知是否有什么改进?!
作者: ygao2004    时间: 2015-9-27 13:52
zhaohj 发表于 2015-9-27 12:32
建议你用纯IPXE启动(启动文件undionly.kpxe)测试一下这个7G的大文件vhd试试。
如果成功,说明C大移值的I ...

测试过了,结果同上,ipxe下对于这个7g文件始终存在上面的两个问题,不论grub4dos版本。报告这些问题,只是我的副产品。
作者: zhaohj    时间: 2015-9-27 15:38
那就很遗憾了,期待哪一天grub4dos内核支持自己的http,ftp而无需ipxe。
作者: chenall    时间: 2015-9-28 15:59
PXE不适用于加载大文件.

这么大的文件加载的需要很长一段时间,还不知直接做成ISCSI的.这样访问速度也比较快.
作者: 不点    时间: 2015-9-28 16:59
chenall 发表于 2015-9-28 15:59
PXE不适用于加载大文件.

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

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

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


作者: ygao2004    时间: 2015-9-29 09:40
不点 发表于 2015-9-28 16:59
是的,PXE 是实模式的程序(可用的内存小),再加上网速瓶颈,启动大文件已经是没有意义的了。

不过, ...

pxe下的grub4dos的blksize实际上超不过mtu(1500),尽管可以设到16384,grub4dos的tftp客户端是受限的。
作者: 不点    时间: 2015-9-29 11:19
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。


作者: 不点    时间: 2015-10-2 22:56
我不了解 ipxe 是以什么样的方式移植到 grub4dos 的。我随便猜测一下可能出现内存冲突的场景。

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

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

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


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

假如 ipx ...

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






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

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

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






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