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
.
Далее есть три варианта:
- CLI
- Web GUI
- 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
Например, для флешки объёмом 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
Запуск:
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
После установки 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 не приходилось шерстить весь диск для того, чтобы их найти и добавить в меню. Возможные параметры я свёл в табличку, как и у остальных плагинов, описываемых далее.
Примечания к таблице:
- Специальные пункты меню:
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
Стоит отметить, что существуют встроенные классы для «иконизации» функционала 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 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 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: