Ventoy — мультизагрузка образов OS с преферансом и куртизанками

b9pysevufzwsgpwox9haj9sfpcm.jpeg

Привет Хабр!

Существует несколько программ с графическим интерфейсом, предназначенных для создания Live USB-дисков.

Так начиналась переводная статья, комментарии к которой стали вторым толчком (а был ещё и первый) для написания обзора возможностей, системы для создания мультизагрузочных флешек ventoy.

Проект начатый китайским разработчиком longpanda примерно полтора года назад, в марте 2020-го, успел набрать популярность и уже включён в состав репозиториев некоторых дистрибутивов linux. И неспроста.


Что умеет? Базовые возможности.


  • Устанавливаться на флешку / sd card / обычный диск.
  • Разбивать флешку (целевой носитель) под MBR или GPT.
  • Обновляться без потери данных на носителе.
  • Имеет поддержку Secure Boot™.
  • Имеет установщики под linux (CLI / Web / Qt & GTK GUI) и Windows (GUI).
  • Умеет грузить загрузочные ISO Windows, Windows PE, Linux, *BSD, Android X86 etc. Список протестированных ISO-шников насчитывает 742 позиции, на данный момент.
  • Кроме x86_64 и x86, умеет в следующие архитектуры: IA32 UEFI, ARM64 UEFI, MIPS64 UEFI (Что интересно, протестировано на всяких китайских железках, типа Loongson).
  • Поддерживает загрузку x86 OpenWRT.
  • Умеет загружать floppy images, а также имиджи формата VHD, VDI и RAW.
  • Имеет поддержку Persistence для LiveCD Fedora, Ubuntu, Arch, Mint etc.
  • Также умеет в файлы для unattended installation различных дистрибутивов linux и windows.
  • Умеет в Memdisk Mode — режим при котором образ целиком загружается в память и запускается уже оттуда (Это позволяет, например, загрузить KolibriOS и некоторые ремонтные диски на основе DOS).
  • В случае проблем с запуском Windows образов в нормальном режиме, может переключаться в WIMBOOT mode.
  • GUI / Web инсталлятор локализован на большое количество языков, включая русский.
  • Имеет развитую систему плагинов, в основном конфигурируемую при помощи json файла конфигурации.

И это, разумеется, ещё не всё. Это вот то, что вспомнилось сходу. Дальше при рассмотрении плагинов, мы увидим другие вкусности, а некоторые из перечисленных рассмотрим подробнее, так как часть из вышеперечисленного конфигурируется через плагины.


Получение и установка

Скачать бинарники ventoy можно с GitHub. Кроме бинарников под Windows и Linux, есть также вариант с LiveCD, на основе Linux и GUI установщиком.

Скачиваем, распаковываем:

$ curl -L https://github.com/ventoy/Ventoy/releases/download/v1.0.55/ventoy-1.0.55-linux.tar.gz | tar -zxv
$ cd ventoy-1.0.55

Пользователи Arch-Linux могут подключить сторонние репозитории и скачать оттуда. Также есть в AUR. Пользователи Manjaro просто могут набрать sudo pacman ventoy.

Далее есть три варианта:


  1. CLI
  2. Web GUI
  3. GTK / Qt GUI

Пробежимся по всем трём:


▍ CLI

ВНИМАНИЕ! Первоначальная установка на устройство (флешку/HDD) удаляет все данные на нём!

Cамый простой метод:

sudo ./Ventoy2Disk.sh -i /dev/sdX

поставит ventoy на устройство /dev/sdX с разбивкой MBR. При этом создадутся два раздела. Раздел FAT на 32mb с самим ventoy, в конце диска. И раздел для данных в начале диска, отформатированный под exFAT и занимающий всё оставшееся место. Данный метод позволит грузиться на практически всех системах с BIOS и UEFI без SecureBoot. Раздел для данных можно переформатировать в ext2–4 и XFS, при этом увеличится скорость работы, но нельзя будет закидывать данные из Windows (по крайней мере без дополнительных костылей). При желании раздел можно отформатировать в FAT/FAT32, NTFS, UDF.

Данный метод не подходит для систем с BIOS, если суммарный размер разделов вылезает за границу в 137gb. То есть Для флешек объёмом 256gb и выше, придётся использовать встроенную фичу…

