无忧启动论坛

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

[分享] iPXE wimboot 现在支持UEFI下的http/ftp启动了

    [复制链接]
发表于 2014-9-8 11:53:11 | 显示全部楼层 |阅读模式
本帖最后由 我是神仙 于 2014-9-29 12:24 编辑

iPXE网络启动可以通过HTTP/FTP轻松达到千兆速度,比普通TFTP快得多

不过以前iPXE对UEFI支持不太好,UEFI时好像不支持http/ftp等高级功能。

但前几天, iPXE上的wimboot有更新了(ipxe.org/wimboot), 支持UEFI下的http/ftp启动windows PE 8.1了。

试了一下确实很不错。有兴趣的可以去试一下

新版2.3.0支持32位和64位的UEFI启动
https://git.ipxe.org/release/wimboot/wimboot-latest.zip


32位用wimboot.i386


普通BIOS和32位EFI 64位EFI要分别用不同的iPXE版本才能启动。

如果想用同一个PXE服务器 同时适应pcibios 及 32位 和 64位 不同架构的网络启动,需要对DHCP服务作相应的配置。

如果是用的HanewinDHCP Server,可以多建几个配置profile.  (Option > manage profiles > add)

并用Vendor Class作为条件


PXEClient:Arch:00000 则指向 ipxe/pcibios/ipxe.pxe
PXEClient:Arch:00006 则指向 ipxe/efi.i386/ipxe.efi
PXEClient:Arch:00007 则指向 ipxe/efi.x86_64/ipxe.efi
PXEClient:Arch:00009 则指向 ipxe/default.ipxe
...

PXEClient:Arch:00000这个也可以就用默认的 for Interface IP Address作为条件就行了


   As of the writing of this document, the following pre-boot
   architecture types have been requested.

            Type   Architecture Name
            ----   -----------------
              0    Intel x86PC
              1    NEC/PC98
              2    EFI Itanium
              3    DEC Alpha
              4    Arc x86
              5    Intel Lean Client
              6    EFI IA32
              7    EFI BC
              8    EFI Xscale
              9    EFI x86-64
http://tools.ietf.org/html/rfc4578

efi.jpg

ipxe.zip (652.66 KB, 下载次数: 565)

评分

参与人数 1无忧币 +1 收起 理由
2010guoguo + 1

查看全部评分

 楼主| 发表于 2014-9-8 12:21:58 | 显示全部楼层
本帖最后由 我是神仙 于 2014-9-25 09:38 编辑

我看那个snponly.efi不好用。一般都用的ipxe.efi.反正换着用 哪个行就用哪个

https://rom-o-matic.eu/ 这里可以编译。不过我也经常打不开这个网站

ipxe.zip

652.66 KB, 下载次数: 231, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2014-9-8 12:10:42 | 显示全部楼层
有没有新版ipxe-snponly.efi,懒得去编译,分享下
试试新版兼容性怎么样
回复

使用道具 举报

 楼主| 发表于 2014-9-8 12:25:09 | 显示全部楼层
ljycslg 发表于 2014-9-8 12:10
有没有新版ipxe-snponly.efi,懒得去编译,分享下
试试新版兼容性怎么样

已上传 试试吧

点评

不错,实机测试很给力 vmware上HTTP超给力,bootx64.efi的tftp基本龟速 遗憾的是hyper-V无论是http还是tftp都是龟速  详情 回复 发表于 2014-9-8 13:13
回复

使用道具 举报

发表于 2014-9-8 13:13:58 | 显示全部楼层

不错,实机测试很给力
vmware上HTTP超给力,bootx64.efi的tftp基本龟速
遗憾的是hyper-V无论是http还是tftp都是龟速
回复

使用道具 举报

 楼主| 发表于 2014-9-8 15:50:18 | 显示全部楼层
ljycslg 发表于 2014-9-8 13:13
不错,实机测试很给力
vmware上HTTP超给力,bootx64.efi的tftp基本龟速
遗憾的是hyper-V无论是http还是 ...

确实 见识过了wimboot的千兆威力之后 再也不能忍受tftp那个龟速了


hyperV那个确实要慢一些 搞不懂
回复

使用道具 举报

发表于 2014-9-10 05:04:16 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-10 05:38 编辑

