Создать мультизагрузочную флешку в Linux

Практически многие наверное встречали в интернете фразу «мультизагрузочная флешка» и заинтересовавшись захотели заполучить сходственную в свой инвентарь? Со мной такая же история. Сегодня я расскажу свой способ как досоздать мультизагрузочную флешку. Для начала немного теории: мультизагрузочная флешка позволяет загружать немного операционных систем конкретно с самой себя. То есть даже отсутствие в компьютере безжалостного диска не станет помехой. Утилизируются такие флешки чаще всего как спасательные — для возобновления работоспособности испорченной системы. И операторные системы, загружаемые с них могут быть самыми различными: от любого линукса, до windows (впрочем ее лицензия такого не позволяет). Кроме ОС могут запускаться вдобавок и разные служебные програмки, например проверка оперативной памяти или жесткого диска. Или, популярные сейчас, антивирусные live-системы для испытания на вирусы и лечения ОС Windows. Помимо сказанного заслуживает упомянуть и дистрибутив для работы с разделами безжалостного диска Clonzilla. В общем вариантов толпа и такая флешка должна быть, что именуется, must have.
Вариантов реализации подобной флешки как минимум два.

Первый — установить на нее одну или немного ОС как обычно. То есть используя флешку как твердый диск и применяя некоторые хитрости, дабы флешка не «сносилась» раньше времени (подобные как использование файловой системы без журналирования, монтирование преходящих каталогов в оперативную память, используя специальные опции монтирования и т. д.). Как вы догадались стиль в статье идет только о независимых, linux-based ОС.

