无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站虚位以待
广告联系 QQ:184822951 微信:wuyouceo最好用的系统一键装机工具idc大全★服务器租用★香港/5M/450元
楼主: dido0379

[发布] UEFI下利用ixpe远程加载isoboot直接启动PE光盘镜像

    [复制链接]
发表于 2019-10-16 19:50:34 | 显示全部楼层
江南一根葱 发表于 2019-10-15 08:03
楼上自身原因,千兆环境,400m的pe,efi下微软的十几秒,wimboot不超过五秒

兄弟,如果只是一两台,我3个U盘两个移动硬盘足够使了。我部门4×48。。。

点评

不算多,我有时候一天要搞定一百五十多台,bios下的话,网启g4d再来调用ipxe来wimboot能加速很多,  详情 回复 发表于 2019-10-16 19:56
回复

使用道具 举报

发表于 2019-10-16 19:56:20 | 显示全部楼层
江南一根葱 发表于 2019-10-15 08:03
楼上自身原因,千兆环境,400m的pe,efi下微软的十几秒,wimboot不超过五秒

好像是2年多以前试验的wimboot,速度比map慢30%。过几天再试试看是不是改善了。这个ISOboot很不错,ipxe下顶级速度。只是ipxe黑屏过。这几天没试验,服务器坏了一台,1天才确定了阵列卡坏了,把硬盘也搞坏了。先弄服务器了。
回复

使用道具 举报

发表于 2019-10-16 19:56:29 | 显示全部楼层
hanzsim 发表于 2019-10-16 19:50
兄弟,如果只是一两台,我3个U盘两个移动硬盘足够使了。我部门4×48。。。


不算多,我有时候一天要搞定一百五十多台,bios下的话,网启g4d再来调用ipxe来wimboot能加速很多,
efi下的话,"魔"改bcd后tftp速度甚至能跑满带宽

点评

如果能用ipxe,就完全可以直接用ipxe远程启动再用楼主这个文件启动ISO了。何必还要先启g4d再转ipxe再核心wimboot呢。网启有专门服务器,哪怕是普通机器充当,所有多存几个iso远远比拆出wim方便。反倒是U盘拆出wim外  详情 回复 发表于 2019-10-23 05:27
回复

使用道具 举报

 楼主| 发表于 2019-10-20 15:54:39 | 显示全部楼层
hanzsim 发表于 2019-10-14 19:23
楼主在吗?grub2.02和2.04chainloader都是不读镜像,从chainloader传的参数指定的镜像在服务器端可以看见根 ...

确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像启动。

点评

可惜了,要是g4d或linux能用就美了。目前我用过的机器里linux网启兼容性最好。再次感谢你的作品。  详情 回复 发表于 2019-10-23 05:29
膜拜!!!  详情 回复 发表于 2019-10-20 22:29
回复

使用道具 举报

发表于 2019-10-20 22:29:00 | 显示全部楼层
dido0379 发表于 2019-10-20 15:54
确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像 ...

膜拜!!!
回复

使用道具 举报

发表于 2019-10-23 05:27:25 | 显示全部楼层
江南一根葱 发表于 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。
回复

使用道具 举报

发表于 2019-10-23 05:29:09 | 显示全部楼层
dido0379 发表于 2019-10-20 15:54
确实imgboot接受不了远程文件路径,远程启动的话只能启动ipxe的initrd过来的镜像,这样可以当成本地镜像 ...

可惜了,要是g4d或linux能用就美了。目前我用过的机器里linux网启兼容性最好。再次感谢你的作品。
回复

使用道具 举报

发表于 2019-10-23 09:25:34 | 显示全部楼层
读取文件的速度和wimboot无关,wimboot只不过启动时多了个过程,要慢也是慢那两三秒,
不过日常环境中屎用我都是秒启
回复

使用道具 举报

发表于 2019-10-25 19:10:07 | 显示全部楼层
试了一下,UEFI下还是有办法调用grub2的函数的。
QQ图片20191025190322.png
大概就是写个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. }
复制代码

点评

牛,那GRUB_PROTOCOL是本来就有还是w大你自己设计的?  详情 回复 发表于 2019-10-27 16:03
回复

使用道具 举报

 楼主| 发表于 2019-10-27 16:03:41 | 显示全部楼层
wintoflash 发表于 2019-10-25 19:10
试了一下,UEFI下还是有办法调用grub2的函数的。

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

牛,那GRUB_PROTOCOL是本来就有还是w大你自己设计的?

点评

自己设计的。 话说loaded_image_protocol在低版本uefi下是不是不好用? 通过自己写的protocol传递cmdline是不是更靠谱?  详情 回复 发表于 2019-10-27 17:45
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2020-3-28 20:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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