从相关文档中可以知道,Ventoy在启动时会基于ISO文件创建一个虚拟设备然后启动它。 但是这个虚拟设备仅仅是BIOS层面的(Legacy或者UEFI)。大多数情况下它只在启动阶段存在。 绝大多数现代操作系统的内核在启动之后都是使用它们自身的驱动来访问硬件,因此这个虚拟设备对于内核来说是不可见的。 一般情况下,ISO里面的系统起来之后会遍历所有的硬件设备(CDROM/USB/HD ...) 去寻找安装源。 但是在Ventoy启动的环境下是找不到的,因为没有这样一个实际的安装介质,是虚拟的设备嘛。但是系统内核不知道这个情况,它们不知道当前是 Ventoy使用虚拟设备引导起来的,并不是传统的物理光驱或者U盘引导起来的。所以,如果不做特殊处理的话,大部分ISO文件启动以后就会报找不到安装源的错误而停止。 因此,Ventoy必须做很多hook的工作,帮助内核找到、挂载安装源。其实就是告诉内核,当前是Ventoy从一个虚拟的设备引导起来的,你的安装源并不在常规的介质中,而是在XX硬盘的XXX.iso文件, 你把它挂载起来当做安装源就可以啦。。。。。 但是这个hook工作是非常枯燥而且麻烦的,因为系统种类实在太多而且有各种各样的特殊情况。
实际上,Ventoy在启动之前,把相关的信息都保存在了运行时内存中(保留内存段),同时还提供了一个工具可以在系统下获取这些信息。
这样,操作系统调用一下这个工具就可以知道,当前是Ventoy环境启动的,而且还能详细知道是基于哪个磁盘的哪个ISO文件启动而来的。
这样,系统就可以直接去找到对应的ISO文件,挂载起来作为安装源就可以了。不需要再用常规的方式去寻找。
当然,如果是常规方式启动起来的,系统下调用这个工具是获取不到任何数据的,这种情况下就按照常规的启动步骤往下走就可以了。
因此,如果ISO里面的系统集成了这个工具,并且做了上述处理的话,对于Ventoy就很简单了,只需要做好这个虚拟设备就可以了,不用再费力做那些hook工作了。
另一方面,还有一个问题就是,就算ISO里面的系统做了这些工作,Ventoy怎么知道呢?因此Ventoy提供了几种方式让ISO文件来标识自己。
我把集成了这个工具并且做了上述处理的操作系统或者ISO文件称之为 "Ventoy Compatible" 的。
"Ventoy Compatible" 的概念是我自己提出来的,我希望有一天它能得到认可和支持。
发行版 | 说明 |
---|---|
a1ive / grub2-filemanager | v7.1.0+ grubfm_multiarch.iso |
U盘魔术师 (USM) | 2020/05/30 之后的正式版本 |
Hikari PE | V8.1 之后的正式版本 |
系统发行版想成为 Ventoy Compatible 的话,需要做以下事情:
详细说明请参考 文档手册 中的相关章节。
这里提供了一个批处理和一个shell脚本供参考。脚本中说明了在系统下如何检查、获取相关信息,以及如何去挂载对应的ISO文件。
vtoydump 就是Ventoy提供的一个在系统下获取相关信息的工具。你可以从下面的链接中下载它的二进制文件和源代码。
git clone https://github.com/ventoy/vtoydump.git or
git clone https://gitee.com/longpanda/vtoydump.git
关于 "Ventoy Compatible" 的详细说明,你可以参考 文档手册 中的相关章节。