Резервирование места:

sudo ./Ventoy2Disk -i -r  /dev/sdX

Где после ключа -r поставить размер резервируемого размера в мегабайтах. В результате разбивка примет вид как на картинке ниже:

Разбивка с reserved spaceРазбивка с reserved space

Например, для флешки объёмом 256 гигов можно зарезервировать 150Gb (-r 153600) и тогда под Раздел1 + Раздел2 останется 106gb. После установки на зарезервированном месте, можно создать дополнительный раздел или несколько. Переходим к следующему варианту…

Разбивка под GPT:

sudo ./Ventoy2Disk -i -g /dev/sdX

Всё то же самое, что и в случаях с MBR разбивкой. Такую флешку можно грузить не только на UEFI системах, но и на большинстве систем с BIOS. По крайней мере у меня, на тестовом ноуте 2008-го года, c чистым легаси, прекрасно грузится. Разумеется, для GPT разбивки действуют ровно те же ограничения в 137gb, что и для MBR, так что ключик -r обязателен для больших флешек. Для систем с SecureBoot нужно ставить ключ -s (подробнее про работу с SecureBoot можно посмотреть тут). Правда обычным системам с BIOS/UEFI он никак не мешает. Поэтому я, на обычные «мелкие» флешки всегда ставлю командой:

sudo Ventoy2Disk -i -g -s /dev/sdX

Другие полезные ключи ventoy: * -I — заменяет ключ -i, если нужно установить (полная переустановка с потерей всех данных) ventoy на флешку,. на которой он уже установлен. * -l — Проверить наличие и показать версию ventoy на флешке. * -L LabelName — задать при установке метку раздела (exFAT) с данными. По умолчанию Ventoy * -u — Обновить ventoy на флешке, без потери данных:

sudo Ventoy2Disk -u /dev/sdX


▍ Web GUI

Исторически первый гуёвый интерфейс под linux. Отличающийся от своих нативных GUI Linux/Windows собратьев ровно ничем.

WebGUI
WebGUI

Запуск:

sudo ./VentoyWeb.sh

По умолчанию веб-интерфейс поднимается на http://127.0.0.1:24680 о чём ventoy радостно сообщает нам в консоли:

===============================================================
  Ventoy Server 1.0.55 is running ...
  Please open your browser and visit http://127.0.0.1:24680
===============================================================

################## Press Ctrl + C to exit #####################

Cамо собой разумеется, ключиками (-H ip.add.re.ss — Адрес, -p port и порт соответственно) его можно повесить на другой ip / port, но это такое cебе развлечение, ибо никакой защиты не предусмотрено.


▍ GTK / Qt GUI

Ну тут совсем всё просто. Правда бинарник собран под кучу архитектур и поэтому имя выглядит как VentoyGUI._arch_ По умолчанию запускается GTK интерфейс:

./VentoyGUI.x86_64

Для запуска Qt версии надо добавить ключ --qt5. Сам интерфейс GUI и Web-версии прост как табуретка и не требует пояснений для пользователей хабра. Единственное что, не ставьте крыжик «показать все устройства», если конечно у вас нет цели поставить Ventoy на HDD / SDD (или совершить цифровое самоубийство неверным движением руки)

Ventoy Qt5 GUI
Ventoy Qt5 GUI

После установки ISO файлы просто копируются, as is, на флешку в любые каталоги или корень раздела и при загрузке ventoy их найдёт и отобразит в загрузочном меню. Кроме загрузочных ISO или floppy / HDD образов вы спокойно можете хранить обычные данные. Одна беда, если на флешке будет много файлов и развитая система каталогов, производительность построения меню будет низкой, но для этого у ventoy есть отличное решение — плагины, к описанию которых мы и переходим.


Плагины, основная фишка Ventoy

Архитектурно, ventoy представляет из себя GRUB2 с очень развитой надстройкой, одной из главных частей которой является система плагинов. Конфигурируется эта система через конфиг файл формата json. живущем по пути ventoy/ventoy.json на разделе с данными (на первый раздел, где живёт сам ventoy, лазать обычному пользователю, а следственно и монтировать его, смысла нет). Json простого формата вида

