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

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

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

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-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 1 0xef /usr/lib/grub/efi.img \
-eltorito-alt-boot --efi-boot EFI/BOOT/bootx64.efi \
-no-emul-boot \
-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.

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

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

« Последнее редактирование: 17 Октябрь 2019, 10:54:58 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-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/null 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 1 0xef /usr/lib/grub/efi.img добавляет в iso образ раздел из нашего файла efi.img, тип раздела выставляется 0xef EFI.

Флешка с записанным разделом выглядит как двойное устройство /dev/sdb c содержимым iso и /dev/sdb1 c содержимым образа efi.img.
« Последнее редактирование: 09 Октябрь 2019, 08:18:18 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-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
« Последнее редактирование: 14 Октябрь 2019, 07:24:45 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Coalxe

  • Пользователь
  • **
  • Сообщений: 62
  • Репутация: +0/-0
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #3 : 11 Октябрь 2019, 05:18:17 »
а также если его записать на флешку используя dd
Ещё бы увидеть практические рекомендации для случаев когда file.iso < 1G, а flash > 8G.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #4 : 11 Октябрь 2019, 10:17:42 »
увидеть практические рекомендации для случаев когда file.iso < 1G, а flash > 8G.
http://forum.puppyrus.org/index.php?topic=16614.msg161878#msg161878

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-2
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #5 : 11 Октябрь 2019, 11:11:59 »
а также если его записать на флешку используя dd
Ещё бы увидеть практические рекомендации для случаев когда file.iso < 1G, а flash > 8G.
Не вижу проблемы. Вы просто неправильно понимаете для чего этот вариант нужен. А нужен он чтобы просто сделать флешку с системой загрузчной, посмотреть систему и установить. Для ПОСТОЯННОГО ИСПОЛЬЗОВАНИЯ так неправильно делать, нужно нормально создать на флешке файловую систему, загрузчик и т.п. Т.е. Почитать мою предыдущую тему про создание флешки. И уж тем более никто вам не скажет что надо делать с оставшимся свободным местом на флешке, сами решайте.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Coalxe

  • Пользователь
  • **
  • Сообщений: 62
  • Репутация: +0/-0
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #6 : 11 Октябрь 2019, 16:46:45 »
Для ПОСТОЯННОГО ИСПОЛЬЗОВАНИЯ так неправильно делать
Здесь предлагают два пути :
- тяжёлый FULL, для опытных;
- лёгкий FRUGAL, copy-paste (efi в большей мере).

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-2
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #7 : 11 Октябрь 2019, 17:11:21 »
Когда надо быстро - раскатывается iso на флешку и пользуемся "как есть". Если заранее знаешь что  будешь добавлять программы и т.п. То надо ставить нормально. Надо понимать что iso это прежде всего для записи на оптические носители и не стоит надеяться на что-то другое.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #8 : 17 Октябрь 2019, 10:53:28 »
Проверил
-append-partition
Надо -append_partition - опечатка
В итоге создается iso который нормально работает в виртуалке (в BIOS и EFI варианте)

Но. С гибридной флэшки , т.е. сделанной dd не работает (в BIOS и EFI варианте)
Причина - не видны никакие файлы , кроме папки EFI
Этот же эффект если примонтировать эту флэшку
Если монтировать исо - все ок

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-2
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #9 : 17 Октябрь 2019, 10:59:20 »
Надо -append_partition - опечатка
исправил

Причина - не видны никакие файлы , кроме папки EFI
флешка c файлами видна как /dev/sdb а раздел efi будет виден как /dev/sdb1
Если EFI раздел виден, то как получится что флешку не видно в EFI, должно быть видно.


Для тестов я использовал ноутбук Emashines e440 для режима mbr и Asus K55 для режима EFI (Secureboot отключен)
« Последнее редактирование: 17 Октябрь 2019, 11:01:22 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #10 : 17 Октябрь 2019, 11:06:20 »
Причем практической пользы от гибридной флэшки для EFI нет вообще. Проще просто распаковать на fat32 флэшку
А BIOS режим grub2 можно получить добавив в меню grub4dos:
Код
title Grub2
set d=/boot/grub
find  --set-root --ignore-floppies /%d%/core.img
kernel /%d%/core.img
core.img взять из архива выше
При этом будет работать и обратный переход
Код
menuentry "Grub4Dos exe" {
search --no-floppy --file /boot/syslinux/memdisk --set=root
linux16 /boot/grub4dos/grub.exe --config-file=/menu.lst
boot
}

Для syslinux не работает
Код
label grub2
kernel /boot/grub/core.img
Актуально при изготовлении гибридного исо как в ПРА
Или при gpt
Установка grub4dos на GPT: не устанавливается. wee убивает всю инфу на разделе
Т.к.
сейчас grub4dos работает и без wee - возможно он заработал с  gpt (никто не проверял?)
« Последнее редактирование: 17 Октябрь 2019, 12:32:26 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #11 : 17 Октябрь 2019, 11:08:16 »
Если EFI раздел виден, то как получится что флешку не видно в EFI, должно быть видно.
Причина - не видны никакие файлы , кроме папки EFI
Этот же эффект если примонтировать эту флэшку
Могу выложить исо , который у меня получился. Или лучше ты выложи свой, рабочий исо
Тестировал на стационаре с мамой asus и ami bios 2012 года
« Последнее редактирование: 17 Октябрь 2019, 11:12:46 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #12 : 17 Октябрь 2019, 12:34:24 »
Для syslinux не работает
Поправил выше
Т.е. только по цепочке syslinux - grub4dos - grub2

При наличии на флешке установленного grub4dos переключение в grub2 нерационально. Вот если wee поставить и из него grub2 запускать,
Чем wee лучше grub4dos установленного в mbr без wee ?
По размеру и скорости загрузки даже по цепочке syslinux - grub4dos - grub2 - проскочит не заметишь
« Последнее редактирование: 17 Октябрь 2019, 12:38:49 от sfs »

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10381
  • Репутация: +106/-2
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #13 : 17 Октябрь 2019, 12:42:21 »
Т.к. Здесь речь о iso, то для загрузки iso достаточно grub2, для гибридного iso - тоже достаточно.

В моем примере порядок опций тоже важен т.к. --Eltorito-alt-boot описывает отдельную секцию загрузки. Возможно iso не грузится по этой причине.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 26874
  • Репутация: +182/-0
    • PuppyRus-A
Re: Hybrid bootable Grub2 iso (EFI and MBR)
« Ответ #14 : 18 Октябрь 2019, 09:31:32 »
Тестовый iso https://cloud.mail.ru/public/9svR/3TzFGEEHA
Записываю командой
Код
cat PRA-test.iso | dd of=/dev/sdc bs=1M conv=fsync status=progress oflag=sync
на флэшку
Если загрузиться (BIOS и EFI) - папку PRA командой ls / из grub2 видно
Соответственно vmlinuz и initrd загрузятся
Потом initrd командой mount смонтирует носитель. То же можно сделать и просто в своем линуксе:
Код
#mkdir 3 && sudo mount /dev/sdc1 3
2# find 3
3
3/EFI
3/EFI/BOOT
3/EFI/BOOT/grub.cfg
3/EFI/BOOT/bootx64.efi
Т.е. папку PRA не видно. Соответственно initrd ничего не найдет и выдаст ошибку
Т.е. не работает. У тебя по другому?
« Последнее редактирование: 18 Октябрь 2019, 09:33:09 от sfs »