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

Привет Хабр!

Существует несколько программ с графическим интерфейсом, предназначенных для создания 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 <SIZE_MB> /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 <source>
    из <a href="https://github.com/ventoy/wimiso/releases">репозитория</a></li>
    <li>Кладём его в каталог <code>ventoy</code> ровно туда где у нас конфиги.</li>
    <li>При необходимости использования, в меню ventoy жмём <code>ctrl-w</code> (и ещё раз, если решим переключиться в нормальный режим)</li>
    </ul>
    <p><img src="https://habrastorage.org/webt/vj/gf/hd/vjgfhdj3o5cdivsgp0prsfvvg3s.png" alt="WIMboot mode" /><i><font color="#999999">WIMboot mode</font></color></p>
    <p>Кстати, виндоадмины, расскажите для чего оно и как работает? Сто лет с виндами не общался!</p>
    <h3><font color="#3AC1EF">▍ Windows VHD boot plugin</font></h3>
    <p>Ещё один плагин с проприетарными компонентами, для windows. Понятия не имею для чего и как, но если звёзды зажигают…</p>
    <ul>
    <li>Скачиваем из <a href="https://github.com/ventoy/vhdiso/releases">репозитория</a>: <code>
    wget https://github.com/ventoy/vhdiso/releases/download/v3.0/ventoy_vhdboot.zip</code></li>
    <li>Так же распаковываем <code>ventoy_vhdboot.img</code> в каталог <code>ventoy</code> на флешке.</li>
    </ul>
    <p>В комменты призываются админы виндовс, дабы просветить для чего и зачем. В описании к плагину я нашёл только одно применение, через Menu extension plugin:</p>
    <source>
    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 скрипта из репозитория, распакуйте и запустите:

    <code>sudo sh vtoyboot.sh</code>

    ВНИМАНИЕ! Данный скрипт также нужно запускать при каждом обновлении ядра и/или обновления 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 дистрибутивы).

Читайте так же:

  • Мог ли Седов дойти до полюсаМог ли Седов дойти до полюса Автор: Юрий ДеточкинВ 1912 году Георгий Седов организовал экспедицию по покорению Северного полюса. По плану должны были летом на корабле дойти до Земли Франца-Иосифа, перезимовать там, а весной двинуться к полюсу на собачьих упряжках.Туда-обратно, приключение на шесть месяцев, осенью […]
  • Первый в мире смартфона на Snapdragon 888 Plus уже можно заказать в Китае. Бонусы за Honor Magic3 по предзаказу — на 45 долларовПервый в мире смартфона на Snapdragon 888 Plus уже можно заказать в Китае. Бонусы за Honor Magic3 по предзаказу — на 45 долларов Как пишет источник. В Китае розничные магазины начали принимать предварительные заказы на флагманский смартфон Honor Magic3. Пользователям. Которые готовы внести депозит за еще не представленную модель. Обещана «коробка с подарками» на сумму 45 долларов в эквиваленте. Правда, какой […]
  • Google Мой бизнес запускает два новых отчета на странице статистикиGoogle Мой бизнес запускает два новых отчета на странице статистики Зарубежные специалисты заметили, что в Google Мой бизнес появились два новых отчета на странице статистики. Об этом сообщает Search Engine Roundtable. Один из этих отчетов, «Популярное время», показывает посещаемость в определенные дни и часы. А другой – что потребители думают о […]
  • Google запускает бесконечную прокрутку в мобильном поискеGoogle запускает бесконечную прокрутку в мобильном поиске Google объявил о запуске бесконечной прокрутки в мобильном поиске. Теперь, когда пользователи дойдут до нижней части страницы на смартфоне, следующий набор результатов будет загружен автоматически. Хотя пользователи зачастую могут найти то, что им нужно, среди первых результатов на […]