无忧启动论坛

标题: UEFI下利用ixpe远程加载isoboot直接启动PE光盘镜像 [打印本页]

作者: dido0379    时间: 2019-6-10 14:45
标题: UEFI下利用ixpe远程加载isoboot直接启动PE光盘镜像
本帖最后由 dido0379 于 2019-9-12 12:55 编辑

要求镜像必须支持UEFI启动

用到的文件在附件中

        因为我的工作经常要启动各种pe,在uefi下本地或者ipxe远程启动PE的iso镜像文件不怎么方便,每次都要解压出来用wimboot来启动,所以一直想找一个工具能在UEFI本地或者ipxe远程直接启动iso镜像文件(本地启动iso镜像文件只找到XORBOOT可以用),后来看了这个教程http://www.lab-z.com/stu132rd/于是有了上面那个东西。
        再经过一段时间的修改,总算可以不用ramdiskdxe了,因为ramdiskdxe.efi在较新的已经包含了此驱动的UEFI BIOS上面无法工作。并且先要载入内存需要占用更多的内存和时间。
        现在也可以用efishell载入或者grub2来载入isoboot,并且加入了一个简单的配置文件,可以在配置文件第一行里面写上iso文件的路径。
        配置文件只支持一行,指出iso文件的路径,可以是相对路径如"..\123\test.iso"或者"567.iso",也可以是绝对路径如"\abc\zxc\test2.iso"。
        如果没有配置文件,那么isoboot会在自己所在目录查找iso文件,用找到的第一个iso文件来启动。
        所以ipxe的菜单可以写成两行
                initrd         ${xieyi}://${next-server}/test.iso
                chain          ${xieyi}://${next-server}/isoboot.efi
       
        用grub2的话类似这样"chainloader /123/isoboot.efi"就可以了。
        另外我没有在真实机器上面测试,只在Q启动测试器和VMWARE里面测试过。有条件的朋友可以把测试结果反馈到这里。但是我可能不会有进一步的需求来修改了,所以把源代码也放在这里。有需要的可以自己修改。

        6月29日 重做驱动部分,已兼容铭瑄B150,华硕B250,华硕B450,附件已更新

        7月6日 添加命令行参数支持,这样就可以用同一个isoboot.efi文件启动不同文件夹或者相同文件夹下的不同的iso文件,grub2菜单可以写成
                chainloader /zxc/isoboot.efi 123/test.iso(相对路径)或者
                chainloader /zxc/isoboot.efi  /abc/test.iso(绝对路径),附件已更新。
        7月7日 在使用中发现有的iso镜像把内置2.8M大小的bootimage的扇区数设置成了1个扇区(800字节)导致不能启动。改为读取内置bootimage引导区的扇区数。并且限定为最小2.8M(0x1680个扇区)。
        7月9日 调整了驱动安装顺序和策略,命令行增加了-mem,-wait n,可以按键取消倒计时,通过了少量的测试,附件已更新。

        9月12日 ,imgboot发布,包含isoboot的所有功能,增加32位版本,兼容UEFI2.0固件,增加对硬盘分区的识别,允许镜像不在imgboot所在分区。用法见压缩包中的配置文件。

isoboot.rar

17.84 KB, 下载次数: 360, 下载积分: 无忧币 -2

MyRamDisk.rar

18.87 KB, 下载次数: 247, 下载积分: 无忧币 -2

源代码

imgboot61.rar

51.52 KB, 下载次数: 594, 下载积分: 无忧币 -2


作者: devilma    时间: 2019-6-10 15:30
不错😊没事试试看
作者: 未完成的歌    时间: 2019-6-10 16:07
uefi总算支持ramdisk了


                                        藏起来的小尾巴,不让你看!  
作者: amita    时间: 2019-6-13 16:14
下载来试试看,多谢分享啊
作者: 扬帆起航    时间: 2019-6-13 17:14
感谢分享
作者: dido0379    时间: 2019-7-6 14:11
本帖最后由 dido0379 于 2019-8-8 00:26 编辑