{
    "plugin_name": {
        "key": "value",
        ...
        "key-n": "value-n"
    },

    "plugin_name2": [
        {
            "key1": "value1",
            ...
            "key-n": "value-n"
        },
        {
            "key1": "value1",
            ...
            "key-n": "value-n"
        }
    ]
}

Ещё в ventoy есть такая интересная штука для запуска плагинов по условию запуска в определённой среде, как Multi Mode. Например, показывать разные *.iso, если мы запустились в BIOS (legacy) или в UEFI. Для этого после имени плагина пишем имя режима, через подчёркивание: "plugin_name_mode": {. Как-то так:

{
    "theme_legacy": {
        "display_mode": "CLI"        
        },
    "theme_uefi": {
        "file": "/ventoy/theme/theme.txt",
        "gfxmode": "1920x1080"
        },
    "theme_ia32": {
        "file": "/ventoy/theme/theme_ia32.txt",
        "gfxmode": "800x600"
        },
    }
}

Глоббинг путей поддерживается в ventoy, но он предельно примитивный и имеет только одну возможность — замену отдельного символа, также, как это делает знак вопроса в bash. Только здесь его функцию выполняет *. Например:

{
    "menu_alias": [
        {
            "image": "/ISO/Ubuntu-20.**-desktop-amd64.iso",
            "alias": "Ubuntu 20"
        },
        {
            "image": "/ISO/Ubuntu-21.**-desktop-amd64.iso",
            "alias": "Ubuntu 21"
        }
    ]
}

Под эти шаблоны подпадут, например Ubuntu-20.04-desktop-amd64.iso и Ubuntu-21.01-desktop-amd64.iso. Хотелось бы большего, но и это неплохо, особенно когда меняешь *.iso на новые версии.

Дальнейшая часть является вольным переводом официального справочника по плагинам. Первоначально я хотел кратенько обозреть основные, самые полезные, плагины, но… Увлёкся и в результате получился вот такой вот TL; DR и самый полный справочник по Ventoy на русском.

И начнём мы с основного плагина Control.


▍ Global control plugin

{
    "control": [
        { "VTOY_DEFAULT_MENU_MODE": "0" },
        { "VTOY_TREE_VIEW_MENU_STYLE": "0" },
        { "VTOY_FILT_DOT_UNDERSCORE_FILE": "1" },
        { "VTOY_SORT_CASE_SENSITIVE": "0" },
        { "VTOY_MAX_SEARCH_LEVEL": "max" },
        { "VTOY_DEFAULT_SEARCH_ROOT": "/ISO" },
        { "VTOY_MENU_TIMEOUT": "10" },
        { "VTOY_DEFAULT_IMAGE": "/ISO/debian_netinstall.iso" },
        { "VTOY_FILE_FLT_EFI": "1" },
        { "VTOY_DEFAULT_KBD_LAYOUT": "QWERTY_USA" },
        { "VTOY_WIN11_BYPASS_CHECK": "0" }
    ]
}

Здесь живут основные параметры ventoy, включая и тот который отвечает за расположение каталогов с *.iso файлами и прочими файлами образов: { "VTOY_DEFAULT_SEARCH_ROOT": "/ISO" }. Что-б ventoy не приходилось шерстить весь диск для того, чтобы их найти и добавить в меню. Возможные параметры я свёл в табличку, как и у остальных плагинов, описываемых далее.


Параметры

Примечания к таблице:

  1. Специальные пункты меню: VTOY_EXIT — выйти из ventoy; Fn>xx>yy, где Fn, означает клавишу от F1, до F6 из нижней строчки, xx и yy. действие и поддействие, если есть. Ровно так как они выглядят на экране. Например: { "VTOY_DEFAULT_IMAGE": "F5>Check plugin json configuration (ventoy.json)>Check theme plugin configuration" } или { "VTOY_DEFAULT_IMAGE": "F2>Halt" } или { "VTOY_DEFAULT_IMAGE": "F1" } 2. Список раскладок клавиатуры: QWERTY_USA, AZERTY, CZECH_QWERTY, CZECH_QWERTZ, DANISH, DVORAK_USA, FRENCH, GERMAN, ITALIANO, JAPAN_106, LATIN_USA, PORTU_BRAZIL, QWERTY_UK, QWERTZ, QWERTZ_HUN, QWERTZ_SLOV_CROAT, SPANISH, SWEDISH, TURKISH_Q, VIETNAMESE 3. Типы фильтруемых файлов: ISO, WIM, EFI, IMG, VHD, VTOY 4. Ключи реестра создаваемые ventoy на лету, при включённом байпассинге проверки железа: HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig\BypassRAMCheck, HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig\BypassTPMCheck, HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig\BypassSecureBootCheck, HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig\BypassCPUCheck, HKEY_LOCAL_MACHINE\SYSTEM\Setup\LabConfig\BypassStorageCheck


