LINUX.ORG.RU

BIOS и UEFI


1

2

ОС на флешке, можно ли сделать так, чтоб она грузилось на обычных биос и на UEFI без legacy boot? Вопрос скорее гипотетический, так как компов с UEFI не имею, хотя ссылки и руководства приветствуюся

★★★★★

Да, так сделано в установочных образах почти всех популярных дистрибутивов.

Вкратце, 2 разных загрузчика. В MBR и Boot Sector - BIOS'овский, при необходимости читает свои файлы из /boot/i386-pc/ (намёк на GRUB2 $prefix). В /EFI/BOOT/BOOTx64.EFI - EFI-евский, специфичные для себя файлы читает из /boot/amd64-efi/. Конфиг для показа меню и файлы ядра и initrd, естественно, общие.

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

ясно...буду смотреть куда копать..Спасибо

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

Проверил: воткнул в EFI-машину с grubx64.efi флешку с 32-битным Debian Wheezy, из консоли GRUB считал файлы, система запустилась.

AITap ★★★★★
()

Если отключен Secure Boot - дистрибутивы с загрузчиком взлетают с пол-пинка.

StReLoK ☆☆
()
Ответ на: комментарий от AITap

у меня fedora..поставил пакет grub2-efi - в /boot появился каталог efi, с подкаталогом EFI/fedora Должно ли быть достаточно установки этого пакета? При попытки запустить VirtualBox в режиме EFI с флешки - появляется EFI-shell

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

Нужен отдельный EFI-раздел с файловой системой FAT32, смонтированный в /boot/efi/. В нём должен быть файл /EFI/BOOT/BOOTX64.EFI, который запустит система.

Я не уверен, запустит ли EFI файл /EFI/fedora/grubx64.efi со вставленной в него флешки. Может быть, да. У меня на EFI-машине о запуске /EFI/debian/grubx64.efi позаботился grub-install при помощи efibootmgr.

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

создал раздел fat32 - в нем каталоги /EFI/BOOT/ - перенес в него содержимое /boot/efi/EFI/fedora/ и /boot/grub2/grub.cfg - не запустилось. Переименовал grubx64.efi в BOOTX64.EFI - запустилось - увидел груб, но при выборе системы сообщение can't find command `linux` и can't find command `initrd`

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

grub.efi должен содержать встроенный конфиг, который найдёт настоящий раздел /boot, подключит модуль normal.mod и выполнит /boot/grub/grub.cfg. Почитайте /usr/sbin/grub-install от grub-efi в районе вызова grub-mkimage.

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

да у меня вобще нет в системе grub :) вот думаю может запилить в качестве тестового, а потом на флешке сделать, на ней вроде fat32 у меня есть...

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

победил! установил grub2-efi,shim затем скопировал /boot/efi/EFI на раздел с fat32, скопировал grub.cfg в /EFI/fedora/grub.cfg, создал каталог /EFI/fedora/x86_64-efi/ и скопировал туда /usr/lib/grub/x86_64-efi/linux.mod, затем в grub.cfg прописал insmod linux.mod.

Спасибо большое! Осталось сделать все это по-человечески - чтобы fat32 монтировался /boot/efi

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

по, пока неясным причинам, груб не грузится в режиме legacy-boot на ноутбуке. На всех остальных компах/виртуалбоксе все работает. Может ли это быть особенностью BIOS ноутбука, так как /boot находится в расширенном разделе?

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

Бывают BIOS, которые неадекватно работают с MBR, отличающимися от «стандартного» от Windows.

GRUB2 не любит, когда его ставят на раздел (но работает). Попробуйте записать более компактную MBR от Syslinux (/usr/lib/syslinux/mbr.bin), а GRUB поставить в загрузочный сектор активного (флаг boot) раздела.

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

Для работы в legacy нужен классический grub-pc, в MBR. EFI и не должен грузится в режиме совместимости.Есть еще такая техническая деталь как compability support module в режиме ефи, которая позволяет читать мбр, но грузить повторюсь должен все равно grup-pc не efi.

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

нет, дело в том, что до попытки установки efi разметка флешки была следующей:

sda1 - NTFS
sda2 - LUKS ext4
sda3 - /boot ext4 - загрузочный
sda4 - корень LUKS ext4
После создания раздела для UEFI в FAT32 получилось:
sda1 - NTFS
sda2 - EFI FAT32
sda3 - корень LUKS ext4
sda4 - расширенный раздел
sda5 - LUKS ext4
sda6 - /boot ext4 - загрузочный

в итоге система грузится на всех компах, кроме ноутбука. Завтра попробую удалить расширенный раздел, удалить LUKS ext4 и /boot сделать primary разделом. Сообщу результат

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

Вы не поняли. Мне не нужно чтоб EFI грузился в режиме совместимости. Мне нужно иметь LiveUSB ОС, способную грузиться и в режиме EFI и в режиме MBR

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

увы сегодня не получилось по времени...завтра все сделаю и отпишусь!

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

Извиняюсь за длительное отсутствие. Вобщем сделал так:

sda1 - NTFS
sda2 - EFI FAT32
sda3 - корень LUKS ext4
sda4 - /boot ext4 - загрузочный
все заработало на ПК, ноутбуке и виртуалбоксе в обоих режимах, попробовал:
sda1 - NTFS
sda2 - /boot ext4
sda3 - корень LUKS ext4
sda4 - расширенный раздел
sda5 - EFI FAT32
sda6 - LUKS ext4
и ноутбук перестал грузиться в режиме UEFI, на остальных все работало..
Вывод:
С(т)ранный биос в ноуте не хочет грузиться с логических разделов

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