没玩成功,启动出菜单,但提示错误,我的菜单如下:
  1. #!ipxe
  2.   #set menu-timeout 8000
  3.    set menu-default w8pe64
  4.    isset ${ip} || dhcp
  5.    isset ${next-server} || set next-server 192.168.7.100
  6. :start
  7.   menu iPXE EFI Boot Menu
  8.   item --gap --             -------------------------------- H3 PE TOOL ---------------------------
  9.   item w8pe64               Win8 PE 64
  10.   item w81pe64              Win81 PE 64
  11.   item --gap --             -----------------------------------------------------------------------
  12.   choose --timeout ${menu-timeout} --default ${menu-default} selected
  13.   goto ${selected}

  14. :failed
  15.   echo Booting failed, dropping to shell
  16.   goto shell

  17. :w8pe64
  18.   kernel http://${next-server}/BOOT/wimboot
  19.   initrd http://${next-server}/efi/boot/bootx64.efi bootx64.efi
  20.   initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
  21.   initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
  22.   initrd http://${next-server}/BOOT/H3_8PE64.WIM        H3_8PE64.WIM
  23.   boot || goto failed
  24.   goto start

  25. :w81pe64
  26.   kernel http://${next-server}/BOOT/wimboot
  27.   initrd http://${next-server}/efi/boot/bootx64.efi        bootx64.efi
  28.   initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
  29.   initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
  30.   initrd http://${next-server}/BOOT/H3_81P64.WIM        H3_81P64.WIM
  31.   boot || goto failed
  32.   goto start

复制代码


所有文件读取正常,BCD中菜单也可以出,但最后一步出错。过程如下:
Windows 8 x64 -EFI-2014-09-10-05-22-09.png

Windows 8 x64 -EFI-2014-09-10-05-02-11.png

Windows 8 x64 -EFI-2014-09-10-05-02-26.png

Windows 8 x64 -EFI-2014-09-10-05-02-38.png

我大致是这么玩的:
1、先到网站去编译一个snponly.efi,再改名:efi/boot/iPXE64.efi。脚本简单,就是两条语句
#!ipxe
   isset ${ip} || dhcp
   chain --autofree BOOT/H3_iPXEM.EFI

2、将真正的菜单内容(见上)保存为BOOT/H3_iPXEM.EFI

3、在haneWIN指定EFI启动文件为efi/boot/iPXE64.efi,如下图:
hane.png

又用pause暂停了wimboot一下,好象也无问题:
Windows 8 x64 -EFI-2014-09-10-05-36-14.png
回复

使用道具 举报

发表于 2014-9-10 06:25:30 | 显示全部楼层
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。
回复

使用道具 举报

发表于 2014-9-10 08:10:36 | 显示全部楼层
hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

是有这个问题,wimboot新版也有bug,在vmware下bios启动蓝屏,暂时只能这样,bios用老版2.1.0版,efi用新版
回复

使用道具 举报

 楼主| 发表于 2014-9-10 10:16:51 | 显示全部楼层
ljycslg 发表于 2014-9-10 08:10
是有这个问题,wimboot新版也有bug,在vmware下bios启动蓝屏,暂时只能这样,bios用老版2.1.0版,efi用新 ...

我都是用vmware呢 . 8.02,bios或uefi都没有蓝屏

点评

我是最新版VM ,仔细测试了下,本机上的VM出现灵异现象,是用桥接模式出问题,host-only就可以,在其他机子上的VM桥接也可以,问题不大  详情 回复 发表于 2014-9-10 10:48
回复

使用道具 举报

 楼主| 发表于 2014-9-10 10:17:27 | 显示全部楼层
本帖最后由 我是神仙 于 2014-9-10 11:43 编辑
hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。


initrd http://${next-server}/BOOT/H3_8PE64.WIM        H3_8PE64.WIM

试了一下,改成这样就行了:
initrd http://${next-server}/BOOT/H3_8PE64.WIM        boot.WIM

---
哦 efi那个确实改名了就不行了。。。

--再修改一下 不是不能改名 而是不支持你那个名字。

具体点说,感觉不支持下划线 把你那个名字中的下划线去掉 就可以启动了

initrd http://${next-server}/BOOT/H38PE64.WIM        H38PE64.WIM
回复

使用道具 举报

发表于 2014-9-10 10:48:22 | 显示全部楼层
我是神仙 发表于 2014-9-10 10:16
我都是用vmware呢 . 8.02,bios或uefi都没有蓝屏

我是最新版VM ,仔细测试了下,本机上的VM出现灵异现象,是用桥接模式出问题,host-only就可以,在其他机子上的VM桥接也可以,问题不大
回复

使用道具 举报

 楼主| 发表于 2014-9-10 11:22:38 | 显示全部楼层
刚才看了一下 昨天wimboot的作者又发布了一个新版本2.2.4!

看来这几天作者正在频繁更新。可以再等下。有渠道的也可以把自己的测试结果告诉作者一下以便尽快修正吧


12 hours ago          Michael Brown        [release] Release version 2.2.4 master v2.2.4
12 hours ago          Michael Brown        [efi] Force correct DeviceHandle on loaded bootmgfw.efi
。。。
回复

使用道具 举报

 楼主| 发表于 2014-9-10 11:43:37 | 显示全部楼层
本帖最后由 我是神仙 于 2014-9-10 11:57 编辑
hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。


试过了 不是不能改名 而是不支持你那个名字。

具体点说,感觉不支持下划线 把你那个名字中的下划线去掉 就可以启动了

initrd http://${next-server}/BOOT/H38PE64.WIM        H38PE64.WIM

--
除了脚本,bcd文件中也要对应修改


--

晕 再改正一下

再试了一下 感觉不是不支持下划线,而是文件名长度只支持7个字母。所以任意删除一个字符感觉都可以启动,如把H3_8PE64.WIM 改为 H3_8PE6.WIM

不过一般都是8.3文件名,这里为什么是限制为7 没搞懂
回复

使用道具 举报

 楼主| 发表于 2014-9-10 12:02:20 | 显示全部楼层
hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。


经过多次实验,确认它这个wim的文件名只能是7个字符以内。8个字符就会出错
回复

使用道具 举报

 楼主| 发表于 2014-9-10 12:03:10 | 显示全部楼层
hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

7个字符以内

点评

竟然是这个样子的,我试一下,看来还有bug,不忙更新。先好好测试一下。  详情 回复 发表于 2014-9-10 12:25
回复

使用道具 举报

发表于 2014-9-10 12:25:52 | 显示全部楼层

竟然是这个样子的,我试一下,看来还有bug,不忙更新。先好好测试一下。
回复

使用道具 举报

 楼主| 发表于 2014-9-10 12:52:13 | 显示全部楼层
现在新版的wimboot同时支持efi和bios启动了,理想的情况下 可以使用完全相同的脚本启动

理想的情况就是比如说直接用win8安装光盘中的sources\boot.wim,可以自动解压里面的bootmgr 或 bootmgfw.efi,不用单独提供。
并且bcd文件即使是指向winload.exe它也可以自动指向winload.efi

如果是其他wim, 如hhh333那个,也可以用同一个脚本,只是要在脚本中做一下判断。如果是EFI启动就加载bootx64.efi,如果是BIOS就加载bootmgr(或bootmgr.exe,都可以。它是自动从bootmgr解压bootmgr.exe)


判断是否为EFI启动:
iPXE 启动后有个变量platform,判断一下这个变量是 efi 还是 pcbios 就行 了

iPXE> show platform
builtin/platform:string = efi


点评

我想为启动项指定不同的BCD,如: initrd http://${next-server}/efi/microsoft/boot/b64 bcd 提示出错,必须为 initrd http://${next-server}/efi/microsoft/boot/bcd bcd 这个算不算bug,用了kernel http://  详情 回复 发表于 2014-9-10 13:39
回复

使用道具 举报

发表于 2014-9-10 13:39:28 | 显示全部楼层
我是神仙 发表于 2014-9-10 12:52
现在新版的wimboot同时支持efi和bios启动了,理想的情况下 可以使用完全相同的脚本启动

理想的情况就是 ...

我想为启动项指定不同的BCD,如:  initrd http://${next-server}/efi/microsoft/boot/b64 bcd
提示出错,必须为  initrd http://${next-server}/efi/microsoft/boot/bcd bcd

这个算不算bug,用了kernel http://${next-server}/BOOT/wimboot rawbcd也没有用。
回复

使用道具 举报

 楼主| 发表于 2014-9-10 13:42:05 | 显示全部楼层
本帖最后由 我是神仙 于 2014-9-10 13:47 编辑
hhh333 发表于 2014-9-10 13:39
我想为启动项指定不同的BCD,如:  initrd http://${next-server}/efi/microsoft/boot/b64 bcd
提示出错 ...


我自己用的是 initrd boot/bcf bcf

两个文件名要一致。bcf是在bootmgr.exe中修改

--
efi的话应该是修改bootx64.efi吧  .efi文件这个倒没改过。不过我在其他地方好像看到你改过.efi文件的吧

点评

记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN bootmgr 是可以的  详情 回复 发表于 2014-9-10 13:47
回复

使用道具 举报

发表于 2014-9-10 13:47:30 | 显示全部楼层
我是神仙 发表于 2014-9-10 13:42
我自己用的是 initrd boot/bcf bcf

两个文件名要一致。bcf是在bootmgr.exe中修改

记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的
回复

使用道具 举报

 楼主| 发表于 2014-9-10 13:50:03 | 显示全部楼层
hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具修改 不过没改过。bootmgr.exe倒改过的,只改一个字节就把bcd改成bcf了

点评

我改过bootx64.efi,没有问题,不想搞很多启动文件  详情 回复 发表于 2014-9-10 13:58
回复

使用道具 举报

发表于 2014-9-10 13:58:42 | 显示全部楼层
我是神仙 发表于 2014-9-10 13:50
估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具 ...

我改过bootx64.efi,没有问题,不想搞很多启动文件
回复