▍ Image list / Image Blacklist plugin.

{
    "image_list": [
        "/ISO/Linux/archlinux-2020.10.01-x86_64.iso",
        "/ISO/cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso",
        "/ISO/Win10PE.iso"
    ]
}

Чёрный (image_blacklist) или белый (image_list) список. Может быть только либо один, либо другой. В примере выше, будут отображаться только имиджи из этого списка. Ещё в любой каталог можно поместить пустой файл .ventoyignore и тогда этот каталог и все его подкаталоги будут проигнорированы.


▍ Theme plugin

{
    "theme": {
        "file": [
            "/ventoy/theme1/theme.txt",
            "/ventoy/theme2/theme.txt",
            "/ventoy/theme3/theme.txt",
            "/ventoy/theme4/theme.txt"
        ],
        "gfxmode": "1920x1080",
        "display_mode": "GUI",
        "serial_param": "--unit=0 --speed=9600",
        "ventoy_left": "5%",
        "ventoy_top": "95%",
        "ventoy_color": "#0000ff",
        "fonts": [
            "/ventoy/theme/blur/Hack-12.pf2",
            "/ventoy/theme/blur/Hack-14.pf2",
            "/ventoy/theme/blur/Hack-16.pf2"
        ]
    }
}

Поддержка тем формата GRUB2. Возможные параметры сведены в таблицу


Параметры

При создании своей темы или использовании темы, скачанной из интернета, придётся добавить в файл темы ventoy-зависимую часть. Пример из темы по умолчанию:

+ hbox{ 
    left = 30%
    top = 95%
    width = 10%
    height = 25
    + label {text = "@VTOY_HOTKEY_TIP@" color = "blue" align = "left"} 
}

+ hbox{ 
    left = 90%
    top = 5 
    width = 10%
    height = 25
    + label {text = "@VTOY_MEM_DISK@" color = "red" align = "left"} 
}

+ hbox{ 
    left = 30%+200
    top = 95%-25
    width = 10%
    height = 25
    + label {text = "@VTOY_WIMBOOT_MODE@" color = "red" align = "left"} 
}


▍ Menu class plugin

{
    "menu_class": [
        {
            "key": "MX-",
            "class": "mx"
        },
        {
            "key": "ubuntu",
            "class": "ubuntu"
        },        
        {
            "key": "CentOS-7-",
            "class": "centos"
        },
        {
            "parent": "/ISO/Linux/Arch",
            "class": "arch"
        },
        {
            "dir": "/ISO/Linux",
            "class": "linux"
        }        
    ]
}

Наверняка многие из вас видели, как различные системы мультизагрузки отображают разные иконки для разных образов или разделов, так вот это оно. Этот плагин в виде массива элементов осуществляет поддержку именно этого функционала, а ещё отображение иконок для встроенного в ventoy функционала, как то горячие Fn клавиши и пункты их меню.

Class icons
Class icons


Параметры

Стоит отметить, что существуют встроенные классы для «иконизации» функционала ventoy (функциональные клавиши и их пункты меню). Я не буду приводить всю таблицу, отмечу лишь названия классов связанные с типами файлов: vtoydir — класс для директорий. Классы для файлов соответствующих типов: vtoyiso vtoywim vtoyimg vtoyefi vtoyvhd vtoyvtoy и vtoyret— класс для возврата в предыдущее меню. Эти классы не нужно указывать в конфиге, достаточно разместить в директории theme/icons соответствующие иконки. (vtoyiso.png например).

