Ventoy 启动配置替换插件

在启动一些 Linux 系统时,有时需要添加或修改一些启动参数以适配特殊的硬件或者实现其他需求。
这些参数一般位于 bootloader 的配置文件中,比如 isolinux.cfggrub.cfg 等。

当前,我们可以通过如下两种方法来实现:
1、在启动时通过按 Tab 或者 e 等键进入启动菜单编辑界面修改参数。但是这种方法是临时性的,每次启动都需要操作一遍。
2、修改配置文件中的参数,重新制作一个ISO文件。这种方法比较麻烦,而且后期参数更新时又要重新制作一遍。

通过本插件,你可以指定1个新的配置文件,在启动时替换掉原来的配置文件。从而在不修改ISO文件的前提下达到修改启动参数的目的。

  • Json 配置

推荐使用 VentoyPlugson 工具进行配置,无需手动创建、编辑json文件。请参考 VentoyPlugson
关于 ventoy.json 的位置以及相关说明,请首先参考 插件入口 (*必读)
在镜像分区 /ventoy/ventoy.json 中定义了一个 conf_replace 的数组来配置自动安装。数组的每一个成员是一组字符串,分别对应ISO文件和配置文件的路径。

{
    "conf_replace": [
        {
            "iso": "/CentOS-7-x86_64-DVD-1908.iso",
            "org": "/isolinux/isolinux.cfg",
            "new": "/ventoy/centos.cfg"
        },
        {
            "iso": "/ubuntu-20.04-desktop-amd64.iso",
            "org": "/isolinux/txt.cfg",
            "new": "/ventoy/ubuntu.cfg"
        }
    ]
}

conf_replace 支持 多模式选项 因此也可以按照 Legacy BIOS 模式和 UEFI 模式分别指定:

{
    "conf_replace_legacy": [
        {
            "iso": "/CentOS-7-x86_64-DVD-1908.iso",
            "org": "/isolinux/isolinux.cfg",
            "new": "/ventoy/centos_isolinux.cfg"
        }
    ],

    "conf_replace_uefi": [
        {
            "iso": "/CentOS-7-x86_64-DVD-1908.iso",
            "org": "/EFI/BOOT/grub.cfg",
            "new": "/ventoy/centos_grub.cfg"
        }
    ]
}

关键字 类型 描述
iso 字符串 iso文件的全路径。注意,本插件只支持 ISO 文件。本参数支持模糊匹配,请参考 插件路径匹配说明
org 字符串 原始的配置文件在ISO文件内的全路径。以 / 开头。
new 字符串 用于替换的新配置文件的全路径。以 / 开头,文件必须放在镜像分区中。 文件不能大于 2MB
  • 注意

  1. 只支持 iso9660 格式的 ISO文件。
  2. 首先,只支持 ISO 文件,其他格式不支持。其次 ISO 文件必须是 iso9660 格式,原版 Windows ISO文件都是 UDF 格式,因此是不支持的。

  3. 文件替换是虚拟的,不会真正修改磁盘中 ISO 文件的内容

  4. 这个替换只在启动引导阶段有效,内核启动之后就无效了。

  5. 用户需要自己保证替换后的配置文件正确、有效
  6. Ventoy 只简单做文件动态替换,而不会检查替换后的文件内容是否正确。建议拷贝一份原始文件,然后在其基础上进行修改作为新的配置文件。

  7. 所有路径都是区分大小写的。其中 org 的路径大小写必须和 grub2 识别出的一致。
  8. 如果不确定 org 的具体路径,可以这样进行查看。以 manjaro ISO为例,首先在 Ventoy 启动界面按 c 进入命令行,执行如下命令:
    loopback viso $vtoy_iso_part/manjaro-xfce-20.1.2-201019-linux58.iso
    ls (viso)/
    ls (viso)/boot/
    ls (viso)/boot/grub/
    
    也就是先 loopback 之后 通过 ls 命令逐级显示出路径名称即可(执行命令时支持按 tab 键自动补全)。

  • 多模式选项

支持。可以分别针对 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI 和 ARM64 UEFI 模式做不同的设置。详细说明请参考 多模式选项

  • Systemd-boot 的特殊处理

绝大部分的 Linux 系统 UEFI 模式下使用grub2引导,而有一些系统,比如 ArchLinux 在 UEFI 模式下使用 systemd-boot 引导。
systemd-boot 引导的方式和 grub2 不太一样,需要做特殊处理。如何判断ISO内是否使用了 systemd-boot 作为 UEFI 模式的引导程序呢?
一般来说,只要 ISO 文件里面存在 /loader/entries 目录的都是。特殊处理就是在最后加一个 img 参数,值为数字 1,如下:

{
    "conf_replace_legacy": [
        {
            "iso": "/archlinux-2021.10.01-x86_64.iso",
            "org": "/loader/entries/03-archiso-x86_64-ram-linux.conf",
            "new": "/ventoy/03-archiso-x86_64-ram-linux-custom.conf",
            "img": 1
        }
    ]
}

总结起来就是,如果想要替换 /loader/entries 目录下的配置文件,则需要在最后加一个 img 参数。

在 github 上有一个相关的说明,有兴趣的可以参考:#1170