Сайт | Скачать | Видео | Wiki

Автор Тема: Hybrid bootable Grub2 iso (EFI and MBR)  (Прочитано 6940 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Hybrid bootable Grub2 iso (EFI and MBR)
« : 09 Октябрь 2019, 07:40:03 »
В интернете огромное количество примеров создания гибридных iso которые загружаются как в режиме efi так и mbr. НО практически все эти примеры используют в своем составе isolinux для загрузки в mbr режиме и grub2 (или другой) в качестве загрузчика mbr.

Основная сложность создания гибридного образа, это сложность команды для программы создания дисков. Наиболее функциональной программой является xorriso. Задача: создать гибридный загрузочный iso, способный загружаться в режимах efi и mbr, а также если его записать на флешку используя dd, флешка также должна стать загрузочной в режимах efi и mbr.

Полученная команда выполняется из каталога в котором находится содержимое образа, команда выглядит так:
xorriso  -as mkisofs -allow-lowercase -J -D -R -A "$CDLABEL" -V "$CDLABEL" \
-no-emul-boot -boot-load-size 4 -hide boot.catalog -boot-info-table \
-b grub2.eltorito --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \
-boot-info-table --grub2-boot-info grub2.eltorito \
-append_partition 2 0xef /usr/lib/grub/efi.img \
-eltorito-alt-boot --efi-boot EFI/BOOT/bootx64.efi \
-no-emul-boot \
-o test.iso  .

Более новый и универсальный вариант, с поддержкой efi загрузки на qemu:
Код
xorriso  -as mkisofs -allow-lowercase -J -D -R -A "$CDLABEL" -V "$CDLABEL" \
-no-emul-boot -boot-load-size full --boot-catalog-hide -boot-info-table -partition_offset LBA \
-b grub2.eltorito --grub2-boot-info --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \
--mbr-force-bootable --efi-boot EFI/BOOT/bootx64.efi \
-isohybrid-gpt-basdat --protective-msdos-label \
-append_partition' 2  0xef /usr/lib/grub/efi.img -appended_part_as_gpt -no-pad \
-o test.iso  .

$CDLABEL - т.к. я взял команду из скрипта, эта переменная задает метку диска. Желательно для совместимости метку задавать в ВЕРХНЕМ регистре.
-b grub2.eltorito - файл загрузчика в формате eltorito внутри образа, в данном случае файл находится в корне образа.
--grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img - путь к образу mbr из состава grub2 (тоже самое по сути делает -isohybrid-mbr). Этот образ только заготовка.
--grub2-boot-info grub2.eltorito - этот параметр практически не описан в документации, во всех примерах нигде не используется то, что параметр имеет значение! это значение задает имя загрузчика которое будет прописываться в загрузочную запись. В данном случае grub2.eltorito.
grub2.eltorito представляет из себя загрузчик сделанный grub-mkimage, образец команды следующий:
Код
grub-mkimage --directory=/usr/lib/grub/i386-pc --compression=auto \
--config=/usr/share/grub/grub.cfg --verbose --prefix=/EFI/BOOT \
--output=grub2.eltorito --format=i386-pc-eltorito \
part_msdos biosdisk disk fat iso9660 test vbe vga normal gzio xzio search configfile linux linux16 chain loopback echo file halt reboot ls true gfxterm gettext font

-eltorito-alt-boot --efi-boot EFI/BOOT/bootx64.efi - делает iso загружаемым через EFI. bootx64.efi находится внутри iso, рядом с ним я поместил файл конфигурации, локализации, шрифта.

На этом этапе получается iso способный загружаться как CD диск в режимах iso и mbr, а также если записать его на флешку, то флешка будет грузится через mbr, в системе она будет видна как /dev/sdb и монтироваться как iso9660. В принципе этого достаточно для загрузки, добавление файлов на флешку я не пробовал.

« Последнее редактирование: 18 Ноябрь 2021, 04:36:00 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #1 : 09 Октябрь 2019, 08:07:38 »
Для того, чтобы записанный на флешку iso файл сделал флешку загрузочной в режиме EFI, требуется чтобы образ содержал раздел типа 0xEF (загрузочный EFI). В интернете есть много примеров с различными методами создания такого раздела. Наиболее простой вариант, мне кажется, такой:
- создается образ efi.img. Данный образ, это просто файл с файловой системой fat32, размером достаточным для размещения загрузчика bootx64.efi и его настроек
Код
dd if=/dev/zero of=./efi.img bs=1K count=1000 # я сделал файл 1 Мб
mkfs.vfat ./efi.img #создаем файловую систему fat32
На образ efi.img помещаем загрузчик, я взял файл загрузчика bootx64.efi из образа iso, но grub.cfg сделал с таким содержимым:
Цитата
search.file  /EFI/BOOT/grub.cfg root
configfile /EFI/BOOT/grub.cfg
На флешке первым будет просмотрен раздел с содержимым iso и подхватится конфигурация.
Команды по монтированию  образа efi.img и копирования в него нужных файлов
Код
mkdir /mnt/efi
mount -o loop ./efi.img /mnt/efi
mkdir -p /mnt/efi/EFI/BOOT
cp bootx64.efi /mnt/efi/EFI/BOOT
cp grub.cfg /mnt/efi/EFI/BOOT
umount /mnt/efi

-append-partition 2 0xef /usr/lib/grub/efi.img добавляет в iso образ раздел из нашего файла efi.img, тип раздела выставляется 0xef EFI.

Флешка с записанным разделом выглядит как двойное устройство /dev/sdb1 c содержимым iso и /dev/sdb2 c содержимым образа efi.img.
« Последнее редактирование: 05 Ноябрь 2020, 16:17:27 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #2 : 11 Октябрь 2019, 02:41:34 »
Ссылка на модуль с программой xorriso и внутри скрипт для создания iso
https://cloud.mail.ru/public/3i3g/2NQbDLtVK

Также потребуется модуль с grub2 (в нем находится efi.img)
https://cloud.mail.ru/public/4zPi/3R3F2WZdK
« Последнее редактирование: 21 Октябрь 2019, 03:01:38 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #3 : 21 Октябрь 2019, 10:24:33 »
Исправил описание и файлы модулей.

Теперь все ок (исо в виртуалке, dd флэшка bios+efi) +
/EFI/BOOT/bootx64.efi здесь регистр BOOTx64.efi точно не важен?
Он создается п.2.1? Винда с ним будет грузиться, т.е. подписан?
Не нашел откуда берется (как создается) grub2.eltorito
Хорошо бы переделать инструкцию в пошаговую и в вики

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #4 : 21 Октябрь 2019, 10:41:56 »
bootx64.efi здесь регистр BOOTx64.efi точно не важен?
зависит от конкретной реализации UEFI в компьютере, но  в нижнем регистре встречается чаще.

Винда с ним будет грузиться, т.е. подписан?
подписывание к винде не имеет отношения, подписи нужны UEFI (конечно же bootx64.efi не подписан), этот же самый файл я использую в флешке на Grub2 и гружу им инсталлятор виндовс.


Не нашел откуда берется (как создается) grub2.eltorito
добавил в описание.


Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.