Класс, стоящий выше по конфигу, имеет больший приоритет. Если для встроенных классов, связанных с функциональными клавишами (см таблицу на сайте ventoy), отсутствует соответствующая иконка и при этом он является дочерним, то берётся иконка родителя. Например: У клавши F4 есть класс F4boot и четыре дочерних подкласса: boot_windows, boot_g4d, boot_disk и boot_uefi. Если есть иконка F4boot.png, а иконка какого-либо из классов отсутствует, для соответствующего пункта будет использована F4boot.


▍ Menu alias plugin

{
    "menu_alias": [
        {
            "image": "/ISO/MX-19.1_x64.iso",
            "alias": "MX 19.1 ISO file For me"
        },
        {
            "image": "/ubuntu-20.04-desktop-amd64.iso",
            "alias": "Ubuntu +++ <2004> +++"
        },        
        {
            "image": "/cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso",
            "alias": "Windows 10"
        },
        {
            "dir": "/ISO/Linux",
            "alias": "[My Linux Directory]"
        }
    ]
}

Очень полезный плагин, позволяющий алиасить имена каталогов и образов, чтобы вместо условного ru_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso в меню просто отображалось Windows 10. Табличка тут совсем маленькая и нет смысла убирать её под спойлер:


▍ Menu tip plugin

{
    "menu_tip": {
      "left": "10%",
      "top": "81%",
      "color": "blue",
      "tips": [
          {
              "image": "/linux/archlinux-2021.07.01-x86_64.iso",
              "tip": "This ISO file contains Intel SSD/NVMe/Wifi/USB 3.0 drivers and other common used software..."
          },
          {
              "image": "/xBSD/FreeBSD-12.1-RELEASE-amd64-bootonly.iso",
              "tip": "FreeBSD 12 only boot image"
          }          
      ]
    }
}

Подсказка, показываемая на экране, при наведении на определённый пункт:

Menu tip plugin в действииMenu tip plugin в действии

Табличка возможных параметров тут тоже очень простая.


▍ Menu extension plugin

Один из немногих плагинов, чья конфигурация не задаётся в ventoy/ventoy.json Этот плагин сильно завязан на GRUB и в нём можно использовать любые команды GRUB shell. Конфигурируется в файле ventoy/ventoy_grub.cfg и позволяет создавать собственное кастомное меню вызываемое по нажатию клавиши F6. Именно таким образом был сделан заглавный скриншот статьи.

menuentry "Habr greetings menu" --class=custom {
    echo '+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+ '
    echo '|H|e|l|l|o| |H|a|b|r| |f|r|o|m| |V|e|n|t|o|y|!| '
    echo '+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+ '
    sleep 10
}

submenu 'My Custom SubMenu -->' --class=customsub {        
    menuentry "My Custom Menu2" --class=custom2 {
        echo 'This is custom menu2 ... '
        sleep 1    
    }
    
    menuentry '<-- Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
        echo 'Return ...'
    }
}

menuentry '<-- Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
    echo 'Return ...'
}

Есть несколько встроенных переменных, которые можно использовать в этом меню:


  • Специальный пункт меню VTOY_RET возвращает вас в вышестоящее меню. (см. пример)
  • Все возможности, имеющиеся в GRUB, можно реализовать при помощи данного плагина. Читайте документацию.


▍ Password plugin

{
    "password": {
        "bootpwd": "txt#123456",
        "isopwd": "txt#111",
        "wimpwd": "txt#222",
        "imgpwd": "txt#333",
        "vhdpwd": "txt#444",
        "efipwd": "txt#555",
        "vtoypwd": "txt#666",
        "menupwd": [
            {
                "parent":"/MyVhdDir/WindowsVHD",
                "pwd":"md5#def#14fa11b4ab450b0204182266140e284d"
            },
            {
                "file":"/ISO/MX-19.1_x64.iso",
                "pwd":"md5#e10adc3949ba59abbe56e057f20f883e"
            },
            {
                "file":"/ISO/ubuntu-20.04-desktop-amd64.iso",
                "pwd":"md5#abc#0659c7992e268962384eb17fafe88364"
            }
        ]
    }
}

На мой взгляд, самый бесполезный плагин, защищающий разве что от шаловливых детских рук. :-). Позволяет задавать пароли как на загрузку самого ventoy, так и на выбор определённых типов файлов, директорий или отдельных образов.


Параметры

