UEFI

Материал из ALT Linux Wiki


Логотип Википедии
В Википедии есть обзорная статья по теме «Extensible_Firmware_Interface».


Поддержка UEFI в ALT Linux

Кратко об UEFI

Extensible Firmware Interface (EFI) (с англ. — «интерфейс расширяемой прошивки») — интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования, его основное предназначение: корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру операционной системы. EFI предназначен для замены BIOS — интерфейса, который традиционно используется всеми IBM PC-совместимыми персональными компьютерами. Первая спецификация EFI была разработана Intel, позднее от первого названия отказались и последняя версия стандарта носит название Unified Extensible Firmware Interface (UEFI). В настоящее время разработкой UEFI занимается Unified EFI Forum.

Стандартно у Intel в дисковой разметке GPT системный раздел EFI (англ. ESP) с идентификатором EF00 и файловой системой FAT32 содержит файл /efi/boot/boot[название архитектуры].efi, например: /efi/boot/bootx64.efi. Загрузчик EFI BIOS загружает и запускает соответствующий архитектуре компьютерной системы такой файл.

Помимо этого NVRAM хранит адреса файлов возможной ззагрузки.

Apple не использует ESP для загрузки, bootstrap передаёт управление по адресу, записанному в NVRAM (BootRom): /System/Library/CoreServices/boot.efi с помощью утилиты bless

Также в большинстве реализаций UEFI возможна загрузка в режиме совместимости с диска с разметкой MBR.

Цель

Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, без мороки с переключением BIOS/UEFI; предоставить возможность использования UEFI-«железа» без CSM[1].

Основная статья: План выпуска бранча p7

Состояние

Релиз (x86_64). Нормально устанавливаемся на bare metal и в мультизагрузку с, например, openSUSE 12.2 и Windows 8.

Результат

По состоянию на декабрь 2014 года поддержка UEFI включена в 64-битные выпуски дистрибутивов версий 7.0.2+, регулярные сборки образов и стартовые наборы, включая возможность работы без отключения Secure Boot. 32-битный UEFI у нас нет есть в позднем p8 и сразу в p9.

Реализация поддерживает запись на CD/DVD-болванку или USB-флэшку и загрузку в EFI mode или Legacy mode. Проверена на ASUS/Gigabyte/Lenovo UEFI и MacBook/MBP EFI.

Замечания

Внимание! Для UEFI/GPT ещё не решены вопросы создания программного RAID штатными средствами при установке:
  • не поддерживается создание RAID на GPT-разделах, altbug #28247 — закрыт 2014-02-03
  • не поддерживается /boot/efi на программном RAID1, altbug #28827#c15 — закрыт 2013-04-16
Для серверов и рабочих станций пока рекомендуется BIOS-режим (CSM).
Внимание! Не следует устанавливать 32-битные дистрибутивы в dualboot с Windows 8 и далее, предсказуемы и известны проблемы. Также не стоит пытаться установить таким образом линукс в BIOS/CSM-режиме, а только в UEFI.


Определить какой режим загрузки используется можно, выполнив команду efibootmgr:

  • BIOS/Legacy — команда возвращает сообщение о том, что переменные EFI не поддерживаются:
    # efibootmgr
    EFI variables are not supported on this system.
    
  • UEFI — вывод примерно такой:
    # efibootmgr
    BootCurrent: 0005
    Timeout: 0 seconds
    BootOrder: 0005,0000,0001,0003,0004,0002
    Boot0000* UiApp
    Boot0001* UEFI VBOX CD-ROM VB2-01700376 
    Boot0002* UEFI VBOX HARDDISK VB972dfeed-bac982c9 
    Boot0003* UEFI VBOX HARDDISK VB23e1ea2e-e6c099cc 
    Boot0004  EFI Internal Shell
    Boot0005* altlinux
    

Режим загрузки дистрибутива различается по меню загрузчика с установочного носителя:

Если после установки ALT Linux попытка загрузки Windows приводит к сообщению «Ошибка: invalid signature», значит, установка была выполнена в режиме BIOS/CSM, который придётся отключить в настройках firmware и выполнить установку повторно с задействованием тех же разделов под линукс.

Специфика работы с UEFI

Установка Altlinux в режиме UEFI возможна только если диски размечены в GPT. В случае разметки MBR при загрузке под UEFI GRUB не устанавливается.

Чтобы установить GRUB на диск с GPT, для размещения stage2 требуется раздел с типом (флагом) bios_grub, в документации к GRUB2 рекомендуется создавать такой раздел размером 1 Мб.

Особенность разбиения диска

Для того, чтобы система правильно работала (в частности могла загрузиться) с UEFI, при ручном разбиении диска надо обязательно сделать точку монтирования /boot/efi, в которую нужно смонтировать vfat раздел с загрузочными записями. Если такого раздела нет, то его надо создать вручную. При разбивке жёсткого диска в автоматическом режиме такой раздел создаёт сам установщик.

Пример разбиения диска с UEFI

Особенности установки

Как обычно; отличия состоят в разбивке и установке загрузчика:

  • начальный загрузчик EFI не похож на обычный, надо уметь находить в нём установщик;
  • язык установщика по умолчанию — английский, иной надо выбирать вручную на первом шаге установки;
  • требуется создать новый или подключить существующий FAT32-раздел с GPT-типом ESP (efi system partition) размером ~100—500 Мб (смонтируется в /boot/efi);
  • может понадобиться раздел типа bios boot partition минимального размера, никуда не подключенный (в установщике при выборе типа файловой системы нажать «отмена») и предназначенный для встраивания grub2-pc, для установки в режиме Legacy;
  • остальные разделы — и файловая система, и своп — имеют GPT-тип basic data; актуальный тип раздела задаётся отдельно;
  • модуль установки загрузчика предложит вариант «EFI», с которым стоит согласиться[2].

Следует устанавливать 64-битные дистрибутивы; запуск 32-битного дистрибутива возможен в режиме BIOS/CSM (Compatibility Support Module), а в режиме EFI такая установка не будет сочтена загрузочной[3]. При установке 64-битного дистрибутива в режиме BIOS/CSM будет невозможна двойная загрузка с UEFI Windows (обычно 8 и новее).

При загрузке с образа в EFI-режиме загрузчиком будет графический rEFInd либо совсем текстовое ELILO, в BIOS-режиме — синяя текстовая либо брендированная графическая менюшка SYSLINUX.

После собственно загрузки и логина именем root в EFI-режиме должны отработать команды

modprobe efivars
efibootmgr

— в BIOS-режиме вторая из них скажет

Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.

При загрузке установленной системы типичным на сегодня будет почти обычный grub2-efi.

Внимание! Не пытайтесь запускать efibootmgr на оборудовании Apple,
известны случаи повреждения его firmware таким образом.
Внимание! Известны аналогичные случаи для некоторых ноутбуков Samsung
и Lenovo с Phoenix UEFI, будьте осторожны и изучите отзывы заранее!


Загрузчики, поддерживающие UEFI

Иерархия загрузчиков и их применение таковы:

  1. shim применяется как первый бинарник, которому передаёт управление firmware и который обеспечивает проверку дистрибутивной/пользовательской подписи на следующем шаге при включенном UEFI SB;
  2. следующим бинарником могут быть elilo, refind, grub (efilinux у нас пока не собран) — от них требуется уметь передать ядру параметры;
    • если всё нужное, начиная с расположения rootfs, забито в ядро при сборке — можно воспользоваться и тем, что у нас оно является самодостаточным EFI-бинарником;
    • обратите внимание: elilo умеет загружать только Linux, поэтому также применяется как своего рода «фильтр» между подписанными загрузчиками и неподписанным ядром при реализации сценария hardware enablement (то есть когда сквозная проверка подписи не требуется по постановке задачи);
  3. в итоге загружается либо ядро, либо что-нибудь вспомогательное вроде EFI shell.

