Существует несколько программ с графическим интерфейсом, предназначенных для создания 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 <SIZE_MB> /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_DEFAULT_MENU_MODE |
string | Стиль меню: 0 — Список; 1 — Дерево |
VTOY_TREE_VIEW_MENU_STYLE |
string | Вид древообразного стиля меню: 0 — показывать каталоги и файлы с размером; 1 — не показывать |
VTOY_FILT_DOT_UNDERSCORE_FILE |
string | Фильтровать файлы с префиксом ._ (генерируются MacOS): 0 — не фильтровать; 1 — фильтровать |
VTOY_SORT_CASE_SENSITIVE |
string | Учитывать регистр при сортировке: 0 — не учитывать; 1 — учитывать |
VTOY_DEFAULT_SEARCH_ROOT |
string | Путь поиска *.iso и прочих файлов образов. При загрузке ventoy будет искать файлы только в этом каталоге и его подкаталогах. |
VTOY_MAX_SEARCH_LEVEL |
string | На сколько уровней опускаться по поддереву каталогов (от корня, если не указан предыдущий параметр или от каталога указанного в предыдущем параметре): 0 — не обходить рекурсивно; max — обходить все дерево; 1 ..n уровни дерева |
VTOY_MENU_TIMEOUT |
string | Таймаут, в секундах, после которого выполнится VTOY_DEFAULT_IMAGE |
VTOY_DEFAULT_IMAGE |
string | Пункт меню, по умолчанию. Кроме имиджей умеет в специальные пункты меню (cм [1]) |
VTOY_VHD_NO_WARNING |
string | Предупреждать если раздел на VHD образе не отформатирован под NTFS: 0 — предупреждать (по умолчанию); 1 — не предупреждать |
VTOY_DEFAULT_KBD_LAYOUT |
string | Раскладка клавиатуры (по умолчанию QWERTY_USA ) полный список раскладок см. в [2] |
VTOY_FILE_FLT_type |
string | Фильтровать в списке образов файлы определённого type [3] например VTOY_FILE_FLT_ISO : 0 — не фильтровать; 1 — фильтровать |
VTOY_WIN11_BYPASS_CHECK |
string | Пропускать проверку железа, при установке Windows 11, с оригинального образа. Работает через прописывание ключей реестра [4], «на лету»: 0 — проверять железо; 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_MACHINESYSTEMSetupLabConfigBypassRAMCheck
,HKEY_LOCAL_MACHINESYSTEMSetupLabConfigBypassTPMCheck
,HKEY_LOCAL_MACHINESYSTEMSetupLabConfigBypassSecureBootCheck
,HKEY_LOCAL_MACHINESYSTEMSetupLabConfigBypassCPUCheck
,HKEY_LOCAL_MACHINESYSTEMSetupLabConfigBypassStorageCheck
▍ 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. Возможные параметры сведены в таблицу
Ключ | Тип | Описание |
---|---|---|
file |
string/string array | Полный путь к файлу или файлам темы (как в примере выше). Если это массив путей, то ventoy рандомно выбирает файл темы из этого списка |
gfxmode |
string | Графический режим вида Width xHeight . По умолчанию "1024x768" |
display_mode |
string | В консольном — CLI , графическом — GUI , через последовательный порт — serial или serial_console (serial при наличии видеокарты) запускаться при старте. По умолчаню GUI |
serial_param |
string | Параметры последовательного порта в формате описанном в документации к GRUB2 |
ventoy_left |
string | Надпись с версией Ventoy. Отступ слева, в %. По умолчанию "5%" |
ventoy_top |
string | Та же надпись, отступ сверху. По умолчанию "95%" |
ventoy_color |
string | Цвет надписи с версией Ventoy. По умолчанию "#0000ff" |
fonts |
string array | Массив полных путей к используемым шрифтам. |
При создании своей темы или использовании темы, скачанной из интернета, придётся добавить в файл темы 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
Ключ | Тип | Описание |
---|---|---|
key |
string | Подстрока по которой ищется имя файла образа(без путей!) |
parent |
string | Директория (без завершающего слеша(/ )!) описанная в этом параметре и все её подкаталоги будет иметь именно этот класс |
dir |
string | Директория без подкаталогов будет иметь соответствующий класс. Завершающий слеш также запрещён! |
class |
string | Собственно класс. Чтобы произошло отображение иконки класса, в каталоге темы должен быть подкаталог icons с соответствующей иконкой. Например, для "class": "debian" должна существовать иконка icons/debian.png |
Стоит отметить, что существуют встроенные классы для «иконизации» функционала 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
. Табличка тут совсем маленькая и нет смысла убирать её под спойлер:
Ключ | Тип | Описание |
---|---|---|
image |
string | Полный путь к образу |
dir |
string | Полный путь к директории, без завершающего слеша |
alias |
string | Алиас |
▍ 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 в действии
Табличка возможных параметров тут тоже очень простая.
Ключ | Тип | Описание |
---|---|---|
left |
string | Позиция по X, в процентах |
top |
string | Позиция по Y (сверху), в процентах |
color |
string | Цвет (Можно в формате #rrggbb ) |
tips |
array | Массив с обЪектами image , tip |
image |
string | Полный путь к имиджу |
tip |
string | Подсказка |
▍ 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 ...'
}
Есть несколько встроенных переменных, которые можно использовать в этом меню:
Переменная | Пример |
---|---|
vtoydev |
hd1 |
vtoy_iso_part |
(hd1,1) |
vtoy_efi_part |
(hd1,2) |
VENTOY_VERSION |
1.0.55 |
- Специальный пункт меню
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, так и на выбор определённых типов файлов, директорий или отдельных образов.
Ключ | Тип | Описание |
---|---|---|
bootpwd |
string | Пароль на загрузку ventoy. Выход после трёх неправильных попыток |
isopwd |
string | Пароль на загрузку файлов *.iso |
wimpwd |
string | файлов *.wim |
imgpwd |
string | файлов *.img |
vhdpwd |
string | файлов *.vhd |
efipwd |
string | файлов *.efi |
vtoypwd |
string | файлов *.vtoy |
menupwd |
array | Массив объектов с парами строк file /parent и pwd |
file |
string | Полный путь к образу |
parent |
string | Путь к определённой директории(без концевого слеша) |
pwd |
string | Пароль |
Пароли могут быть: * в 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:
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 — фичу позволяющую по специально сформированному файлу ответов, по сути дела декларативному скрипту, установить систему в фоновом режиме с определёнными настройками, не задавая вопросов пользователю. Для примера известные дистрибутивы ОС и их скрипты.
Дистрибутив | Тип шаблона | Пример |
---|---|---|
Windows | Unattended XML | unattended.xml |
RHEL8/CentOS8/Derivatives | Kickstart script | kickstart8.cfg |
RHEL7/CentOS7/Fedora/Derivatives | Kickstart script | kickstart7.cfg |
RHEL6/CentOS6/Derivatives | Kickstart script | kickstart6.cfg |
Debian/Ubuntu Server/Derivatives | Preseed script | preseed.cfg |
SLES/OpenSUSE/Derivatives | autoYast XML | autoYast.xml |
Ну и традиционная таблица параметров:
Ключ | Тип | Описание |
---|---|---|
image |
string | Полный путь до ISO |
parent |
string | Полный путь до каталога, без концевого слеша. Ко всем образам будут применены соответствующие темплейты |
template |
string/array | Полный путь или массив с путями до шаблона(ов). В меню можно будет выбрать нужный шаблон |
autosel |
integer | Номер автовыбираемого шаблона 0 — без шаблона. 1..n — шаблоны по списку, сверху вниз. ВНИМАНИЕ! При корректном наличии этого параметра меню выбора шаблонов не показывается! |
▍ 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 и ручному редактированию параметров.
Табличка очень простая.
Ключ | Тип | Описание |
---|---|---|
iso |
string | Имидж, на который будем накладывать «патч» (поддерживаются только ISO формата ISO9660. UDF имиджи Windows не работают!) |
org |
string | Путь и имя файла в файловой системе внутри имиджа |
new |
string | файл которым заменяем |
▍ 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 соответственно в /
.
Параметры:
Ключ | Тип | Описание |
---|---|---|
image |
string | Полный путь до образа |
parent |
string | Или путь к образам, без концевого слеша |
archive |
string | Архив с файлами, которые хотим синжектить. Для Windows это могут быть .7z или .zip . Для Linux архивы форматов .zip , .tar.gz , .tar.bz2 , .tar.xz , .tar.lzma |
▍ 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
}
]
}
Ключ | Тип | Описание |
---|---|---|
image |
string | Полный путь до iso-шника |
backend |
string/array | Путь или массив путей к имиджам персистентности |
autosel |
integer | 0 отключить персистентность 1..n cоответствующий элемент массива. Если включен этот параметр, меню выбора не показывается |
Очень многие LiveCD (яркий пример Kali Linux) позволяют сохранять состояние между сеансами. Они записывают состояние на раздел с определённой меткой диска. Вот некоторые из них:
Дистрибутив | Протестированная версия | Метка раздела | Примечание |
---|---|---|---|
Arch Linux | archlinux-2021.03.01-x86_64.iso | vtoycow |
ArchMan/ArchBang/ArchLabs/BlackArch также поддерживаются |
Ubuntu | ubuntu-20.04-desktop-amd64.iso | casper-rw |
|
MX Linux | MX-19.1_x64.iso | MX-Persist |
|
LinuxMint | linuxmint-19.3-xfce-64bit.iso | casper-rw |
|
elementaryOS | elementaryos-5.1-stable.20200405.iso | casper-rw |
|
Zorin | Zorin-OS-15.1-Core-64-bit-r2.iso | casper-rw |
|
Kaspersky R.D, | krd18.iso | casper-rw |
|
Kali | kali-linux-2020.2-live-amd64.iso | persistence |
Требуется ключик -c persistence.conf , при создани персистенса и Live USB Persistence в параметры ядра |
CloneZilla | clonezilla-live-20200703-focal-amd64.iso | persistence |
Требуется ключик -c persistence.conf , при создани персистенса |
Fedora | Fedora-Workstation-Live-x86_64-33-1.2.iso | vtoycow |
Нужно отключить selinux добавлением в параметры ядра selinux=0 |
Для получения раздела необходимо создать образ диска, с правильной меткой. Есть два варианта: Скачать готовый образ. Или создать самому. Для этого в комплекте поставки есть удобный скрипт:
$ ./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!
После установки и настройки ОС в виртуалке, скачайте в виртуалку последнюю версию 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
Дисклеймер от меня… Сильно подозреваю, что с шифрованными разделами, такой трюк не прокатит.
Да, такие образы можно грузить из других загрузчиков. Подробнее здесь. Ну и наконец таблица с замечаниями по установке на конкретные дистрибутивы.
Дистрибутив | ISO | BIOS | UEFI | Примечания |
---|---|---|---|---|
Centos8 | CentOS-8.3.2011-x86_64-dvd1.iso | Ok | Ok | |
Centos7 | CentOS-7-x86_64-Minimal-2009.iso | Ok | Ok | |
Deepin | deepin-desktop-community-1010-amd64.iso | Ok | Ok | См. [1] |
Fedora | Fedora-Workstation-Live-x86_64-33-1.2.iso | Ok | Ok | |
Ubuntu Desktop | ubuntu-20.04-desktop-amd64.iso | Ok | Ok | |
Ubuntu Server | ubuntu-20.04.1-live-server-amd64.iso | Ok | Ok | См. [1] |
Linux Mint | linuxmint-20.2-cinnamon-64bit.iso | Ok | Ok | |
MX Linux | MX-19.2_x64.iso | Ok | Ok | |
Kali Linux | kali-linux-2021.1-installer-amd64.iso | Ok | Ok | См. [1] |
Manjaro | manjaro-xfce-20.0.1-200511-linux56.iso | Ok | Ok | Arch based |
Archman | Archman_KDE_20200209.iso | Ok | Ok | Arch based |
Mageia | Mageia-7.1-x86_64.iso | Ok | Ok | См. [1] |
openSUSE | openSUSE-Leap-15.2-DVD-x86_64.iso | Ok | Ok |
- Для некоторых дистрибутивов, например,
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 дистрибутивы).
GitHub | Дистрибутив |
---|---|
Ventoy2Disk.sh |
ventoy |
VentoyGUI.ARCH |
ventoygui |
VentoyWeb.sh |
ventoyweb |
CreatePersistentImg.sh |
ventoy-persistent |
ExtendPesistentImg.sh |
ventoy-extend-persistent |
Автор: Вадим Прилуцкий
Спасибо! А есть ли возможность записать Ventoy на CD/DVD диск?