Скорее всего, Phoenix или InsydeH2O. Напишите фирму, пожалуйста мне для статистики :) Может особенность самого uefi сейчас лень копаться в спецификации, но это вероятный вариант.

Twissel ★★★★★
()
18 марта 2014 г.

Апну топик :)

Взял я флешку, создал /efi/boot/bootx64.efi (bootx64.efi это переименованный grubx64.efi) теперь у меня стартует флешка в в efi и грузится меню grub.

Проблема в следующем, этих самых grubx64.efi бывает куча всяких, например, тот что от убунту, нормально search не смог сделать, а какой то другой нормально работает. Так вот проблема - этот grub не хочет запускать мою x86 систему :(

AITap, может ты что посоветуешь?

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

ну у меня bootx64.efi это не переименованный grubx64.efi В Fedora его предоставляет shim, а когда делал таким образом, как вы говорите - то получал меню груб, который не грузил систему

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

вот я и думаю чего подсунуть чтобы загрузило систему с параметрами ядра

напрямую ядро не грузит т.к. оно 32-разрядное.

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

Проблема в следующем, этих самых grubx64.efi бывает куча всяких

Соберите свой при помощи grub-mkimage. Необходимые модули-команды (search.mod, linux.mod, прочие) можно статически слинковать с ним:

        # Included modules (command.lst, partmap.lst, fs.lst, video.lst)
        modules_core="normal configfile echo test true minicmd ls search gzio"
        modules_fs="part_msdos part_gpt iso9660 fat ext2 hfsplus loopback"
        modules_boot="boot linux halt reboot chain appleldr"
        modules_arch="cpuid loadbios efi_gop efi_uga fixvideo"
        mods="${modules_core} ${modules_fs} ${modules_boot} ${modules_arch}"
        
        libdir=/usr/lib/grub
        conf=$(mktemp)

        printf 'search.fs_uuid %s root\n' '<UUID файловой системы на флешке>' >> $conf
        echo 'configfile /boot/grub/grub.cfg' >> $conf

        # Iteratively include all dependent modules
        while [ "${mods}" != "${oldmods}" ]; do
                oldmods="${mods}"
                for modname in ${mods}; do
                        deps=`sed -n "s/^${modname}://p" ${libdir}/${arch}/moddep.lst`
                        mods="${mods}${deps}"
                done

                mods=`echo ${mods} | tr ' ' '\n' | sort -u`
        done

        grub-mkimage -O x86_64-efi -p "" -o $mountpoint/EFI/BOOT/BOOTX64.EFI -c ${conf} ${mods}
        
        rm -f ${conf}

(Скопировано из скриптов сборки liberte linux и подправлено под использование статической линковки вместо tar-мемдиска).

32-битное ядро (686-pae от debian stable) в моих опытах вполне нормально запускается из-под grubx64.efi.

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

большое спасибо за информацию, предлагаю немного упрощенный вариант - выложи свой grubx64.efi, мне на данном этапе нужно просто потыкать как оно будет грузится и сформировать минимальный набор для загрузки системы с флешки, iso и все такое.

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

http://rghost.ru/53283118

Чтобы он нашёл флешку, придётся hex-редактором ближе к концу файла заменить e60ede0d-1e13-48d7-a4af-691702780e3b на UUID файловой системы на флешке, дополнив пробелами место, если UUID короче, чем мой.

Можно поступить по-другому и вместо UUID ориентироваться на какой-то файл, уникальный для данной флешки (заменить search.fs_uuid ... root на search.file /myflashdrive.tag root).

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

Какие параметры загрузки? Встроенный grub.cfg указывается параметром -c для grub-mkimage при сборке grubx64.efi.

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

Получилось!!!! Для себя убрал модули appleldr hfsplus cpuid.

Только грузит ядро 3.13, запуск ядра 3.6.12 не получается. Есть подозрение что причина в том что 3.13 я собрал с подержкой efi (надеялся напрямую грузить, без загрузчика) а ядро 3.6.12 было собрано без всякой подержки efi.

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

Да, для работы консоли в EFI нужны CONFIG_FB_EFI=y (и CONFIG_FRAMEBUFFER_CONSOLE=y, соответственно), а для работы с EFI Runtime Services - ещё CONFIG_EFI=y.

Без них ядро, возможно, запустится, но на экране рисовать не будет.

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

Здравствуйте! А можете расписать пошагово собственного сборку grubx64.efi. Полезная информация, может пригодиться на будущее.

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

Здравствуйте.

Выше я приложил скрипт. Суть такова: берётся grub2, собранный для x86_64-efi (пакет grub-efi-amd64-bin в Debian, не конфликтует с grub-pc), его grub-mkimage передаётся необходимый набор модулей (зависимости модулей разрешаются вручную) и конфиг, который он выполнит при запуске. В моём случае grubx64.efi ищет флешку по UUID её файловой системы и запускает /boot/grub/grub.cfg оттуда.

Как и в случае с ядром linux, все модули можно не линковать статически, но обязательно слинковать те, которые помогут найти и подгрузить остальные (поддержку файловой системы и таблицы разделов). Но это усложнит встраиваемый grub.cfg (который в моём случае занимает 2 строчки).

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