По состоянию на конец 2014 года в установленной системе всегда получается grub2-efi (настройки в /etc/sysconfig/grub2, после изменения надо запустить grub-efi-autoupdate); elilo и refind применяются в загрузочных ISO.

Создание MD RAID на GPT-разделах

Инсталятор (точнее, alterator-vm) умеет создавать программный массив на GPT-разделах[4], но процесс несколько неочевиден: следует создать разделы типа "basic data" и не создавать на них том, а выбрать строчку "RAID" и воспользоваться появившейся внизу формы кнопкой "Создать RAID" ("Create RAID").

Установка системы на MDRAID в системе с UEFI

Загрузчик UEFI GRUB поддерживает загрузку ядра, расположенного на MD RAID. Проверена загрузка с MD RAID level 1, другие варианты массива не проверены. LVM RAID и LVM Mirror также не проверены.

Чтобы сервер загрузился при поломке одного из дисков, необходимо установить загрузчик на каждый диск массива. По умолчанию при загрузке UEFI загрузчик устанавливается только на первый диск. Поэтому приходится делать ручную установку. Будьте готовы к тому, что на вашей платформе такая установка не получится.

Недостатки описанной конфигурации:

  • при глобальном изменении GRUB может не загрузить систему, придётся загружаться с LiveUSB и устанавливать GRUB: mount корень-с-диска-сервера; chroot в него ; mount -A ; for s in /dev/sd?; do grub-install $d; done ; reboot;
  • в BIOS нужно вручную добавить загрузку с ESP-раздела каждого физического диска.


1. В инсталляторе или LiveUSB переключитесь на свободную консоль и сделайте ручную разметку на каждом физическом диске:

  1. Разметьте диск в GPT.
  2. Создайте раздел типа ESP (он же EFI, в parted флаг boot), создайте на нём файловую систему fat16 (mkfs.vfat -F 16 /dev/sda) размером 100 Мб или больше, например, 256 Мб.
  3. Создайте раздел типа bios_grub размером 31 Кб или больше (разработчики GRUB рекомендуют 1Мб).
  4. Создайте раздел типа msdata (basic data) для объединения их в RAID корневого тома (для Altlinux P9 подойдёт размер 40 Гб).
  5. Создайте массив RAID из этих разделов.
  6. В массиве RAID создайте файловую систему и назначьте точку монтирования "/".
  7. Создайте раздел(ы) для остальных томов файловой системы и объедините их в RAID или LVM.

2. Установите систему
3. Установите grub на каждый диск, на котором есть зеркало (член массива) RAID
4. Программой efibootmgr добавьте в список загрузки элементы для каждого диска с разделом в составе RAID и с установленным GRUB.

Установка внутри VirtualBox

Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая. Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы. ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку). Диск — динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.

Получить доступ к настройкам можно быстрым нажатием F8 (F12), пока промелькивает логотип VirtualBox.

Следует отметить, что NVRAM на виртуальном железе VirtualBox, младше версии 6.1 не переживает выключение экземпляра (это известная проблема). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке:

1-ый вариант выполнить в ещё загруженной системе

echo "fs0:\EFI\altlinux\grubx64.efi" > /boot/efi/startup.nsh

Или то же самое сделать потом, из EFI Shell:

echo "fs0:\EFI\altlinux\grubx64.efi" > fs0:\startup.nsh

