本页面详细介绍了 Ventoy 如何从 ISO 文件启动基于 Linux 的发行版。它解释了启动链过程、操作系统类型检测、发行版特定的钩子,以及 Ventoy 如何使用 Linux 设备映射器将 ISO 内容呈现为可启动文件系统。有关 Windows 启动过程的信息,请参阅 Windows 启动流程。
Ventoy 使用复杂的链式加载过程从 ISO 文件启动 Linux 发行版。与需要提取 ISO 文件的传统引导加载程序不同,Ventoy 通过其专门的 Linux 启动流程实现了直接 ISO 启动。
来源:IMG/cpio/ventoy/ventoy_chain.sh1-492
当从 Ventoy 启动菜单中选择一个 Linux ISO 时,系统会启动 ventoy_chain.sh,它作为负责 Linux 启动过程的主要脚本。
/proc/cmdline 中的内核参数,以识别任何用户指定的启动选项。来源:IMG/cpio/ventoy/ventoy_chain.sh20-491
Ventoy Linux 启动过程的关键组成部分是操作系统检测机制,它决定了正在启动的特定 Linux 发行版。
ventoy_chain.sh 中的 ventoy_get_os_type() 函数使用了多种检测方法
/proc/version 的内核版本信息/etc/os-release 中的特殊条目此函数返回一个字符串标识符(例如,“debian”,“rhel7”,“arch”),用于确定将执行哪个钩子脚本。
来源:IMG/cpio/ventoy/ventoy_chain.sh45-394
Ventoy 可以检测并启动各种 Linux 发行版。下表显示了一些主要发行版及其检测方法
| 发行版 | 检测方法 | 钩子脚本 |
|---|---|---|
| Debian/Ubuntu | 检查内核版本中是否有“debian”或“ubuntu” | debian/ventoy-hook.sh |
| RHEL/CentOS 7/8/9 | 检查内核版本中是否有“el7”、“el8”、“el9” | rhel7/ventoy-hook.sh |
| Arch Linux | 检查内核版本中是否有“archlinux”或“ARCH” | arch/ventoy-hook.sh |
| SUSE | 检查内核版本中是否有“SUSE” | suse/ventoy-hook.sh |
| Fedora | 检查内核版本中是否有“.fc[0-9][0-9].” | rhel7/ventoy-hook.sh |
| Gentoo | 检查内核版本中是否有“gentoo” | gentoo/ventoy-hook.sh |
| Alpine | 检查内核版本中是否有“Alpine” | alpine/ventoy-hook.sh |
| TrueNAS | 检查内核版本中是否有“truenas” | debian/truenas-hook.sh |
来源:IMG/cpio/ventoy/ventoy_chain.sh45-394 IMG/cpio/ventoy/hook/debian/ventoy-hook.sh22-121
在操作系统检测之后,Ventoy 会执行特定于发行版的钩子脚本,以使启动过程适应特定的 Linux 发行版。
这些钩子执行各种发行版特定的任务
来源:IMG/cpio/ventoy/ventoy_chain.sh397-401 IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh1-198 IMG/cpio/ventoy/hook/debian/ventoy-hook.sh1-138
对于基于 Red Hat 的发行版(包括 RHEL、CentOS 和 Fedora),Ventoy 的钩子脚本执行多项关键操作
来源:IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh1-198 IMG/cpio/ventoy/hook/rhel7/ventoy-inotifyd-hook.sh1-89
对于 Debian 系列发行版,钩子脚本处理
来源:IMG/cpio/ventoy/hook/debian/ventoy-hook.sh1-138 IMG/cpio/ventoy/hook/debian/truenas-hook.sh1-27 IMG/cpio/ventoy/hook/debian/truenas-disk.sh1-53 IMG/cpio/ventoy/hook/debian/truenas-bottom.sh1-26
Ventoy Linux 启动过程的关键组成部分是设备映射器集成,它将 ISO 文件作为块设备呈现给 Linux 内核。
过程如下:
udev_disk_hook.sh 来设置设备映射器dmsetup 创建一个映射到 ISO 文件的虚拟块设备 /dev/ventoy这种方法允许 Linux 安装程序或 live 系统在无需先提取的情况下访问 ISO 文件内容。
来源:IMG/cpio/ventoy/hook/rhel7/ventoy-inotifyd-hook.sh28-82 IMG/cpio/ventoy/hook/ventoy-os-lib.sh1-173
对于许多发行版,Ventoy 使用 Linux 的 inotify 机制来检测 Ventoy 分区何时在系统中可用。
该过程包括
inotifyd 守护进程来监视设备创建这种方法确保 Ventoy 设备能够正确设置,而不管在启动过程中何时发生硬件检测。
来源:IMG/cpio/ventoy/hook/rhel7/ventoy-inotifyd-hook.sh1-89 IMG/cpio/ventoy/hook/mageia/ventoy-inotifyd-hook.sh1-71 IMG/cpio/ventoy/hook/gobo/ventoy-inotifyd-hook.sh1-40
Ventoy 为许多具有独特启动要求的 Linux 发行版提供了特殊的处理。
TrueNAS 需要对 ISO 挂载进行特殊处理
/dev/mapper/ventoy来源:IMG/cpio/ventoy/hook/debian/truenas-hook.sh1-27 IMG/cpio/ventoy/hook/debian/truenas-disk.sh1-53 IMG/cpio/ventoy/hook/debian/truenas-bottom.sh1-26
对于 EWE(嵌入式工作站环境)等专业 Linux 发行版
来源:IMG/cpio/ventoy/hook/ewe/ventoy-hook.sh1-26 IMG/cpio/ventoy/hook/ewe/ventoy-disk.sh1-76
在所有准备工作完成后,Ventoy 将控制权移交给 Linux 发行版的本地 init 系统。
移交过程
/proc 并清理环境变量/init、/sbin/init、/linuxrc)exec 将控制权转移给真正的 init 进程这种谨慎的移交确保了 Linux 发行版正常启动,而不会意识到它是从 ISO 文件而不是物理介质运行的。
来源: IMG/cpio/ventoy/ventoy_chain.sh452-491
Ventoy 的 Linux 启动过程是一个复杂的系统,它允许直接从 ISO 文件启动,而无需进行解压。通过检测 Linux 发行版类型,应用适当的钩子(hooks),并设置必要的设备映射,Ventoy 为广泛的 Linux 发行版提供了一个无缝的启动体验。
这种方法带来了几项优势:
操作系统检测、发行版特定的钩子以及设备映射器的集成相结合,使 Ventoy 能够支持各种 Linux 发行版,同时保持一致的用户体验。