В интернете масса вариантов по созданию универсальных загрузочных флешек, но практически все они используют Grub4dos для загрузки mbr и Grub2 (или подобное) в качестве загрузчика EFI.
Я купил себе новую флешку и решил сделать ее с поддержкой гибридной загрузки mbr + EFI, загрузку установок операционных систем (попроще) и прочего полезного софта. Постараюсь изложить по порядку процедуру создания флешки, по возможности приведу команды которыми выполняются нужные действия. В интернете я подобного варианта организации мультизагрузки не встречал, есть только описания отдельных приемов, которые я и использовал в комплексе. Основным достоинством использования только grub2 является наличие единого файла конфигурации для EFI и MBR загрузки, минимум файлов самих загрузчиков, поддержка русского языка и унификация настройки.
1.
Подготовка раздела. Так как флешка гибридная, то требуется создать таблицу разделов msdos и первичный раздел fat32 размером таким, чтобы на него поместились нужные операционные системы. Можно использовать Gparted или fdisk для создания разделов. Выставляем для раздела флаг Boot и через fdisk желательно задать тип раздела EF (указываем что это EFI раздел).
2.
Размещение загрузчика EFI. Этот этап достаточно прост, создаем каталог EFI/BOOT и размещаем в нем файлы grub2:
bootx64.efi - загрузчик grub2
grub.cfg - настройки и меню grub2 он будет использоваться и для grub-mbr
ter-u18n.pf2 - файл шрифта меню grub2, может быть заменен любым другим шрифтом формата pf2. Если не требуется руссификация, то файл можно не добавлять
ru.mo - руссификация grub2. Если не требуется руссификация, то файл можно не добавлять.
2.1
Создание bootx64.efi. Этот файл я сделал самостоятельно используя grub-mkimage, пример моей команды:
grub-mkimage --directory=/usr/lib/grub/x86_64-efi --compression=auto \
--config=/usr/share/grub/grub.cfg --verbose --prefix=/EFI/BOOT \
--output=grubx64.efi --format=x86_64-efi \
part_gpt part_msdos disk memdisk fat exfat lvm ext2 ntfs iso9660 normal gzio xzio test search configfile linux linux16 chain loopback echo efi_gop efi_uga file halt reboot ls true gfxterm gettext font
В таком виде результатом работы команды будет файл grubx64.efi который потом перименовывается в bootx64.efi.
/usr/share/grub/grub.cfg файл настроек который зашивается внутрь grubx64.efi, у меня сделано такое содержание:
if [ -e /EFI/BOOT/grub.cfg ]; then
set prefix=($root)/EFI/BOOT
configfile ($root)/EFI/BOOT/grub.cfg
else
search.file /grub.cfg root
set prefix=($root)
configfile ($root)/grub.cfg
fi
т.е. файл с настройками можно разместить или в EFI/BOOT или в корне.