2-ой вариант (подсмотрено в | VirtualBox (Русский) на wiki.archlinux.org — после установки системы

  • Если существует файл /boot/efi/boot/BOOTX64.EFI дать ему другое имя
  • Скопировать /EFI/altlinux/grubx64.efi в /boot/efi/boot/BOOTX64.EFI
Основная статья: VirtualBox

Установка внутри KVM

Нужно загрузить экземпляр qemu-system-x86_64 с TianoCore firmware, уложенным как файл bios.bin в каталоге, путь к которому передан посредством опции -L.

Основная статья: KVM

Установка с Secure Boot

Работа с сертификатами

Если нет доверия к Microsoft, можно подтвердить (enroll) сертификат ALT Linux, добавленный по пути EFI/enroll/altlinux.cer. Пошаговая процедура описана на rodsbooks.com (потребуются не все шаги). В выпусках 7.0.2 и регулярных сборках с конца ноября используется подписанный shim с этим сертификатом, т.е. отключать SecureBoot необязательно.

Windows не даёт возможности попасть в фирмварь, не приняв EULA

Если попался ноутбук с трудносъёмным диском и неактивированной win8, который не даёт возможности попасть в фирмварь, не приняв EULA — можно попробовать его жёстко выключить либо:

  • возможно, переключиться на ENG комбинацией при помощи Alt-Shift;
  • нажать Shift-F10;
  • в полученном приглашении cmd.exe сказать shutdown /s;
  • при включении, не теряя времени, «топтаться» по F12/F2/Del или какие ещё клавиши могут быть на этой модели.

Если уже активирована — см. How to Boot to UEFI Firmware Settings from inside Windows 8 and 8.1.

Создание загрузочной записи UEFI вручную

Например, для создания загрузочной записи на /dev/sda4 надо дать команду:

efibootmgr -c -d /dev/sda -p 4 -L "ALTLinux" -l "\EFI\altlinux\grub64.efi"

Самостоятельная сборка установочного образа для установки c UEFI

Достаточно хорошая поддержка сборки UEFI-загружаемых гибридных образов добавлена в текущий mkimage; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:

  • добавлению в инсталер dosfstools (efibootmgr будет вытянут текущим alterator-grub);
  • добавлению в базовую устанавливаемую систему grub2-efi и installer-feature-efi-stage3;
  • добавлению в modules для propagator kernel/drivers/firmware ради efivars.ko;
  • передаче mkimage переменной EFI_BOOTLOADER со значением elilo либо refind[5][6].

Для сборки образов требуется свежий Sisyphus либо p7/branch, в т.ч.:

  • mkimage 0.2.5+ (для SB — 0.2.12+)[7]
  • xorriso 1.2.4+
  • syslinux 4.04-alt5+[8]
  • evms 2.5.5-alt30+
  • guile-evms 0.4-alt14+
  • alterator-vm 0.4.2-alt1+
Основная статья: Mkimage-profiles


Решение проблем

«Cлетание» информации о загрузчике из энергонезависимой памяти UEFI

При некоторых обстоятельствах возможно «слетание» информации о загрузчике из энергонезависимой памяти UEFI, что приводит к невозможности загрузки любых ОС или Linux; если это не «аппаратный» случай вроде известных проблем с firmware некоторых производителей, следует произвести повторную установку загрузчика:

  1. загружаемся со спасательной части дистрибутива или специального образа в режиме EFI;
  2. выполняем команду mount-system для поиска и монтирования корневых ФС;
  3. находим нужную, если получилось больше одной, и даём команду chroot /mnt/system1 grub-install[9];
  4. затем umount -al и reboot

Ошибка в firmware при работе с более чем одной подписью

Если замечено, что на каком-либо оборудовании загружаются носители Windows и Ubuntu, но не ALT Linux/openSUSE/Ubuntu — это, скорее всего, ошибка в firmware при работе с более чем одной подписью (shim в Ubuntu подписан только Microsoft).

В качестве объезда можно отключить Secure Boot либо воспользоваться специальной флэшкой, содержащей shim с подписью Microsoft, но без подписи ALT Linux, для дальнейшей загрузки с собственно установочной флэшки. Может пригодиться отключалка сообщения «Безопасная загрузка (SecureBoot) настроена неправильно».

После установки не загружается Windows

Если после установки не загружается Windows 8 с ошибкой наподобие

Booting a command list

/EndEntire
file path: /ACPI(a0341d0,0)/PCI(2,1f)/UnknownMessaging(12)
/HD(1,800,96000,fed12b717a32444e,81,b5)/File(\efi\Microsoft\Boot)
/File(bootmgfw.efi)/EndEntire
error: cannot load image.

— известны следующие объезды:

  • отключение SecureBoot;
  • выбор Windows в меню загрузки firmware (например, по F12) при необходимости;
  • использование отличающегося от grub2 загрузчика (например, refind на инсталяционном диске в режиме поиска уже установленных ОС).

Ноутбуки Acer

Если после установки на ноутбук Acer система не загружается, необходимо зайти в BIOS и либо отключить secure boot, либо вручную занести grub2 загрузчик в список доверенных. Однако по умолчанию данные опции в BIOS не активны. Чтобы их разблокировать, нужно задать непустой пароль для входа в BIOS ("Supervisor Password" вкладки "Security") [ к примеру - "1" ].

Внимание! пароль тут же запишите!.

. После этого эти настройки для UEFI становятся активными и можно либо отключить secure boot (Secure Boot [Disabled]), (эта опция есть не во всех моделях Acer), либо же вручную занести grub2 загрузчик в список доверенных с помощью опции "Select an UEFI file as trusted" (обычно \EFI\altlinux\grubx64.efi). После того, как настройки сохранены, если пароль для входа в BIOS ("Supervisor Password") больше не нужен, то его нужно сбросить (ввести пустое значение) пока текущий пароль не утерян/не забылся.

"Empty security header"

Во время загрузки по UEFI, в меню GRUB появляется сообщение "Empty security header". Это сообщение от efi модуля shim (- trivial UEFI first-stage bootloader), используемого при загрузке по UEFI.

У меня появилось после dist-upgrade c p8 до p9 на ноутбуке acer с активной secure boot в настройках. Причина - скорее всего, изменился после обновления \EFI\altlinux\grubx64.efi, который был указан в настройке BIOS "Select an UEFI file as trusted".

Вылечилось - выключил secure boot (в этой модели можно). В других моделях надо было бы перевыбрать новый grubx64.efi.

материнская плата ASUS MA597 (LE R2.0)

Чтобы выключить UEFI secure boot, в пункте "OS type" ниже вместо "Windows UEFI mode" надо выбрать "Other OS". (Надпись "Secure boot Enabled" чисто декоративная). При включенном UEFI secure boot установка grub проходит некорректно (ALT bug #37136). Для корректной работы grub с UEFI secure boot воспользуйтесь рецептом с archlinux wiki.

Примечания

  1. 2013: такое уже начинает появляться (CSM -- Compatibility Support Module -- по сути код BIOS, которому передаётся управление в т.н. Legacy Mode; при этом возможно загрузиться с "обычного" загрузочного носителя, не реализующего поддержку UEFI)
  2. при установке загрузчика в MBR или раздел, а не ESP, загрузка в EFI mode не пройдёт
  3. OVMF в составе virtualbox обычно загружает EFI Shell, а поведение фирмварей на железе варьирует от представления меню пунктов загрузки до перехода к настройкам
  4. GPT и UEFI технически ортогональны, но в силу связанных с Microsoft причин разработчики firmware склонны считать их "парой"
  5. другие типы бутлоадеров ещё не реализованы, см. tools/mki-copy-efiboot
  6. что автоматически приведёт к добавлению в BOOT_TYPE значения efiboot
  7. рекомендуется также mkimage-profiles 1.1.18+ или свежий гит mkimage-profiles-desktop
  8. в апстриме syslinux нужное добавлено в 4.06
  9. здесь system1 соответствует случаю единственного обнаруженного линуксового корня

Ссылки

Важное:

Разное: