无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: wintoflash

[原创] GRUB2 UEFI 下的磁盘仿真

    [复制链接]
 楼主| 发表于 2020-11-6 22:50:05 | 显示全部楼层
hilsonma 发表于 2020-11-6 18:22
不管带不带 --mem,始终都是读一次到内存,区别只是前者先读再从内存启动,后者边启动边读。整体效率应该 ...

如果启动的是winpe,不带--mem,bootmgfw.efi会要求一块内存,把wim读到内存。
如果带--mem,grub2先要求一块内存,把winpe iso加载到内存。然后 bootmgfw 还是会要求一块内存,把wim读到内存。
所以 --mem 是要占用两倍内存。
(1) bootloader 读普通虚拟盘上的文件:
uefi block io read->grub file read->grub filesystem read->grub disk read->uefi block io read
(2) bootloader 读blocklist虚拟盘的文件:
uefi block io read->grub file read->grub disk read->uefi block io read
(3) bootloader 读内存盘上的文件:
uefi block io read->grub file read->memcpy
(4) grub2 把文件加载到内存的过程:
grub file read->grub filesystem read->grub disk read->uefi block io read

点评

这个知识点不错,多谢介绍。  详情 回复 发表于 2020-11-6 22:58
回复

使用道具 举报

发表于 2020-11-6 22:54:53 来自手机 | 显示全部楼层
不加mem也可以拔掉u盘的,毕竟最后都是由bootmgfw.efi载入内存,快慢。这就看grub2和微软启动器那个读盘能力强了

点评

全内置的PE,一般都是可以拔掉优盘的,外置版本的PE,拔掉优盘可能外置软件找不到,严重的可能会导致蓝屏。我更加喜欢全内置版本的PE。  详情 回复 发表于 2020-11-9 10:21
回复

使用道具 举报

发表于 2020-11-6 22:58:44 | 显示全部楼层
wintoflash 发表于 2020-11-6 22:50
如果启动的是winpe,不带--mem,bootmgfw.efi会要求一块内存,把wim读到内存。
如果带--mem,grub2先要 ...

这个知识点不错,多谢介绍。
回复

使用道具 举报

发表于 2020-11-6 22:59:06 来自手机 | 显示全部楼层
请教怎么启动制作好的win10的VHDX系统?
回复

使用道具 举报

发表于 2020-11-9 10:21:06 | 显示全部楼层
江南一根葱 发表于 2020-11-6 22:54
不加mem也可以拔掉u盘的,毕竟最后都是由bootmgfw.efi载入内存,快慢。这就看grub2和微软启动器那个读盘能 ...

        全内置的PE,一般都是可以拔掉优盘的,外置版本的PE,拔掉优盘可能外置软件找不到,严重的可能会导致蓝屏。我更加喜欢全内置版本的PE。

点评

外置版的,加了mem照样不能拔。。。  详情 回复 发表于 2020-11-9 17:54
回复

使用道具 举报

发表于 2020-11-9 16:06:47 | 显示全部楼层
静静地看着楼主,好人一生平安
回复

使用道具 举报

发表于 2020-11-9 17:54:15 | 显示全部楼层
liuzhaoyzz 发表于 2020-11-9 10:21
全内置的PE,一般都是可以拔掉优盘的,外置版本的PE,拔掉优盘可能外置软件找不到,严重的可能会 ...

外置版的,加了mem照样不能拔。。。

点评

外置版的,BIOS启动,如果集成了firadisk这样的驱动,可以拔盘。xppe有继承这样的驱动的,WIN7 8 10PE好像很少见了。  详情 回复 发表于 2020-11-10 07:55
回复

使用道具 举报

发表于 2020-11-10 07:55:25 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-10 08:14 编辑
江南一根葱 发表于 2020-11-9 17:54
外置版的,加了mem照样不能拔。。。

        外置版的,BIOS启动,如果集成了firadisk这样的驱动,可以拔盘。xppe有集成这样的驱动的,WIN7 8 10PE好像很少见了。

       BIOS下面,管他是否集成了firadisk这样子的驱动,我都是喜欢用map --mem,便于XPPE启动找到外置,还规避文件碎片问题,启动速度也还可以。

点评

