
Привет Хабр!
Существует несколько программ с графическим интерфейсом, предназначенных для создания 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_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 <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!
После установки и настройки ОС в виртуалке, скачайте в виртуалку последнюю версию
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
Дисклеймер от меня… Сильно подозреваю, что с шифрованными разделами, такой трюк не прокатит.
Да, такие образы можно грузить из других загрузчиков. Подробнее здесь. Ну и наконец таблица с замечаниями по установке на конкретные дистрибутивы.
- Для некоторых дистрибутивов, например,
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 дистрибутивы).
- Для некоторых дистрибутивов, например,