以前用grub4dos,map命令启动pe.iso真是方便。这两年一直在找能简单的在UEFI下直接启动pe.iso镜像的东西,边学边做总算完成了。
作者: hkkitlee    时间: 2019-7-6 14:32
試一下
作者: ksafei    时间: 2019-7-6 15:07
实机测试UEFI启动,chainloader成功
作者: bnsgj    时间: 2019-7-6 16:11
高手
作者: 熄灭的烟    时间: 2019-7-7 13:29
ipxe不是早在N年前就支持UEFI启动ISO了吗,是我穿越回5年前看到你发的这篇文章吗?
作者: zhangmi    时间: 2019-7-7 13:57
能本地启动iso,grub2终于可以媲美g4d了
作者: dido0379    时间: 2019-7-7 14:40
熄灭的烟 发表于 2019-7-7 13:29
ipxe不是早在N年前就支持UEFI启动ISO了吗,是我穿越回5年前看到你发的这篇文章吗?

我是真的没找到。
作者: ksafei    时间: 2019-7-7 18:41
0707版引导的兼容性有提高,但在30秒倒计时后需重新手动再次加载菜单才能正常启动。能否改成0706版那样一次性加载启动
作者: dido0379    时间: 2019-7-8 10:43
wintoflash 发表于 2019-7-7 19:02
FileDiskBlockIo.c文件中,
第317行,388行,441行

感谢大佬指出,这造成了指针定位错误。更正后已重新上传了附件。
作者: dido0379    时间: 2019-7-8 10:48
ksafei 发表于 2019-7-7 18:41
0707版引导的兼容性有提高,但在30秒倒计时后需重新手动再次加载菜单才能正常启动。能否改成0706版那样一次 ...

感谢反馈,已将错误等待时间改为3秒,附件已更新。
作者: ksafei    时间: 2019-7-8 12:10
本帖最后由 ksafei 于 2019-7-8 12:13 编辑
dido0379 发表于 2019-7-8 10:48
感谢反馈,已将错误等待时间改为3秒,附件已更新。


感谢楼主的好作品。测试中刚好用到2个不同引导模式ISO详细反馈如下:
1)0706版:a.iso  启动正常      b.iso  失败(字符闪过)
2)0707版:a.iso  需2次引导    b.iso  需2次引导
3)0708版:a.iso  需2次引导    b.iso  启动正常

不知以上测试情况是不是和楼上W大所说细节有关联

作者: pcfan120    时间: 2019-7-8 12:16
强,多谢分享
作者: pcfan120    时间: 2019-7-8 12:18
还有一个大师做的也不错,可以借鉴下互联网启动,我等小白没看很明白
http://wuyou.net/forum.php?mod=v ... d=415206&extra=
作者: dido0379    时间: 2019-7-8 13:13
本帖最后由 dido0379 于 2019-7-8 13:25 编辑
wintoflash 发表于 2019-7-8 11:32
楼主啊,我对这个很感兴趣,昨天和前天都在尝试把这个移植成grub2的模块,不过目前还没有成功。

请问一 ...


那个NoBootStartAddr和NoBootSize按我的设想是代表传统启动映像的,后来发现传统映像在UEFI下面没用,所以就没管了,FindPartitionInFile里面有个错误是找到其中一个就返回EFI_SUCCESS,已经改成了必须找到UEFI启动映像才返回EFI_SUCCESS。
我的代码写得很难看(除了抄来的部分 ),写的时候也没考虑重用性,移植估计要费一番功夫。要是能成功移植成一个GRUB2的模块就太好了。
作者: dido0379    时间: 2019-7-8 13:17
ksafei 发表于 2019-7-8 12:10
感谢楼主的好作品。测试中刚好用到2个不同引导模式ISO详细反馈如下:
1)0706版:a.iso  启动正常     ...

能说一下2次引导的过程吗?还有这两个光盘的区别。
作者: ksafei    时间: 2019-7-8 16:14
本帖最后由 ksafei 于 2019-7-8 16:40 编辑
dido0379 发表于 2019-7-8 13:17
能说一下2次引导的过程吗?还有这两个光盘的区别。


1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif a.7z (1.67 KB, 下载次数: 0)


b.bif b.7z (1.67 KB, 下载次数: 0)


2.用chainloader命令菜单引导,为便于查找问题故用0707版截图
表现:第一次运行菜单会出现如下提示,然后返回菜单界面,手动再次运行命令菜单,则正常启动

a.iso-7图:


b.iso-7图:



注:0708版a.iso提示如下图,b.iso启动正常
a.iso-8