都 UEFI 了,还是忘掉插屁吧。 UEFI也有UEFI的特点。我不建议UEFI用--mem也有我的考虑。 如果map一个兼容Ventoy (https://www.ventoy.net/cn/compatible.html) 的ISO,不论是否用--mem,启动后都是可以找到外  详情 回复 发表于 2020-11-10 18:56
能拔的。。那就不叫外置版了。。。  详情 回复 发表于 2020-11-10 15:15
回复

使用道具 举报

发表于 2020-11-10 15:15:50 | 显示全部楼层
liuzhaoyzz 发表于 2020-11-10 07:55
外置版的,BIOS启动,如果集成了firadisk这样的驱动,可以拔盘。xppe有集成这样的驱动的,WIN7 8 ...

能拔的。。那就不叫外置版了。。。
回复

使用道具 举报

 楼主| 发表于 2020-11-10 18:56:19 | 显示全部楼层
liuzhaoyzz 发表于 2020-11-10 07:55
外置版的,BIOS启动,如果集成了firadisk这样的驱动,可以拔盘。xppe有集成这样的驱动的,WIN7 8 ...
xppe有集成这样的驱动的,WIN7 8 10PE好像很少见了。

都 UEFI 了,还是忘掉插屁吧。
BIOS下面,管他是否集成了firadisk这样子的驱动,我都是喜欢用map --mem,便于XPPE启动找到外置,还规避文件碎片问题,启动速度也还可以。

UEFI也有UEFI的特点。我不建议UEFI用--mem也有我的考虑。
如果map一个兼容Ventoy (https://www.ventoy.net/cn/compatible.html) 的ISO,不论是否用--mem,启动后都是可以找到外置的,当然也都不能拔盘。

点评

确实是。  详情 回复 发表于 2020-11-12 07:30
回复

使用道具 举报

发表于 2020-11-12 07:30:40 | 显示全部楼层
wintoflash 发表于 2020-11-10 18:56
都 UEFI 了,还是忘掉插屁吧。

UEFI也有UEFI的特点。我不建议UEFI用--mem也有我的考虑。
都 UEFI 了,还是忘掉插屁吧。

确实是。
回复

使用道具 举报

发表于 2020-11-13 17:52:20 | 显示全部楼层
我愿称之为最强,真的好用。不过我还在研究grub咋编译

点评

可以看 https://github.com/a1ive/grub/blob/master/.github/workflows/build.yml  详情 回复 发表于 2020-11-16 12:43
回复

使用道具 举报

 楼主| 发表于 2020-11-16 12:43:56 | 显示全部楼层
OHMCFXG 发表于 2020-11-13 17:52
我愿称之为最强,真的好用。不过我还在研究grub咋编译

可以看 https://github.com/a1ive/grub/bl ... workflows/build.yml

回复

使用道具 举报

发表于 2020-11-20 09:39:48 | 显示全部楼层
i386-pc 下的map 怎么使用?是不是跟一楼不一样的?我不管是用一楼的用法还是用help里的用法都不成功。

IMG_20201120_093130.jpg

点评

i386-pc 下的 map 和 efi 下的完全不一样,不支持磁盘仿真。 map 实际上是 drivemap,用于交换或屏蔽磁盘。 想启动 ISO/IMG 请用 memdisk/grub4dos,以下菜单仅供参考,不保证正确。  详情 回复 发表于 2020-11-20 09:53
回复

使用道具 举报

 楼主| 发表于 2020-11-20 09:53:45 | 显示全部楼层
hilsonma 发表于 2020-11-20 09:39
i386-pc 下的map 怎么使用?是不是跟一楼不一样的?我不管是用一楼的用法还是用help里的用法都不成功。

i386-pc 下的 map 和 efi 下的完全不一样,不支持磁盘仿真。
map 实际上是 drivemap,用于交换或屏蔽磁盘。
想启动 ISO/IMG 请用 memdisk/grub4dos,以下菜单仅供参考,不保证正确。
  1. function to_g4d_path {
  2.     unset g4d_path;
  3.     if regexp --set=1:num '^\(hd[0-9]+,[a-zA-Z]*([0-9]+)\).*' "${1}"; then
  4.         # (hdx,msdosy) (hdx,gpty) (hdx,y)
  5.         expr --set=num "${num} - 1";
  6.         regexp --set=1:path_1 --set=2:path_2 '^(\(hd[0-9]+,)[a-zA-Z]*[0-9]+(\).*)' "${1}";
  7.         set g4d_path="${path_1}${num}${path_2}";
  8.     elif regexp '^\([chf]d[0-9]*\).*' "${1}"; then
  9.         # (hd) (cd) (fd) (hdx) (cdx) (fdx)
  10.         set g4d_path="${1}";
  11.     fi;
  12. }

  13. menuentry "Boot WinPE ISO" {
  14.     set iso_file="(hd0,2)/winpe.iso";
  15.     if [ "$grub_platform" = "efi" ]; then
  16.         map -f "${iso_file}";
  17.     elif [ "$grub_platform" = "pc" ]; then
  18.         to_g4d_path "${iso_file}";
  19.         if [ -n "${g4d_path}" ]; then
  20.             set g4d_cmd="map ${g4d_path} (0xff);map --hook;chainloader (0xff);boot";
  21.             linux ${prefix}/grub.exe --config-file=${g4d_cmd};
  22.         else
  23.             set enable_progress_indicator=1;
  24.             linux16 ${prefix}/memdisk iso raw;
  25.             initrd16 "${iso_file}";
  26.         fi;
  27.         boot;
  28.     fi;
  29. }
复制代码

点评

谢谢。现在明白了。原来是我误解了,以为 i386-pc 下的map 你也照g4d改造了。  详情 回复 发表于 2020-11-20 10:07
回复

使用道具 举报

发表于 2020-11-20 10:07:26 | 显示全部楼层
wintoflash 发表于 2020-11-20 09:53
i386-pc 下的 map 和 efi 下的完全不一样,不支持磁盘仿真。
map 实际上是 drivemap,用于交换或屏蔽磁 ...

谢谢。现在明白了。原来是我误解了,以为 i386-pc 下的map 你也照g4d改造了。

点评

有点难,Legacy BIOS下的东西开发难度很大,这也就是厂商去搞 UEFI 的一部分原因。如果只支持map无文件碎片的镜像,那难度低一些。如果能像efi那样随便map,那太难了。  详情 回复 发表于 2020-11-20 10:25
回复

使用道具 举报

 楼主| 发表于 2020-11-20 10:25:28 | 显示全部楼层
hilsonma 发表于 2020-11-20 10:07
谢谢。现在明白了。原来是我误解了,以为 i386-pc 下的map 你也照g4d改造了。

有点难,Legacy BIOS下的东西开发难度很大,这也就是厂商去搞 UEFI 的一部分原因。如果只支持map无文件碎片的镜像,那难度低一些。如果能像efi那样随便map,那太难了。

点评

没事,我只是以为你做了所以试一下而已,没做就不必要做了,正在淘汰中的东东。而g4d也已经做得很好了。  详情 回复 发表于 2020-11-20 10:38
回复

使用道具 举报

发表于 2020-11-20 10:38:19 | 显示全部楼层
wintoflash 发表于 2020-11-20 10:25
有点难,Legacy BIOS下的东西开发难度很大,这也就是厂商去搞 UEFI 的一部分原因。如果只支持map无文件碎 ...

没事,我只是以为你做了所以试一下而已,没做就不必要做了,正在淘汰中的东东。而g4d也已经做得很好了。
回复

使用道具 举报

 楼主| 发表于 2020-11-24 19:32:16 | 显示全部楼层
wuwuzz 发表于 2020-11-6 22:36
我和你相反,USB是我的爱好(由此发散至USB启动、BIOS/UEFI中USB启动代码...等知识点),而U盘收藏了一大 ...

grubx64.efi.zip (651.83 KB, 下载次数: 10)

点评

测试结果如下图: [attachimg]469081[/attachimg]  详情 回复 发表于 2020-11-24 20:19
回复

使用道具 举报

发表于 2020-11-24 20:19:35 | 显示全部楼层

测试结果如下图:

insyde.jpg

点评

map之后进uefi shel看看,有没有 CD(1,12b,75245) 的设备挂载到 FS0 FS1 之类的。  详情 回复 发表于 2020-11-24 20:31
回复

使用道具 举报

 楼主| 发表于 2020-11-24 20:31:50 | 显示全部楼层
wuwuzz 发表于 2020-11-24 20:19
测试结果如下图:

map之后进uefi shel看看,有没有 CD(1,12b,75245) 的设备挂载到 FS0 FS1 之类的。

点评

有挂载,如下图 [attachimg]469084[/attachimg]  详情 回复 发表于 2020-11-24 21:00
回复

使用道具 举报

发表于 2020-11-24 21:00:29 | 显示全部楼层
wintoflash 发表于 2020-11-24 20:31
map之后进uefi shel看看,有没有 CD(1,12b,75245) 的设备挂载到 FS0 FS1 之类的。

有挂载,如下图

112.jpg

点评

cd fs1 然后启动 \EFI\BOOT\BOOTX64.EFI 试试?  详情 回复 发表于 2020-11-24 21:02
回复

使用道具 举报

 楼主| 发表于 2020-11-24 21:02:59 | 显示全部楼层
wuwuzz 发表于 2020-11-24 21:00
有挂载,如下图

进 fs1
然后启动 \EFI\BOOT\BOOTX64.EFI 试试?

点评

出错 fs1:>dir can not read from directory fs1:\ Invaild Parameter can not access dircetory fs1:\  详情 回复 发表于 2020-11-24 21:08
回复

使用道具 举报

发表于 2020-11-24 21:08:19 | 显示全部楼层
wintoflash 发表于 2020-11-24 21:02
进 fs1
然后启动 \EFI\BOOT\BOOTX64.EFI 试试?

出错

fs1:>dir
can not read from directory fs1:\ Invaild Parameter
can not access dircetory fs1:\


点评

那应该是UEFI有毛病,没救了。  详情 回复 发表于 2020-11-24 21:20
回复

使用道具 举报

 楼主| 发表于 2020-11-24 21:20:28 | 显示全部楼层

那应该是UEFI有毛病,没救了。

点评

ok  详情 回复 发表于 2020-11-24 21:23
回复

使用道具 举报

发表于 2020-11-24 21:23:11 | 显示全部楼层
wintoflash 发表于 2020-11-24 21:20
那应该是UEFI有毛病,没救了。

ok
回复

使用道具 举报

发表于 2020-11-24 21:23:47 来自手机 | 显示全部楼层
你在两台电脑测试,一台成功,一台失败,是使用的一样的ISO镜像吗?如果不是,可否把失败的镜像空壳打包上来?

点评

换了U盘,换了ISO(这次用的是微PE X64V2版,官网下载的) AMI UEFI、Insyde UEFI均使用同一U盘、同一ISO,做对比测试。 Insyde UEFI仍不正常。 [attachimg]469097[/attachimg] [attachimg]469098[/attachim  详情 回复 发表于 2020-11-25 07:21
是同一U盘、同一ISO。 今天所说,都是用的504#链接那个win10 PE V17。 等有时间,我再换个U盘试试。  详情 回复 发表于 2020-11-24 21:37
回复

使用道具 举报

发表于 2020-11-24 21:37:33 | 显示全部楼层
本帖最后由 wuwuzz 于 2020-11-24 21:38 编辑
2011yaya2007777 发表于 2020-11-24 21:23
你在两台电脑测试,一台成功,一台失败,是使用的一样的ISO镜像吗?如果不是,可否把失败的镜像空壳打包上 ...

是同一U盘、同一ISO。

今天所说,都是用的G4E帖504#链接那个win10 PE V17。

等有时间,我再换个U盘试试。


回复

使用道具 举报

发表于 2020-11-25 07:21:44 | 显示全部楼层
2011yaya2007777 发表于 2020-11-24 21:23
你在两台电脑测试,一台成功,一台失败,是使用的一样的ISO镜像吗?如果不是,可否把失败的镜像空壳打包上 ...

换了U盘,换了ISO(这次用的是微PE X64V2版,官网下载的)
AMI UEFI、Insyde UEFI均使用同一U盘、同一ISO,做对比测试。

Insyde UEFI仍不正常。

ami.jpg

insyde1.jpg

insyde2.jpg

点评

用 Ventoy 能不能在 Insyde UEFI 启动这个 ISO?  详情 回复 发表于 2020-11-25 11:06
回复

使用道具 举报

 楼主| 发表于 2020-11-25 11:06:16 | 显示全部楼层
wuwuzz 发表于 2020-11-25 07:21
换了U盘,换了ISO(这次用的是微PE X64V2版,官网下载的)
AMI UEFI、Insyde UEFI均使用同一U盘、同一ISO ...

用 Ventoy 能不能在 Insyde UEFI 启动这个 ISO?

点评

ventoy以前没用过,临时下载测试了一下。 有点奇怪,前面提到的w10pe17.iso、wepev2.iso, 用ventoy在insyde UEFI下均可启动。 它好像是建了个EFI分区,用的grub2。 grub.cfg内容比较复杂,没仔细研究 用的  详情 回复 发表于 2020-11-25 13:19
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 10:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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