菜单

启动过程

相关源文件

目的与范围

本文档解释了 Ventoy 如何从 ISO 文件启动操作系统。它涵盖了从开机到固件初始化、引导加载程序阶段、ISO 选择,最后启动所选操作系统까지的完整启动序列。详细介绍了 Windows 和 Linux 的启动路径,包括用于挂载 ISO 文件和执行系统安装程序或 Live 环境的机制。

有关将 Ventoy 安装到 USB 驱动器的信息,请参阅 安装工具

启动序列概述

Ventoy 的启动过程包含几个阶段,这些阶段会根据系统固件类型(UEFI 或 Legacy BIOS)和要启动的操作系统类型(Windows 或 Linux)而有所不同。

来源

固件和引导加载程序阶段

UEFI 启动路径

在 UEFI 模式下,系统固件会加载 Ventoy EFI 应用程序(ventoy_x64.efi 或相应的特定架构变体)。此 EFI 应用程序随后加载 GRUB,GRUB 继续启动过程。

Legacy BIOS 启动路径

在 BIOS 模式下,系统从 Ventoy 设备加载 MBR 代码,然后直接加载 GRUB。

来源

ISO 菜单和选择

加载包含 Ventoy 模块的 GRUB 后,它会执行几项功能:

  1. 扫描 Ventoy 分区以查找 ISO 文件
  2. 为每个 ISO 文件构建一个包含条目的菜单结构
  3. 将启动菜单呈现给用户
  4. 处理用户选择并执行相应的启动路径

当用户选择一个 ISO 文件时,Ventoy 会确定它是基于 Windows 还是 Linux 的系统,并执行相应的启动处理程序。

Windows 启动过程

Windows 启动由 vtoyjump.exe 实用程序处理,该实用程序负责挂载 ISO 文件并将控制权传递给 Windows 安装程序或环境。

来源

VentoyMountISOByAPI 方法

对于 Windows 8 及更高版本,vtoyjump.exe 使用 Windows 虚拟磁盘 API 来挂载 ISO 文件。该过程包括:

  1. 使用 OpenVirtualDisk() 打开虚拟磁盘
  2. 使用 AttachVirtualDisk() 附加虚拟磁盘
  3. 自动分配驱动器盘符,或在指定时使用 Y: 驱动器

来源

VentoyMountISOByImdisk 方法

对于 Windows 8 之前的系统或作为备用方法,Ventoy 使用 ImDisk 来挂载 ISO 文件。此方法:

  1. 如果 ImDisk 驱动文件不存在,则将其复制
  2. 加载 ImDisk 驱动程序
  3. 使用 ImDisk 挂载 ISO 并分配驱动器盘符

来源

Windows 启动过程完成

成功挂载 ISO 后,Windows 安装程序会自动从挂载的驱动器启动。vtoyjump.exe 也可能执行其他任务:

  • 自动注入应答文件以实现无人值守安装
  • 如有必要,进行 WIM 文件修补
  • 对某些 Windows 发行版进行专用处理

Linux 启动过程

Linux ISO 文件通过一系列 shell 脚本启动,这些脚本会识别 Linux 发行版并应用相应的钩子。

来源

ventoy_chain.sh

此脚本是启动 Linux ISO 文件的主要入口点,并执行几项关键功能:

  1. 解析内核命令行参数
  2. 识别 Linux 发行版
  3. 执行相应的操作系统特定钩子脚本

来源

特定于操作系统的钩子脚本

Ventoy 包含特定于发行版的钩子脚本,这些脚本处理每个 Linux 发行版的特殊要求。这些钩子位于 hook/ 目录中,并根据 ventoy_get_os_type() 识别的发行版执行。

钩子通常:

  • 应用发行版所需的特定补丁
  • 修改内核命令行参数
  • 处理特殊的挂载要求
  • 为发行版的安装程序或 Live 环境设置环境

ventoy-hook-lib.sh

这是操作系统特定钩子脚本使用的通用实用程序库。它提供了以下功能:

  • 查找和加载内核模块
  • 管理设备映射器
  • 获取 Ventoy 设备信息
  • 挂载 ISO 文件
  • 应用设备映射器补丁

来源

设备映射器补丁

Ventoy 的一项关键创新是设备映射器补丁,它允许 Linux 发行版直接从 ISO 文件启动,而无需解压。

来源

设备映射器模块加载

钩子库首先通过查找 /proc/devices 中的 'device-mapper' 来检查设备映射器是否已可用。如果未找到,它会尝试使用以下命令加载模块:

  1. modprobe dm_modmodprobe dm-mod
  2. 如果失败,它会直接使用 insmod 搜索并加载 dm-mod.ko。
  3. 如有必要,它可以解压缩压缩的模块(例如 .ko.xz、.ko.gz)。

设备映射器补丁加载

加载设备映射器模块后,Ventoy 会应用其自定义补丁:

  1. 加载 Ventoy 设备映射器补丁模块
  2. 向设备映射器注册新的目标类型
  3. 创建一个映射到 ISO 文件的设备映射器设备
  4. 使 ISO 内容可以作为块设备在 /dev/mapper/ventoy 下可用

此补丁使 Linux 能够直接从 ISO 文件启动,就像它是一个物理设备一样。

引导参数和配置

Ventoy 使用各种内核参数来控制启动过程:

参数目的用途
vtinit替换 init 系统的 rdinit 参数Linux 内核
vtoy_disk识别 Ventoy 磁盘设备Windows 和 Linux
vtoy_img_pathVentoy 分区内 ISO 文件的路径Windows 和 Linux
vtoy_dm_patch控制设备映射器修补行为Linux
vtoy_debug启用调试日志记录Windows 和 Linux

这些参数由 vtoyjump.exe(用于 Windows)和 ventoy_chain.sh(用于 Linux)解析,以控制启动过程。

来源

错误处理和恢复

Ventoy 包含各种备用和恢复机制来处理启动失败。

来源

Windows 错误处理

对于 Windows ISO 挂载:

  • 如果 Windows API 方法失败,Ventoy 会回退到 ImDisk 方法
  • 会记录错误消息以供调试
  • 存在针对特定 Windows 发行版的特殊处理

Linux 错误处理

对于 Linux 启动:

  • 加载设备映射器模块的多种方法
  • 如果需要,能够解压缩内核模块
  • 根据发行版提供备用的挂载方法
  • 详细的日志记录以帮助诊断问题

特殊启动类型

除了标准的 ISO 启动外,Ventoy 还支持几种特殊的启动模式:

文件类型启动方法备注
ISO标准方法大多数操作系统的主要格式
WIM通过 vtoyjump 进行特殊处理Windows 安装文件
VHD/VHDX特殊挂载过程用于某些 Windows 和 Linux 环境
IMG被视为 ISO 文件某些 Linux 发行版使用
EFI直接执行 EFI 应用程序用于特殊启动环境

来源

结论

Ventoy 的启动过程是一个复杂的系统,它连接了固件初始化、引导加载程序加载、ISO 文件管理和特定于操作系统的启动。Ventoy 独有的关键创新包括:

  1. 对 UEFI 和 Legacy BIOS 系统的无缝支持
  2. Windows 和 Linux 都支持无需解压即可直接启动 ISO 文件
  3. 用于 Linux ISO 启动的设备映射器补丁
  4. 用于 Windows ISO 文件的多种挂载方法
  5. 针对特定发行版的钩子以实现最大兼容性

这些功能协同工作,在各种操作系统上提供一致可靠的启动体验。