Пароли могут быть: * в plain text, формат: txt#YourSuperPassword12345, длинной не более 32-х символов * в MD5, формат: md5#e10adc3949ba59abbe56e057f20f883e * в MD5 с солью, формат: md5#MySuperSalt#0659c7992e268962384eb17fafe88364 Соль не более 16 символов.

Приоритеты паролей от частного к общему: menupwd file → menupwd parent → isopwd/wimpwd/imgpwd…


▍ Auto memdisk plugin

{
    "auto_memdisk": [
        "/ISO/mt531b.iso",
        "/ISO/ESXi.iso",
        "/ISO/Win10PE.iso"
    ]
}

Простой, но очень полезный плагин, который позволяет автоматически грузить определённые имиджи полностью в память. Та же KolibriOS или Hiren«s boot CD не желают грузиться стандартным способом, но при этом прекрасно грузятся через мемдиск. Так вот что бы не нажимать каждый раз F1 (а ведь можно и забыть) и создан этот плагин. Имейте в виду, загрузка всего исошника в память может занять длительное время. Чем больше имидж, тем дольше. Как пользоваться, понятно из примера.

ВНИМАНИЕ! Поддерживаются только ISO образы!


▍ WIMboot plugin

Один из плагинов «специального назначения», призванный лечить возможные косяки с загрузкой современных виндовс. Данный плагин не входит в комплект поставки из-за наличия проприетарных компонентов, поэтому делаем следующие шаги:


  • Скачиваем
    wget -c https://github.com/ventoy/wimiso/releases/download/v1.0/ventoy_wimboot.img 
    
    из репозитория
  • Кладём его в каталог ventoy ровно туда где у нас конфиги.
  • При необходимости использования, в меню ventoy жмём ctrl-w (и ещё раз, если решим переключиться в нормальный режим)

WIMboot modeWIMboot mode

Кстати, виндоадмины, расскажите для чего оно и как работает? Сто лет с виндами не общался!

▍ Windows VHD boot plugin

Ещё один плагин с проприетарными компонентами, для windows. Понятия не имею для чего и как, но если звёзды зажигают…

  • Скачиваем из репозитория: wget https://github.com/ventoy/vhdiso/releases/download/v3.0/ventoy_vhdboot.zip
  • Так же распаковываем ventoy_vhdboot.img в каталог ventoy на флешке.

В комменты призываются админы виндовс, дабы просветить для чего и зачем. В описании к плагину я нашёл только одно применение, через Menu extension plugin:

menuentry "Boot My Windows VHD" { set my_vhd_path="/VhdDir/Win10.vhd" if search -n -s vdiskhd -f "$my_vhd_path"; then vhdboot_common_func "($vdiskhd)$my_vhd_path" else echo "$my_vhd_path not found" fi }

Но если честно не в курсе куда такое применяют.


▍ DUD (Driver Update Disk) plugin

{
    "dud": [
        {
            "image": "/rhel-server-7.4-x86_64.iso",
            "dud": "/ventoy/dd.iso"
        },
        {
            "image": "/rhel-server-7.3-x86_64.iso",
            "dud": [
                "/ventoy/i40e_dd.iso",
                "/ventoy/qla2xxx-8.07.00.51.07.0-k-dd-rhel7u3-3.10.0-514.el7.x86_64.iso"
            ]
        },
        {
            "image": "/SLE-12-SP1-Server-DVD-x86_64-GM-DVD1.iso",
            "dud": "/ventoy/brocade_adapter_sles12sp1_dud_v3-2-7-0.iso"
        }
    ]
}

Фича, поддерживаемая дистрибутивами RHEL / Centos / Fedora (dd.iso формат) и SLES — SUSE Linux (dud.iso формат) и позволяющая подкидывать необходимые драйвера непосредственно в процессе установки.

Конфигурирование простое и ясно из примера. image — образ к которому применятся dd/dud образы. dud — строка или массив с путями до dd/dud образов.


▍ Auto installation plugin

{
    "auto_install": [
        {
            "image": "/abc/centos.iso",
            "template": "/ventoy/script/centos_kickstart.cfg"
        },
        {
            "image": "/ISO/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso",
            "template": [
                "/ventoy/script/windows_unattended1.xml",
                "/ventoy/script/windows_unattended2.xml",
                "/ventoy/script/windows_unattended3.xml",
                "/ventoy/script/windows_unattended4.xml",
                "/ventoy/script/windows_unattended5.xml",
                "/ventoy/script/windows_unattended6.xml"
            ],
            "autosel": 2
        },
        {
            "image": "/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso",
            "template": "/ventoy/script/suse_autoyast.xml"
        },
        {
            "parent": "/ISO/SUSE",
            "template": "/ventoy/script/suse_autoyast.xml"
        },
        {
            "image": "/ubuntu-16.04-server-amd64.iso",
            "template": "/ventoy/script/ubuntu_server.seed",
            "autosel": 1
        }
    ]
}

Windows и энное количество дистрибутивов Linux поддерживают т.н. Unattended installation — фичу позволяющую по специально сформированному файлу ответов, по сути дела декларативному скрипту, установить систему в фоновом режиме с определёнными настройками, не задавая вопросов пользователю. Для примера известные дистрибутивы ОС и их скрипты.

Ну и традиционная таблица параметров:


▍ Boot conf replace plugin

{
    "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": "/EFI/BOOT/grub.cfg",
            "new": "/ventoy/centos_grub.cfg"
        }
    ]
}

Плагин позволяющий «на лету» подменять grub.cfg / isolinux.cfg внутри исошника. В принципе можно подменять любые файлы. Разумеется сам исошник не меняется. Все изменения происходят в памяти, в момент загрузки. Это аналогично нажатию e в меню GRUB и ручному редактированию параметров.

Табличка очень простая.


▍ Injection plugin

{
    "injection": [
        {
            "image": "/ISO/MX-19.1_x64.iso",
            "archive": "/driver/mx-driver.tar.gz"
        },
        {
            "image": "/ubuntu-20.04-desktop-amd64.iso",
            "archive": "/driver/ubuntu-driver.tar.bz2"
        },        
        {
            "image": "/cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso",
            "archive": "/driver/win10-driver.zip"
        },
        {
            "parent": "/ISO/Windows",
            "archive": "/driver/win-driver.zip"
        }
    ]
}

Плагин позволяющий подкидывать любые файлы и каталоги внутрь файловой системы iso-шника. Объединяет в себе свойства предыдущего плагина и немного DUD и Auto installation plugin, только более низкоуровневый. Например, можно подкинуть архив с sources/$OEM$ и нужными драйверами, в виндовс. В Windows содержимое архива распакуется в X:\, в Linux соответственно в /.

Параметры:


▍ Persistence plugin

{
    "persistence": [
        {
            "image": "/ISO/MX-19.1_x64.iso",
            "backend": "/persistence/MX-19.1_x64.dat"
        },
        {
            "image": "/ISO/ubuntu-20.04-desktop-amd64.iso",
            "backend": [
                "/persistence/ubuntu_20.04_1.dat",
                "/persistence/ubuntu_20.04_2.dat",
                "/persistence/ubuntu_20.04_3.dat"
            ],
            "autosel": 2
        },        
        {
            "image": "/linuxmint-19.3-xfce-64bit.iso",
            "backend": "/persistence/linuxmint_19.03.dat",
            "autosel": 1            
        }
    ]
}

Параметры

Очень многие LiveCD (яркий пример Kali Linux) позволяют сохранять состояние между сеансами. Они записывают состояние на раздел с определённой меткой диска. Вот некоторые из них:


Таблица протестированных образов

Для получения раздела необходимо создать образ диска, с правильной меткой. Есть два варианта: Скачать готовый образ. Или создать самому. Для этого в комплекте поставки есть удобный скрипт:

$ ./CreatePersistentImg.sh --help
Usage:  CreatePersistentImg.sh [ -s size ] [ -t fstype ] [ -l LABEL ] [ -c CFG ]
  OPTION: (optional)
   -s size in MB, default is 1024
   -t filesystem type, default is ext4  ext2/ext3/ext4/xfs are supported now
   -l label, default is casper-rw
   -c configfile name inside the persistence file. File content is "/ union"
   -o outputfile name, default is persistence.dat

Тут всё просто. Если запустить без параметров, то утилита выполнится со следующими параметрами, по умолчанию: ./CreatePersistentImg.sh -s 1024 -t ext4 -l casper-rw -o persistence.dat В результате создастся образ persistence.dat, размером в гигабайт, раздел на нём будет иметь метку casper-rw и отформатирован будет под ext4. Параметр -c нужен для некоторых дистрибутивов (см. примечания в табличке выше).

Для увеличения или уменьшения (если он не отформатирован под XFS) раздела, и не забит под завязку, используется утилита ./ExtendPersistentImg.sh file [-]size file — файл который нужно обработать, size — насколько надо увеличить или уменьшить (если перед size cтоит -) раздел. Раздел увеличивается или уменьшается без потери данных.


▍ vDisk boot plugin

Ну что ж, последний на сегодняшний день плагин. Плагин, позволяющий запускать VHD/VDI/RAW имиджи из VirtualBox, с установленным в них Linux. Поддерживаются только имиджи фиксированного размера. Динамические образы не поддерживаются! Ещё, при установке ОС в виртуалку, в ней должна быть включена поддержка UEFI! Не создавайте снапшотов виртуалки, что приведёт к невозможности загрузки!

UEFI On!UEFI On!

После установки и настройки ОС в виртуалке, скачайте в виртуалку последнюю версию vtoyboot скрипта из репозитория, распакуйте и запустите:

sudo sh vtoyboot.sh

ВНИМАНИЕ! Данный скрипт также нужно запускать при каждом обновлении ядра и/или обновления initrd образа на гостевой системе!

Затем, после отключения виртуальной машины, переименуйте файл в *.vtoy Например: mv Manjaro.vhd Manjaro.vhd.vtoy и скопируйте на флешку.

Кроме всего прочего, данный плагин можно заставить запускать такие образы с вашего локального HDD/SSD, для чего можно воспользоваться Menu Extension Plugin:

menuentry "Boot My Linux VHD" {    
    set my_vdisk_path="/VhdDir/Ubuntu.vhd.vtoy"
    
    if search -n -s vdiskhd -f "$my_vdisk_path"; then
        vtoyboot_common_func "($vdiskhd)$my_vdisk_path"
    else
        echo "$my_vdisk_path not found"
    fi
}

Где в переменную my_vdisk_path надо прописать полный путь до образа, от корня вашего физического раздела. Например, если у вас /home на отдельном разделе и имидж живёт по пути /home/vasya/vImages/Arch.vdi.vtoy то в переменную надо будет прописать /vasya/vImages/Arch.vdi.vtoy

Дисклеймер от меня… Сильно подозреваю, что с шифрованными разделами, такой трюк не прокатит.

Да, такие образы можно грузить из других загрузчиков. Подробнее здесь. Ну и наконец таблица с замечаниями по установке на конкретные дистрибутивы.


  1. Для некоторых дистрибутивов, например, deepin-desktop-community-1010-amd64.iso понадобится установить дополнительный пакет, что бы была возможность грузиться на системах с BIOS! Для дипина это будет пакет grub-pc-bin_2.02.24.3-1+eagle_amd64.deb живущий в /pool/main/g/grub2/ установочного диска. Общий шаблон для поиска: grub-pc-bin_xxx.deb или grub2-2.xxxx.rpm для RPM based дистров. Например, для Mageia.

Заключение

Вот такими, почти неограниченными возможностями, обладает, казалось бы, обычная система мультизагрузки ventoy. К сожалению есть проблемы с загрузкой любительских, исследовательских и экспериментальных ОС — Haiku, Sculpt (Genode OS Framework), Redox, Plan9 etc. Разумеется, не грузятся OS/2 и её деривативы. Для этих операционок не помогает даже memdisk. Но проект бурно развивается (я пользуюсь этой утилитой и слежу за развитием примерно с июня прошлого года и помню то время, когда не грузились системы семейства *BSD) и я думаю, что многие проблемы будут решены. Надеюсь обзор, мой вольный перевод документации по плагинам, вам понравился и вы ещё не раз заглянете сюда за справочной информацией. Ибо более полного описания функционала, на русском, я на просторах интернета не встречал.

Бонус: Соответствие бинарников скачанных с GitHub и бинарников установленных из пакета (Arch like дистрибутивы).

image-loader.svg

© Habrahabr.ru