你的疑问是对的。一旦离开 UEFI/grub 之后,之前 ventoy 虚拟出来的光驱设备就不存在了。
然后魔改 grub2 也是对的,只是如果你去看修改的代码
https://github.com/ventoy/Ventoy/tree/master/GRUB2/MOD_SRC/grub-2.04 会发现这些改动都是表面的,跟启动机制没有关系。
所以 ventoy 并不是用 grub2 loopback 加载 iso 完成引导的。
“除非系统内有对应的驱动程序去专门去访问这段内存及模拟驱动器”这句话不完全对,Win/Linux 内核都有 loopback 加载机制,也就是你说的“驱动”。真正的问题,去哪里加载。这里需要的是逻辑意义上的地址,不管它背后是内存还是硬盘文件。
如果你大致浏览一下 ventoy 的代码,肯定会注意到 vtoyjump 这个与众不同的名字,其他目录要么是一些基础功能,要么是 ventoy 的功能。另外 ventoy 是可以输出 log 的,你会在日志中看到 vtoyjump 相关功能的调用。
以下是我根据之前的印象总结的,我估计原理应该没问题,细节可能有出入。
如果是引导 Linux ,会首先引导 ventoy.cpio ,完成虚拟光驱初始化之后再链式引导 initrd 。
如果是引导 Windows ,会用 vtoyjump 替代 Windows 的引导文件(大概名字是 winpeXXX 的一个文件),然后原版在内存中保留一份副本。(这个“替代”是 overlay 的意思,并非修改原始文件,相关的 injection 功能也被 ventoy 做成了插件)此时还处于 grub 阶段,以你描述的 loopback 方式引导 boot.wim ,完成内核初始化。此时 grub 阶段虚拟的光驱设备就访问不到了。
原本下一步是引导 winpe 进入安装程序,这时被 vtoyjump 替代,vtoyjump 利用 NT 内核 API 加载原始 iso 成为 loopback 设备。 之后 vtoyjump 再引导 winpe 那个程序,就进入正常安装过程了。