LINUX.ORG.RU

Как загрузить GRUB2 с EFI ?

 ,


3

1

Требуется перейти от одного загрузчика (grub4dos), по цепочке к grub2. Поискал в интернетах, там советуют грузить /boot/grub/i386-pc/core.img, но нынче в грубе есть тольк EFI, то бишь /efi.img Попробовал такой конфиг:

iftitle [if exist /efi.img] Bootable Grub2 from /efi.img 
find --ignore-floppies --set-root /efi.img
chainloader /efi.img

И вот, что получается:

Partition table not recognized(chainloader_edx=0xE0, err=4).
Error 43:(http://grub4dos.chenall.net/e/43)
         The BPB hidden_sectors should not be zero for a hard-disk partition boot sector

Press any key to continue...     


Последнее исправление: dymdin (всего исправлений: 1)

Требуется перейти от одного загрузчика (grub4dos), по цепочке к grub2. Поискал в интернетах, там советуют грузить /boot/grub/i386-pc/core.img, но нынче в грубе есть тольк EFI

Критическая масса несходяков достигнута.

  1. grub4dos EFI образ тебе не загрузит
  2. нынче в GRUB 2 есть не только EFI
  3. grub4dos нынче вообще мертв, но его тебе юзать ничего не жмет
t184256 ★★★★★
()

Так что все-таки тебе нужно загрузить? Если грубЕФИ, то зачем эта муть несусветная:

chainloader /efi.img

Грузи grubx64.efi как любой ЕФИ-загрузчик.

А может grub2dos умеет использовать конфиг grub.cfg?

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от andytux

Не умеет. Но появилась grub4dos_for_UEFI, а вот как изготовить isoшник на её основе - тоже незнаю.

Так что все-таки тебе нужно загрузить?

Понять хоть что-нибудь :(

Ну, хорошо, попытаюсь объяснить многословнее: есть такая программулька Easy2boot, это загрузчик iso-образов, построенный на основе grub4dos, и очень здорово показывает что, вопреки уверениям, гибридный (или всё-таки нет?) образ таки можно загрузить с родным, чаще всего в isolinux.сfg, меню, но как E2B это делает, не сообщает. Потому и пытаюсь крутить grub4dos и так и сяк…

В данном же случае, grub-mkrescue, несмотря на то что в системе стоит именно grub-bios и имеются на (msdos0,1)/boot/grub/{boot,core}.img, отправляет на (loop)/System/Library/CoreServices/boot.efi и (loop)/efi.img , хотя, uefi на машине нет… Как переключить grub-mkrescue в bios режим так и не нашёл, попытался скопировать оба имеёджа непосредственно в проект iso, но не подошли, естественно…

dymdin
() автор топика
Ответ на: комментарий от dymdin

Понятно, что ничего не понятно.

Когда еще только появился груб2, то сделал ставку на него.

образ таки можно загрузить с родным, чаще всего в isolinux.сfg

Груб может использовать конфиг isolinux.cfg.

А исошник нужен только если действительно требуется его прожигать на болванку. В остальных случаях от него только лишние сложности и ограничения.

andytux ★★★★★
()

UEFI берёт загрузчик из FAT32 раздела, соответственно тебе нужно этот раздел создать, чтобы в него загрузиться, получить оттуда конфигурацию GRUB2 и затем уже грузиться дальше.

давай для начала создадим стандартный /boot/EFI/BOOT/BOOTX64.EFI загрузчик.

mkdir -p boot/grub efi/boot
echo "search --file --no-floppy --set root /boot/vmlinuz" > boot/grub/grub.cfg

grub-mkimage                                    \
		                                \
  --config="boot/grub/grub.cfg"                 \
  --output="efi/boot/bootx64.efi"               \
  --format="x86_64-efi"                         \
  --prefix="/boot/grub"                         \
		                                \
  "iso9660" "normal" "search" "search_fs_file"  \
  "part_msdos" "part_gpt" "fat"

а теперь давай создадим FAT раздел. это, как ни странно, будет типа дискетка размером 1.44 мегабайта.

mkdosfs -C "efi/boot/floppy.img" 1440

mount -o loop "efi/boot/floppy.img" "boot"
	
mkdir -p "boot/efi/boot"
	
cp "efi/boot/bootx64.efi" "boot/efi/boot"
	
umount "boot"

вот, теперь этот floppy.img абсолютно корректный и его сможет загрузить UEFI-загрузчик.

попробуй загрузиться с ним.

после успешной загрузки, BOOTX64.EFI загрузчик, выполнит то самое search, которое прописано в boot/grub/grub.cfg. и переключившись в нужный корень, где находится /boot/vmlinuz, оттуда же продолжит загрузку всех остальных модулей.

заранее нужно будет их установить, если их нет.

mkdir "boot/grub/x86_64-efi"

cp -a "/usr/lib/grub/x86_64-efi"*".mod" "boot/grub/x86_64-efi"
cp -a "/usr/lib/grub/x86_64-efi"*".lst" "boot/grub/x86_64-efi"

мы положим туда все минимально необохдимые модули, которые будут знать про CD-ROM, FAT, GPT / MBR и search чтобы найти и свичнуться в /boot/vmlinuz для загрузки.

и уже там же, уже в этом новом /boot/grub корне, иметь новый grub.cfg, уже с нормальным списком всех menuentry для загрузки.

удачи.

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

Спасибо за подробный ответ, но это в долгое познание, попробую смастерить такую флешку или образ как-нибудь, когда будет побольше времени и желание во всём этом покопаться…

dymdin
() автор топика
Ответ на: комментарий от andytux

Груб может использовать конфиг isolinux.cfg.

syslinux_source
syslinux_configfile

Эти операторы именно из grub2 а не откуда-нибудь ещё ?

Понятно, что ничего не понятно.

Ну что тут не понятного ? Везде есть рецепты как передать по цепочке управление в syslinux из груба, но нигде нашёл актуального решения, как быстро и без лишнего геммороя, передать управление в груб из syslinux, grub4dos и.т.д. Точнее есть, с использованием образов core.img, но сегодняшний grub-mkrescue готовит образ iso только с EFI. Передать управление в grub4dos - никаких проблем, а вот чтобы можно было, без перезагрузки, вернуться назад, не получается. В принципе, то, что сказал Spoofing выше - это оно, то самое, строго по теме, а если ченлоадится в груб без EFI ?

dymdin
() автор топика
Ответ на: комментарий от LamerOk

Только ветка 4.2, китайцы продолжают разработку, дошли уже до 4.6, и есть даже версия для UEFI:

http://grub4dos.chenall.net/downloads/grub4dos-for_UEFI-2021-02-10/

Но без мануала, совершенно непонятно как загонять на флешку или на iso

dymdin
() автор топика
Ответ на: комментарий от dymdin

Только ветка 4.2,

Ты должно быть тут новенький.

chainloader /efi.img

chainloader передаёт управление загрузчику на каком-то разделе. Уефи образ грузится обычным kernel:

find --set-root  image.efi
kernel /image.efi
boot
LamerOk ★★★★★
()
Ответ на: комментарий от dymdin

Эти операторы именно из grub2 а не откуда-нибудь ещё ?

Да. Пример есть в твоей теме про DSL.

сегодняшний grub-mkrescue готовит образ iso только с EFI

Все это для загрузки, когда образ записан на какое-либо устройство, флешку или DVD-диск. Для загрузки из исо-образа удобней другие методы. Например, специально для облегчения загрузки из исо-образов придумали методику «loopback-bootable». Суть проста. В исо-образе находится файл loopback.cfg, который и является конфигом, для загрузки из исо-образа.

ченлоадится в груб без EFI ?

chainloader - это одна из команд груба, применяемая в некоторых конкретных случаях. Например, загрузка Виндовс. В ЕФИ: «chainloader /bootmgr.efi». В легаси: «ntldr /bootmgr».

Передать управление в grub4dos - никаких проблем, а вот чтобы можно было, без перезагрузки, вернуться назад

Как ты ему передаешь управление. В некоторых случаях вернуться назад помогает такой простой способ. Вместо «menuentry», используешь «submenu».

andytux ★★★★★
()

при наличии efi никакой grub не нужен вообще

anonymous
()
Ответ на: комментарий от dymdin

а если ченлоадится в груб без EFI ?

mkdir -p "boot/grub/i386-pc"
echo "search --file --no-floppy --set root /boot/vmlinuz" > boot/grub/grub.cfg

cp -a "/usr/lib/grub/i386-pc/"*".mod" "boot/grub/i386-pc"
cp -a "/usr/lib/grub/i386-pc/"*".lst" "boot/grub/i386-pc"

grub-mkimage                                  \
		                              \
  --config="boot/grub/grub.cfg"               \
  --output="boot/grub/core.img"               \
  --format="i386-pc"                          \
  --prefix="/boot/grub"                       \
		                              \
  "biosdisk" "iso9660" "normal" "search"      \
  "search_fs_file" "part_msdos" "part_gpt"    \
  "fat"

cat "/usr/lib/grub/i386-pc/cdboot.img" "boot/grub/core.img" > "boot/grub/bios.img"

создаёшь core.img который содержит в себе загрузчик со всеми модулями, а затем «чейнлоадться» в bios.img который создаётся простым слиянием двух файлов cdboot.img и твоим core.img со всеми данными.

Spoofing ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.