作者: dido0379    时间: 2019-7-8 17:37
本帖最后由 dido0379 于 2019-7-8 17:56 编辑
ksafei 发表于 2019-7-8 16:14
1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif


可能是驱动部分的安装策略兼容性不好,我得想一想再改。最好将a.iso传给我试一下。谢谢你的测试。
作者: ksafei    时间: 2019-7-8 17:52
dido0379 发表于 2019-7-8 17:37
可能是驱动部分的安装策略兼容性不好,我得想一想再改。最好将a.iso传给我试一下。ftp://dido0379.oicp.n ...

由于网络限制,我无法访问ftp页面。
此PE为   @大漠孤鹰大侠的Win10PE, https://pan.baidu.com/s/142U73dt5ygIvnGoUWD9oKQ  (m359 ),辛苦你了
作者: 江南一根葱    时间: 2019-7-8 19:49


vm试的grub2环境还是efishell下都报这个错。。

正常应该是这样的

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378234
这个帖子的pe

作者: dido0379    时间: 2019-7-9 18:35
ksafei 发表于 2019-7-8 16:14
1.面上看不出两个ISO启动文件的区别,导出引导文件如下:
a.bif

9月9日版本isoboot载入大漠孤鹰pe在铭瑄h110上一次通过了,另外加了两个命令行参数,麻烦你测试一下了。
作者: dido0379    时间: 2019-7-9 18:39
wintoflash 发表于 2019-7-8 18:35
楼主,使用今天(7.8)版本的isoboot.efi启动某iso会死机,使用7.6日的版本可以正常加载为虚拟盘(但是不能启 ...

再次更新了一下,等map模块可以用了,我这个就可以退休了。感谢w大。
作者: dido0379    时间: 2019-7-9 18:41
江南一根葱 发表于 2019-7-8 19:49
vm试的grub2环境还是efishell下都报这个错。。

正常应该是这样的

感谢测试,前面有一个版本是有这个问题,附件已经更新了,麻烦有空再测试一下。
作者: 江南一根葱    时间: 2019-7-9 19:18
dido0379 发表于 2019-7-9 18:41
感谢测试,前面有一个版本是有这个问题,附件已经更新了,麻烦有空再测试一下。

现在下载的可以了,没啥报错,马上就能启
作者: ksafei    时间: 2019-7-9 19:42
dido0379 发表于 2019-7-9 18:35
9月9日版本isoboot载入大漠孤鹰pe在铭瑄h110上一次通过了,另外加了两个命令行参数,麻烦你测试一下了。

测试新版以及参数-mem均启动正常,再次感谢楼主
作者: 282198284    时间: 2019-7-21 22:41
能否改为支持img启动的,就是把img镜像模拟到内存盘中,启动img内存盘中的EFI\Boot\bootx64.efi
作者: dido0379    时间: 2019-7-28 12:47
本帖最后由 dido0379 于 2019-7-28 13:05 编辑
282198284 发表于 2019-7-21 22:41
能否改为支持img启动的,就是把img镜像模拟到内存盘中,启动img内存盘中的EFI\Boot\bootx64.efi


增加img启动可以的,但是内存盘生存期怎么才能延续到exitbootservice()之后需要解决,不解决这个问题也就只能启动wim打包的pe而已。就算将内存盘放到runtimeservicedata里面,进入系统也需要类似winblk或者firadisk之类的内存盘驱动才能访问,否则7b蓝屏是铁定的。ramos我不太了解,也不知道怎样才能给这些内存盘驱动传参数。
作者: 282198284    时间: 2019-7-28 12:59
dido0379 发表于 2019-7-28 12:47
增加img启动可以的,但是内存盘生存期怎么才能延续到exitbootservice()之后需要解决,不解决这个问题也 ...

  要硬盘格式的才可以,您看一下能不能解决,就是要在这个内存硬盘上跑到7B蓝屏
作者: dido0379    时间: 2019-7-28 13:18
282198284 发表于 2019-7-28 12:59
要硬盘格式的才可以,您看一下能不能解决,就是要在这个内存硬盘上跑到7B蓝屏

也就是说将控制权交给img里面的bootx64.efi就完事?那7b怎么解决呢?


作者: 282198284    时间: 2019-7-28 13:27
dido0379 发表于 2019-7-28 13:18
也就是说将控制权交给img里面的bootx64.efi就完事?那7b怎么解决呢?

7b后是P驱的事了
作者: lhb9900    时间: 2019-8-4 01:54
本帖最后由 lhb9900 于 2019-8-4 01:55 编辑

请教 initrd         ${xieyi}://${next-server}/test.iso   当test.iso超大时(深度Linux deepin.iso 2.26GB)载入始终卡在0%

内存给了8G
作者: lhb9900    时间: 2019-8-4 01:57
wintoflash大文件管理器可以集成这个工具了,很优秀
作者: lhb9900    时间: 2019-8-4 13:58
不能支持centos.iso,centos.iso好像只持放在FAT32
作者: lhb9900    时间: 2019-8-4 14:03
pcfan120 发表于 2019-7-8 12:18
还有一个大师做的也不错,可以借鉴下互联网启动,我等小白没看很明白
http://wuyou.net/forum.php?mod=vie ...

这个港哥,我也没有看懂,好像意思一个中转服务器
作者: dido0379    时间: 2019-8-4 21:05
lhb9900 发表于 2019-8-4 01:54
请教 initrd         ${xieyi}://${next-server}/test.iso   当test.iso超大时(深度Linux deepin.iso 2.26 ...

不太清楚

作者: dido0379    时间: 2019-8-4 21:09
lhb9900 发表于 2019-8-4 13:58
不能支持centos.iso,centos.iso好像只持放在FAT32

是的,isoboot只支持fat32。
作者: lhb9900    时间: 2019-8-5 02:03
dido0379 发表于 2019-8-4 21:09
是的,isoboot只支持fat32。

建议
1、对boot*.efi启动文件路径作大小路径兼容
2、编译,一个x64、一个x86  创建内存盘4G以上(现在光盘很多都超2G)

作者: dido0379    时间: 2019-8-5 08:44
lhb9900 发表于 2019-8-5 02:03
建议
1、对boot*.efi启动文件路径作大小路径兼容
2、编译,一个x64、一个x86  创建内存盘4G以上(现在光 ...

这个工具只能用于启动PE光盘镜像
作者: lhb9900    时间: 2019-8-5 09:01
dido0379 发表于 2019-8-5 08:44
这个工具只能用于启动PE光盘镜像

我看你的源码,虚拟内存盘才给了2G
作者: dido0379    时间: 2019-8-6 10:13
lhb9900 发表于 2019-8-5 09:01
我看你的源码,虚拟内存盘才给了2G

感谢大佬指出,能帮个忙贴出错误位置吗,我知道有错误,就是找不到。

作者: lhb9900    时间: 2019-8-6 10:21
dido0379 发表于 2019-8-6 10:13
感谢大佬指出,能帮个忙贴出错误位置吗,我知道有错误,就是找不到。

这个我也看不懂,应该是在这个里面
MyRamDisk.h
作者: dido0379    时间: 2019-8-6 14:00
lhb9900 发表于 2019-8-6 10:21
这个我也看不懂,应该是在这个里面
MyRamDisk.h


谢谢,我再检查一下,另外已经加了一些功能,将名字改成了imgboot,可以支持硬盘镜像,不过还有些问题没有解决所以暂时没发出来。
作者: lhb9900    时间: 2019-8-6 14:08
dido0379 发表于 2019-8-6 14:00
谢谢,我再检查一下,另外已经加了一些功能,将名字改成了imgboot,可以支持硬盘镜像,不过还有些问题 ...

请问你的编译环境是怎么搭建的,有什么简单的方法吗!我这边想搭建EFI编译环境,但发现VS2019安装要几十GB的空间
作者: lhb9900    时间: 2019-8-6 14:11
另外改好较新的,联系一下W大,他会移植你的imgboot到他的GRUB2文件管理
作者: lhb9900    时间: 2019-8-6 14:15
本帖最后由 lhb9900 于 2019-8-6 14:43 编辑

regexp --set=isoboot_file '(/.*)'        "$grub_file"        
if [ 'efi' == $grub_platform ]; then
menuentry "用isobootx64.efi直接启动${isoboot_file}(CentOS和大于2G尚不支持)"  --hotkey="${i}" --class wim{
echo (正在后台加载文件,请等待。。)
chainloader ($root)/Boot/grub/isoboot.efi ${isoboot_file}
}
fi   
作者: lhb9900    时间: 2019-8-6 14:18
本帖最后由 lhb9900 于 2019-8-6 14:21 编辑
lhb9900 发表于 2019-8-6 14:15
regexp --set=isoboot_file '(/.*)'        "$grub_file"        
          if [ 'efi' == $grub_platform ]; then
           menue ...


另外发现有一个问题:(hd0,msdos1)/ISO/my.iso 若前面带分区号不能启动

所以我用regexp --set=isoboot_file '(/.*)'        "$grub_file"   去掉了分区号成:/ISO/my.iso 才能启动
作者: lhb9900    时间: 2019-8-21 22:53
这么好的贴子竟然没人管了,哎
作者: 西门庆歌    时间: 2019-8-28 14:20
本帖最后由 西门庆歌 于 2019-8-28 14:22 编辑

楼主很强~~~

不过某些情况下,在ipxe菜单中写上sanboot引导iso也可以。。。无需解压出来wimboot
实际测试:技嘉主板B250客户端uefi pxe引导
作者: 江南一根葱    时间: 2019-8-28 17:47
西门庆歌 发表于 2019-8-28 14:20
楼主很强~~~

不过某些情况下,在ipxe菜单中写上sanboot引导iso也可以。。。无需解压出来wimboot

不需解压也能wimboot。。。。
楼主的东东是启本地iso的,本地用糝勃特就不行了
作者: lhb9900    时间: 2019-9-8 20:04
楼主最近在做什么,期待你的完美作品
作者: lhb9900    时间: 2019-9-8 20:04
楼主最近在做什么,期待你的完美作品
作者: dido0379    时间: 2019-9-12 13:28
更新了一下附件,imgboot可以下载了。
作者: lhb9900    时间: 2019-9-12 16:47
本帖最后由 lhb9900 于 2019-9-12 17:28 编辑

当没有imgboot.cfg文件    grub2   imgboot   不能启动ISO   isoboot 能启动ISO


解决方法

set imgboot_file=my.iso

          if [ 'efi' == $grub_platform -a "$grub_cpu" == "x86_64" ]; then
           menuentry "用imgboot64.efi直接启动${imgboot_file}"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          chainloader ($root)/Boot/grub/imgboot.efi -dev auto -file ${imgboot_file}
    }
    fi
   
    if [ 'efi' == $grub_platform -a "$grub_cpu" == "i386" ]; then
               menuentry "用imgboot32.efi直接启动${imgboot_file}"  --hotkey="${i}" --class iso{
                                   echo (正在后台加载文件,请等待。。)
          chainloader ($root)/Boot/grub/imgboot32.efi -dev auto -file ${imgboot_file}
    }
   fi
作者: lhb9900    时间: 2019-9-12 18:09
本帖最后由 lhb9900 于 2019-9-12 18:13 编辑

我通过GRUB2列出别的分区的ISO
请问GRUB2带驱动号(hd0,msdos3)/my.iso的路径如何转换给imgboot.efi
比如列的文件作为变量

chainloader ($root)/Boot/grub/imgboot.efi -dev auto -file ${imgboot_file}
作者: lhb9900    时间: 2019-9-12 18:14
CentOS尚不支持
作者: dido0379    时间: 2019-9-12 22:53
linux光盘镜像用grub2直接可以启动,这个小工具主要是帮助启动pe光盘镜像。确实不支持grub2的分区号。感谢反馈。
作者: hanzsim    时间: 2019-9-27 17:26
1.微软官网说明win10不求uefi
2.我最近的试验WDS+http+IIS375M的PEISO仅4-8秒传输。
启动文件关系很大。建议试一试lpxelinux.0
作者: hanzsim    时间: 2019-9-27 17:28
hanzsim 发表于 2019-9-27 17:26
1.微软官网说明win10不求uefi
2.我最近的试验WDS+http+IIS375M的PEISO仅4-8秒传输。
启动文件关系很大。 ...

顺便说一下,除了Linux必要文件,剩下的都是基于Server08R2,没有第三方。http+IIS+wds
作者: hanzsim    时间: 2019-10-13 08:43
我得先向楼主到个歉,前几天没去认真了解用途就随便评论了。早上试验了,虽然没完全成功,原因一会儿另说,但这这是好东西,太棒了。
我使用的纯Windows Server 2012r2做的pxe服务器,dhcp,http,wds作为pxe服务组件。pxe客户机是7代U的本,ipxe版本30f9,32-64efi。成功现在了iso,启动时Press any key boot from CD...这应该是ISO内的efi文件没搞对,一会整这个。说明你这个作品能用。
关键是速度,wimboot速度即使使用http也慢,比legacy下memdisk慢很多,而你的这个很快,我曾经用过的最快的是sysLinux的legacy,http下我的pe刚才三次测试是33秒,37秒,37秒。你的方式三次是37秒37秒35秒。几乎不相上下!膜拜
作者: hanzsim    时间: 2019-10-13 08:51
遗憾的是,ipxe现在经常出问题,我以前自己编译过的现在新机器都不能用了,用了一些网友编译的也出各种各样的问题。如果没问题,配http绝对是最快的。真正维护工作量大的话,效率很重要。所以,尽量用http是一个方面,另一方面我服务器端不用第三方,只用Server原生功能。回头我再试试ipxe能不能适配单位的9代CPU的电脑,7代目前没问题,9代黑屏。
作者: hanzsim    时间: 2019-10-13 12:01
怀疑press any key 是imgboot造成的,已经试了4个pe了,都有
作者: hanzsim    时间: 2019-10-13 12:13
hanzsim 发表于 2019-10-13 12:01
怀疑press any key 是imgboot造成的,已经试了4个pe了,都有

好吧,事实证明我又错了,找了个网友的无提示iso模板,成功了。
作者: hanzsim    时间: 2019-10-14 19:23
楼主在吗?grub2.02和2.04chainloader都是不读镜像,从chainloader传的参数指定的镜像在服务器端可以看见根本没有请求这个镜像,不论TFTP还是http。不带参数的情况下,服务器端也可以看见没有请求imgboot.cfg。而ipxe的BIOS和uefi工作却是正常。看看是什么原因?
作者: 江南一根葱    时间: 2019-10-14 21:58
楼上比我水啊,话说楼主的作品不是用在本地启动的吗,网启有万能的ipxe来sanboot或bootmgrfw.efi不用?
作者: hanzsim    时间: 2019-10-15 04:59
江南一根葱 发表于 2019-10-14 21:58
楼上比我水啊,话说楼主的作品不是用在本地启动的吗,网启有万能的ipxe来sanboot或bootmgrfw.efi不用?

网启,本地解决方案太多了。想整一个支持http的。微软的efi只支持TFTP。而wimboot又太慢,才找到了楼主这种iso启动的。原来晚上BIOS下用sysLinux的,可以memdisk,但efi不行。楼主这种方法ipxe不黑屏就很完美。还想试试grub2
作者: 江南一根葱    时间: 2019-10-15 08:03
楼上自身原因,千兆环境,400m的pe,efi下微软的十几秒,wimboot不超过五秒
作者: hanzsim    时间: 2019-10-16 19:50
江南一根葱 发表于 2019-10-15 08:03
楼上自身原因,千兆环境,400m的pe,efi下微软的十几秒,wimboot不超过五秒

兄弟,如果只是一两台,我3个U盘两个移动硬盘足够使了。我部门4×48。。。
作者: hanzsim    时间: 2019-10-16 19:56
江南一根葱 发表于 2019-10-15 08:03
楼上自身原因,千兆环境,400m的pe,efi下微软的十几秒,wimboot不超过五秒

好像是2年多以前试验的wimboot,速度比map慢30%。过几天再试试看是不是改善了。这个ISOboot很不错,ipxe下顶级速度。只是ipxe黑屏过。这几天没试验,服务器坏了一台,1天才确定了阵列卡坏了,把硬盘也搞坏了。先弄服务器了。
作者: 江南一根葱    时间: 2019-10-16 19:56
hanzsim 发表于 2019-10-16 19:50
兄弟,如果只是一两台,我3个U盘两个移动硬盘足够使了。我部门4×48。。。


不算多,我有时候一天要搞定一百五十多台,bios下的话,网启g4d再来调用ipxe来wimboot能加速很多,
efi下的话,"魔"改bcd后tftp速度甚至能跑满带宽
作者: dido0379    时间: 2019-10-20 15:54
hanzsim 发表于 2019-10-14 19:23
楼主在吗?grub2.02和2.04chainloader都是不读镜像,从chainloader传的参数指定的镜像在服务器端可以看见根 ...

确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像启动。
作者: 2010sya    时间: 2019-10-20 22:29
dido0379 发表于 2019-10-20 15:54
确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像 ...

膜拜!!!
作者: hanzsim    时间: 2019-10-23 05:27
江南一根葱 发表于 2019-10-16 19:56
不算多,我有时候一天要搞定一百五十多台,bios下的话,网启g4d再来调用ipxe来wimboot能加速很多,
ef ...

如果能用ipxe,就完全可以直接用ipxe远程启动再用楼主这个文件启动ISO了。何必还要先启g4d再转ipxe再核心wimboot呢。网启有专门服务器,哪怕是普通机器充当,所有多存几个iso远远比拆出wim方便。反倒是U盘拆出wim外挂模块更好。而事实是某些特殊情况U盘使用wimboot加载速度不及bios上map iso速度的1/2。我是不喜欢用wimboot。
作者: hanzsim    时间: 2019-10-23 05:29
dido0379 发表于 2019-10-20 15:54
确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像 ...

可惜了,要是g4d或linux能用就美了。目前我用过的机器里linux网启兼容性最好。再次感谢你的作品。
作者: 江南一根葱    时间: 2019-10-23 09:25
读取文件的速度和wimboot无关,wimboot只不过启动时多了个过程,要慢也是慢那两三秒,
不过日常环境中屎用我都是秒启
作者: wintoflash    时间: 2019-10-25 19:10
试了一下,UEFI下还是有办法调用grub2的函数的。

大概就是写个grub2模块,安装一个protocol
  1. struct grub_efi_grub_protocol
  2. {
  3.   /* file */
  4.   grub_efi_status_t (*file_open) (grub_file_t *file, /* out */
  5.                                   const char *name,
  6.                                   enum grub_file_type type);
  7.   grub_efi_status_t (*file_open_w) (grub_file_t *file, /* out */
  8.                                     const grub_efi_char16_t *name,
  9.                                     enum grub_file_type type);
  10.   grub_efi_intn_t (*file_read) (grub_file_t *file /* in out */,
  11.                                 void *buf /* out */,
  12.                                 grub_efi_uintn_t len);
  13.   grub_efi_uint64_t (*file_seek) (grub_file_t *file /* in out */,
  14.                                   grub_efi_uint64_t offset);
  15.   grub_efi_status_t (*file_close) (grub_file_t *file /* in out */);
  16.   grub_efi_uint64_t (*file_size) (const grub_file_t file);
  17.   grub_efi_uint64_t (*file_tell) (const grub_file_t file);
  18.   /* command */
  19.   grub_efi_status_t (*execute) (const char *name, int argc, char **argv);
  20.   /* test */
  21.   void (*test) (void);
  22. };
  23. typedef struct grub_efi_grub_protocol grub_efi_grub_protocol_t;
  24. ......
  25. static grub_efi_status_t
  26. prot_file_open (grub_file_t *file, const char *name, enum grub_file_type type)
  27. {
  28.   *file = grub_file_open (name, type);
  29.   if (!*file)
  30.     return GRUB_EFI_NOT_FOUND;
  31.   return GRUB_EFI_SUCCESS;
  32. }

  33. static grub_efi_status_t
  34. prot_file_open_w (grub_file_t *file, const grub_efi_char16_t *name,
  35.                   enum grub_file_type type)
  36. {
  37.   grub_size_t s16_len = 0;
  38.   unsigned char *file_name = NULL;

  39.   s16_len = wcslen (name) + 1;
  40.   file_name = grub_malloc (s16_len);
  41.   if (!file_name)
  42.     return GRUB_EFI_OUT_OF_RESOURCES;
  43.   grub_utf16_to_utf8 (file_name, name, s16_len);
  44.   *file = grub_file_open ((char *)file_name, type);
  45.   grub_free (file_name);
  46.   if (!*file)
  47.     return GRUB_EFI_NOT_FOUND;
  48.   return GRUB_EFI_SUCCESS;
  49. }

  50. static grub_efi_intn_t
  51. prot_file_read (grub_file_t *file, void *buf, grub_efi_uintn_t len)
  52. {
  53.   return grub_file_read (*file, buf, len);
  54. }
  55. ......
  56. static grub_efi_grub_protocol_t grub_prot;
  57. static grub_efi_guid_t grub_prot_guid = GRUB_EFI_GRUB_PROTOCOL_GUID;

  58. static void
  59. grub_prot_init (void)
  60. {
  61.   grub_prot.file_open = prot_file_open;
  62.   grub_prot.file_open_w = prot_file_open_w;
  63.   grub_prot.file_read = prot_file_read;
  64. ......
  65.   grub_efi_boot_services_t *b;

  66.   b = grub_efi_system_table->boot_services;
  67.   efi_call_4 (b->install_protocol_interface,
  68.               &grub_efi_image_handle, &grub_prot_guid,
  69.               GRUB_EFI_NATIVE_INTERFACE, &grub_prot);
  70. }

  71. static void
  72. grub_prot_fini (void)
  73. {
  74.   grub_efi_boot_services_t *b;

  75.   b = grub_efi_system_table->boot_services;
  76.   efi_call_3 (b->uninstall_protocol_interface,
  77.               &grub_efi_image_handle, &grub_prot_guid, &grub_prot);
  78. }

  79. GRUB_MOD_INIT(grubprot)
  80. {
  81.   grub_prot_init ();
  82. }

  83. GRUB_MOD_FINI(grubprot)
  84. {
  85.   grub_prot_fini ();
  86. }
复制代码


作者: dido0379    时间: 2019-10-27 16:03
wintoflash 发表于 2019-10-25 19:10
试了一下,UEFI下还是有办法调用grub2的函数的。

大概就是写个grub2模块,安装一个protocol

牛,那GRUB_PROTOCOL是本来就有还是w大你自己设计的?
作者: ksafei    时间: 2019-10-27 16:36
@wintoflash大的grub2+@dido0379大的isoboot可以实现在Secure Boot下引导任一分区ISO和WIM方式的PE,堪称完美。感谢两位大神
作者: wintoflash    时间: 2019-10-27 17:45
dido0379 发表于 2019-10-27 16:03
牛,那GRUB_PROTOCOL是本来就有还是w大你自己设计的?

自己设计的。
话说loaded_image_protocol在低版本uefi下是不是不好用?
通过自己写的protocol传递cmdline是不是更靠谱?
作者: zt02zt    时间: 2019-10-29 13:00
谢谢大神 正在发愁用memdisk,在efi模式下没法引导iso呢
作者: ls68057121    时间: 2019-10-31 03:19
非常好
作者: zipcord    时间: 2019-11-19 19:47
好东西一定要支持啊
作者: losis    时间: 2019-11-23 19:41
試一下
作者: bradyao    时间: 2019-11-26 14:13
我去,网络启动这么6P,以后会不会操作系统只有网络系统了。
作者: yusw    时间: 2020-1-28 17:35
和不错
作者: yusw    时间: 2020-1-28 17:36
感谢分享
作者: linyuuki    时间: 2020-3-8 10:33
过安检的方法好像已经被封掉了
作者: matrixzpc    时间: 2020-3-10 11:33
下载试试
作者: tfzxc    时间: 2020-3-12 18:16
暂时用不到,顶贴留存!
作者: abe520    时间: 2020-3-19 16:07
卤煮好厉害,好贴,先收藏了
作者: flycony    时间: 2021-3-27 18:30
试试看看,谢谢
作者: flycony    时间: 2021-4-3 11:56
我居然没有下载权限,尴尬
作者: flycony    时间: 2021-4-9 18:23
攒积分,下载这个。。
作者: flycony    时间: 2021-4-9 20:46
快点可以达到下载的权限。。。。。
作者: flycony    时间: 2021-4-15 10:08
想请教楼主问题,这个配置文件和命令行参数如何使用啊?
ipxe菜单写成这样吗?
:Win10PE_IMGBOOT
initrd   ${boot-url}/images/USBOSV3.iso
chain    ${boot-url}/imgboot.efi  -mem
作者: wavelu    时间: 2022-10-13 20:03
看着很高级,等着下载试试
作者: wavelu    时间: 2022-10-13 20:04
发言就能攒到积分吗?只能测试一下,如果能够直接启动ISO文件的话,那就方便了。




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