使用道具 举报

 楼主| 发表于 2014-9-10 14:08:11 | 显示全部楼层
hhh333 发表于 2014-9-10 13:58
我改过bootx64.efi,没有问题,不想搞很多启动文件

刚才我也试了下 查找5C 00 42 00 43 00 44 即\BCD 改为其他的如BCG 确实可以启动。 现在那个initrd好像确实要求文件名要一致。 pxe直接启动时好像有个DHCP选项(252)可以控制bcd文件名,wimboot倒不知道可不可以用到这个选项
回复

使用道具 举报

 楼主| 发表于 2014-9-10 14:16:10 | 显示全部楼层
hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

我试了下 现在新版的wimboot实际上简化了 initrd后面不用重复一次文件名了

即不用initrd boot/bcd bcd
而是直接 initrd boot/bcd 这样就行了。后面写的文件名没啥用了。

本身是简化了。不过想用这个来重命名文件却不行了。。。到底是好是坏呢...
回复

使用道具 举报

 楼主| 发表于 2014-9-10 17:33:18 | 显示全部楼层
hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

其实是语法错误。正确的语法是  initrd [--name <name>] [--timeout <timeout>] <uri> [<arguments>...]
ipxe.org/cmd/initrd  . 即 改成 initrd --name bootmgr http://${next-server}/BOOT/H3_MGR16.BIN        就行了

点评

从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件名改动这么大。。。  详情 回复 发表于 2014-9-10 17:35
回复

使用道具 举报

 楼主| 发表于 2014-9-10 17:35:44 | 显示全部楼层
我是神仙 发表于 2014-9-10 17:33
其实是语法错误。正确的语法是  initrd [--name ] [--timeout ]  [...]
ipxe.org/cmd/initrd  . 即 改 ...

从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件名改动这么大。。。

点评

现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。  详情 回复 发表于 2014-9-11 09:42
回复

使用道具 举报

发表于 2014-9-11 09:42:42 | 显示全部楼层
本帖最后由 hhh333 于 2014-9-11 09:46 编辑
我是神仙 发表于 2014-9-10 17:35
从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件 ...


现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。
这是菜单,可以为同一个启动文件启动不同的BCD了。
  1. #!ipxe
  2.   #set menu-timeout 8000
  3.    set menu-default w8pe64
  4.    isset ${ip} || dhcp
  5.    isset ${next-server} || set next-server 192.168.7.100
  6. :start
  7.   menu iPXE EFI Boot Menu
  8.   item --gap --             -------------------------------- H3 PE TOOL ---------------------------
  9.   item w8pe64               Win8 PE 64
  10.   item w81pe64              Win81 PE 64
  11.   item --gap --             -----------------------------------------------------------------------
  12.   choose --timeout ${menu-timeout} --default ${menu-default} selected
  13.   goto ${selected}

  14. :failed
  15.   echo Booting failed, dropping to shell
  16.   goto shell

  17. :w8pe64
  18.   kernel http://${next-server}/BOOT/wimboot
  19.   initrd http://${next-server}/efi/boot/bootx64.efi
  20.   initrd -n BCD http://${next-server}/efi/microsoft/boot/b64
  21.   initrd http://${next-server}/BOOT/boot.sdi
  22.   initrd http://${next-server}/BOOT/H3_864.WIM
  23.   boot || goto failed
  24.   goto start

  25. :w81pe64
  26.   kernel http://${next-server}/BOOT/wimboot rawbcd
  27.   initrd http://${next-server}/efi/boot/bootx64.efi
  28.   initrd -n BCD http://${next-server}/efi/microsoft/boot/b16
  29.   initrd http://${next-server}/BOOT/boot.sdi
  30.   initrd http://${next-server}/BOOT/H3_8164.WIM
  31.   boot || goto failed
  32.   goto start

复制代码
回复

使用道具 举报

 楼主| 发表于 2014-9-11 19:33:59 | 显示全部楼层
hhh333 发表于 2014-9-11 09:42
现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。
...

又试了下 好像这个--name或-n的语法只是针对efi情况的。在普通bios时还是要用initrd bcd bcd这种情况重复一下文件才行。同一个wimboot文件却有两种语法,应该不是故意为之,感觉算是bug吧

点评

然而到现在都还是这种格式 不知道为什么?  详情 回复 发表于 2022-12-8 15:51
回复

使用道具 举报

 楼主| 发表于 2014-9-12 13:03:14 | 显示全部楼层
我是神仙 发表于 2014-9-8 12:21
我看那个snponly.efi不好用。一般都用的ipxe.efi.反正换着用 哪个行就用哪个

https://rom-o-matic.eu/  ...

忘了说 这个加了个内嵌脚本自动加载 default.ipxe 。免得DHCP循环
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 06:17

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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