И второй — скопировать на флешку iso-образы и занимать ОСи прямо из них при помощи загрузчика grub2, какой позволяет это делать.
Второй способ безусловно предпочтительнее, аккуратнее и технически грамотнее, но необходимо хорошо разбираться с конфигами груба. На тот момент мне появилось что создание какой-то там мультизагрузочной флешки не заслуживает тщательного изучения grub2, поэтому я решился пойти первым путем — установил archlinux на флешку (-флеш-накопитель (сленг) как на обыкновенный жесткий диск.

Мне подобная флешка нужна была в первую очередь как спасательная, но еще и для демо целей (показывать способности разных дистрибутивов с разными рабочими окружениями). Как спасательная она вышла на 100%: все загружается и трудится, но как демонстрационная — не очень. Вернее она получилась демонстрационной, но только для одной системы. И то, необходимо было всегда обновлять ОС на ней, чтобы появлялись все новые «свистелки», что очень плохо отражается на «здоровье» флешки. А дабы сделать для нескольких систем (множество элементов, находящихся в отношениях и связях друг с ином, которое образует определённую целостность, единство), под каждую нужно отсоединять кусочек от флешки, что неловко, да и флешка будет выглядеть как очень фрагментированный ntfs-диск в виндовсе.
Потому было зачислено решение все-таки сделать флешку по второму способу. Тем более пред этим как раз в нужное время на глаза попалась статья о Grub2 пользователя русскоязычного форума Archlinux, Natrio, за что ему огромное спасибо.

Читайте также:  Как установить и настроить брандмауэр Gufw на Ubuntu Desktop

Для реализации этой задумки, я разбил свою 32 Гб флешку на 2 раздела: начальный (22 Гб) — для файлов т. е. чтобы оставить возможность пользоваться такой флешкой как обычной, к этому же обязательно этот раздел должен быть первым, так как ОС Windows не может себе познакомить что флешки (-флеш-накопитель (сленг) бывают с несколькими разделами (Раздел (Раздел — действие по глаголу разделять) — действие по глаголу делить) и видит всегда только первый ее раздел. И другой (10 Гб) — для конфигов груба и iso-образов. Данный раздел в винде виден не будет (что сможет быть и к лучшему), то есть такая флешка в виндовсе снаружи ничем не будет различаться от обычной. Все разделы я сделал с родной для флешек файловой системой fat32 (тем больше что она нежурналируемая).
Дальше я примонтировал второй раздел (допустим это /dev/sdb2) в папку /boot и водворил на флешку grub2 (все команды выполняются от рута):

mount /dev/sdb2 /boot
grub-install /dev/sdb

Обратите вниманье, что во второй строке, при аппарате груба на флешку, номер раздела не указывается! После данных манипуляций во втором разделе флешки возникла папка grub. Рядом с ней я создал папку iso и зашвырнул в нее скаченные заранее iso-образы многих дистрибутивов. В моем случае (для примера) это: Archlinux, Ubuntu, Linux Mint и Elementary OS.
Теперь осталось только создать правильный конфиг груба. У меня он такой:

Читайте также:  Как установить Python 3.11 на CentOS 9/8 и Fedora

set root_uuid=
search - s root - u $root_uuid
dir=/iso
insmod regexp
insmod part_gpt
insmod part_msdos
# Графическое меню начало
theme_name=Archxion
dir_theme=$prefix/themes/$theme_name
set theme=$dir_theme/theme. txt
loadfont $dir_theme/*.pf2
insmod png
set gfxmode=1024x768
# set lang=ru
insmod gfxterm
if [ "$grub_platform" = "pc" ] ; then
insmod vbe # берем модуль для BIOS
else
insmod efi_gop # или для EFI
insmod efi_uga
fi
terminal_output gfxterm
# Графичное меню конец
# Загрузка служебных образов (Образ — визуальный образ, зрительный образ, изображение) Arch Linux
# Формат фамилии образа: archlinux-YYYY. mm. dd-arch. iso
for iso in $dir/archlinux-*.iso ; do
if [ ! - f "$iso" ] ; then continue; fi
regexp - s 1:build - s 2:arch 'archlinux-(.+)-(.+)\.iso' $iso
menuentry "Arch Linux ISO $build $arch" --source="
loopback loop $iso
probe - s isolabel - l loop
linux (loop)/arch/boot/$arch/vmlinuz archisolabel=$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop
initrd (loop)/arch/boot/$arch/archiso. img"
done
# Загрузка образов Ubuntu Linux
for iso in $dir/*ubuntu-*.iso ; do
if [ ! - f "$iso" ] ; then continue; fi
regexp - s 1:uname - s 2:uver - s 3:uvar - s 4:uarch '/([^/]+buntu[^0-9]*)-([0-9.]+)-(.+)-(.+)\.iso' $iso
if [ "$uvar" = 'server' ] ; then continue ; fi
if [ "$uarch" = 'i386' ] ; then efi= ; else efi='.efi' ; fi
menuentry "ISO $uname $uvar $uver $uarch" --source="
loopback loop $iso
linux (loop)/casper/vmlinuz$efi boot=casper iso-scan/filename=$iso noeject --
initrd (loop)/casper/initrd. lz"
done
# Загрузка образов Elementary OS
# Формат имена образа: elementaryos-dd. mm. YYYY-arch. iso
for iso in $dir/elementaryos-*.iso ; do
if [ ! - f "$iso" ] ; then continue; fi
regexp - s 1:name - s 2:arch - s 3:date 'elementaryos-(.+)-(.+).(.+)\.iso' $iso
menuentry "Elementary OS $name $date $arch" --source="
loopback loop $iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$iso noeject --
initrd (loop)/casper/initrd. lz"
done
# Загрузка образов Linux Mint
# Формат имена образа: linuxmint-version-DE-arch. iso
for iso in $dir/linuxmint-*.iso ; do
if [ ! - f "$iso" ] ; then continue; fi
regexp - s 1:ver - s 2:DE - s 3:arch 'linuxmint-(.+)-(.+)-(.+)\.iso' $iso
menuentry "Linux Mint $ver $arch $DE" --source="
loopback loop $iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$iso noeject --
initrd (loop)/casper/initrd. lz"
done
menuentry "Reboot" {
reboot
}
menuentry "Poweroff" {
halt
}

Помимо загрузки различных дистрибутивов есть возможность перезагрузки и выключения компьютера.
Для обработки имен iso-образов в конфиге используются регулярные выражения (в этом помогает модуль regexp). Также можно добавить в список загрузки и свои созданные live-образы как описано в одной из ранешных статей.

Читайте также:  Показать файлы которые менялись за последние 10 дней в Linux

Для меню груб можно применять различные темы оформления или вручную обменивать шрифты, фон и т. д. В приведенном конфиге я использую тему оформления Archxion. Для использования какой-либо нахождения оформления нужно скопировать в папку grub папку с темой офрмления (ее можно поселить в свою обычную систему на компьютер, скопировать нужную папку с темой на флешку и затем удалить эту тему если вы борец за чистоту системы) и указать имя темы. Кроме этого загрузить необходимые модули, шрифты и запустить графический терминал:

code># Графическое меню начало
theme_name=Archxion
dir_theme=$prefix/themes/$theme_name
set theme=$dir_theme/theme. txt
loadfont $dir_theme/*.pf2
insmod png
set gfxmode=1024×768
# set lang=ru
insmod gfxterm
if [ «$grub_platform» = «pc» ] ; then
insmod vbe # берем модуль для BIOS
else
insmod efi_gop # или для EFI
insmod efi_uga
fi
terminal_output gfxterm
# Графичное меню конец

Для бойцов за минимализм — можно не пользоваться всеми этими «рюшечками» и покинуть только обычное текстовое меню. Для этого достаточно закомментировать блок кода отсрочивающийся к графическому меню. Вся красота такой флешки в том что меню создается динамически и вам остается лишь копировать новые образы в папку iso или устранять старые, меню будет выдаваться лишь для тех образов, которые существуют на данный момент в папке iso. Один-единственное условие, это непереименовывание данных образов или переименование по маске (где указано). Иначе придется менять регулярные выражения для отделки имен образов (Образ — визуальный образ, зрительный образ, изображение). Но и это можно делать (если нужно).