Перезагрузка в uefi из linux

Обновлено: 04.07.2024

Мы больше не нажимаем определенную клавишу во время процесса загрузки, чтобы открыть BIOS - вместо этого опция для доступа к BIOS находится в меню параметров загрузки Windows 8 . Если вы находитесь здесь, чтобы получить доступ к UEFI BIOS вашего компьютера, нажмите Устранение неполадок

Главный разработчик Secure Boot для Linux говорит, что альтернативные ОС не могут предполагать, что старый способ продолжит работать . Так есть ли в Linux новый способ входа в настройку UEFI?

У меня есть материнская плата ASUS. Предполагается, что обновленная версия прошивки содержит опцию быстрой загрузки . Обратная сторона в том, что эта опция может усложнить «раскрытие BIOS», чем она есть.

Я не против возиться. Просто, если известно, что это плохая идея, я не хочу ни с чем сталкиваться с риском обновления прошивки (и, возможно, придется отключить дело, сбросить настройки и заново настроить их все).

В качестве альтернативы, как это обрабатывается для пользователей Windows 7? Если они оптимистично выбирают опцию быстрой загрузки, как они снова получают доступ к настройке «BIOS», когда им это нужно?

Черт возьми. Теперь я хотел бы, чтобы я не выбрал Asus Используйте любые настройки для Windows 7, которые будут настройками по умолчанию, и все будет хорошо :). Должен быть стандартный способ сделать это в UEFI, я просто нигде не нашел его. Даже оригинальная прошивка без опции быстрой загрузки вообще довольно быстрая, поэтому я не жалею об этом. Мы смотрим на особенность UEFI; Я бы не стал полагаться на Gigabyte, чтобы получить EFI правильно. Я работаю над проблемами, связанными с 1) портами USB3 и 2) клавиатурой USB, которые в целом немного разочаровывают. OTOH индикатор тестирования памяти был полезен для меня, когда моя новая RAM потерпела неудачу через неделю. Одна из проблем с UEFI заключается в том, что, несмотря на документацию на 2000 страниц, НЕТ стандартизации проблем пользовательского интерфейса. Разработчики прошивки могут предоставить пользователям доступ к своим установочным утилитам любым способом, который они сочтут нужным. В статье говорится, что Windows 8 наконец-то предоставляет пользователям доступ к обычной утилите установки стандартным способом. Таким образом, в сертификации Windows должен быть указан метод для поддержки этого. Надеюсь, это часть UEFI, а не недокументированное расширение MS. Обратите внимание, что это не вопрос о «безопасной загрузке». Вопрос предполагает, что мне уже удалось установить и загрузить Linux. Я лично использую Windows 8 на моей материнской плате ASRock Z77 Pro3, только недавно внедрив эту опцию «Сверхбыстрая загрузка» в настройке UEFI. ASRock предоставляет мне утилиту, которая находится на панели задач, и я могу нажать ее, чтобы получить доступ к настройке UEFI. Очистка CMOS сбросит параметр быстрой загрузки, поэтому вы всегда можете попробовать. Мой vBIOS не поддерживает этот параметр, потому что он не поддерживает GOP, поэтому у меня не было возможности опробовать его. Мне не предоставляют подобное программное обеспечение для Linux, только для Windows 8.

В современных дистрибутивах Linux, использующих systemd, вы можете перейти прямо в меню настройки прошивки, используя

Смотрите также этот Unix.SE ответ. Будьте очень осторожны с использованием efivar , мне как-то удалось удалить 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications переменную, возможно, передав пустые данные в efivar программу. Теперь мне нужно найти способ воссоздать этот файл, без него systemctl reboot --firmware-setup программа больше не работает. @sourcejedi Arch Linux поставляется с systemd 230. Мне наконец-то удалось вернуть свою переменную. По какой-то причине создание переменной через efivars привело к тому, OsIndications-89efde67-ffcd-12de-ab01-01efff012389 что у него другой GUID. После загрузки в оболочку UEFI я вызвал команду setvar OsIndications -nv -bs -rt =0000000000000000 для установки переменной OsIndications в энергонезависимом хранилище для bootservice и доступа во время выполнения к шестнадцатеричной последовательности, представляющей 64-битное число (0).

Я не уверен, как именно Windows 8 делает это, но я могу предположить, что он использует переменные UEFI, используемые для параметров загрузки.

Вы можете использовать efibootmgr, чтобы определить значения различных загрузочных переменных. В моей системе Boot0000 - это программа установки, поэтому использование efibootmgr -n 0 должно привести к загрузке системы при следующей загрузке.

Спасибо. Я сейчас попробовал загрузку UEFI на моем текущем BIOS. Кажется, Boot0000 занят одной из нормальных загрузочных записей. (Я также понял, что неправильно прочитал примечания к выпуску, и нет никаких оснований ожидать, что новая версия будет быстрее. Ну и хорошо :). @sourcejedi Микропрограмма, ее вариант быстрой загрузки может на самом деле загружаться быстрее на 1 или 2 секунды, сверхбыстрая загрузка может сбежать

Я попробовал загрузку EFI с Ubuntu 12.04 и нашел ответ на свой вопрос.

(Я не обновлял свою прошивку. Первоначально я неправильно прочитал примечания к выпуску - скорее всего, это будет не так быстро).

efibootmgr Кажется, не поддерживает перезагрузку для установки прошивки для меня. Но Граб-Эфи делает. В меню загрузки GRUB можно создать запись для настройки прошивки.

Вы можете войти в меню загрузки GRUB, удерживая нажатой клавишу Shift "в начале процесса загрузки". Я нажимаю на нее сразу же после включения подсветки NumLock на клавиатуре, и это работает для меня.

Если вам интересно, я тоже посмотрел на команду: это "fwsetup". Т.е. вы можете войти в меню GRUB, следовать инструкциям на экране, чтобы переключиться на командную строку, затем набрать "fwsetup" и нажать клавишу возврата.

Если вы делаете установку EFI с нуля, я считаю, что пункт меню будет создан автоматически. Я не установил как EFI, что означало, что я должен был пнуть его (см. Ниже, шаг 4).

Переход от загрузки BIOS-GPT к загрузке UEFI-GPT без записи загрузочного компакт-диска EFI?

РЕДАКТИРОВАТЬ: этот раздел может работать на некоторых системах. Однако теперь я считаю, что это зависит от дополнительного поведения, которое не является частью стандарта UEFI. Когда-нибудь я выясню, что здесь происходит.

Сложность в том, что вы, вероятно, все еще используете таблицу разделов MBR, и вам почти наверняка потребуется преобразовать ее в GPT. Я не собираюсь рассказывать о переходе с MBR на GPT. Разбиение всегда немного опасно. gdisk можно конвертировать, но есть довольно много неудобных битов. Я не перечислил их всех здесь. Но, например, вам, вероятно, нужно сжать последний раздел, чтобы освободить место для GPT на конце диска. Вы не можете сделать это, если раздел смонтирован, поэтому вы захотите использовать загрузочный CD. (Я также организовал преобразование, убедившись, что могу загружаться с BIOS-GPT до того, как попробую UEFI-GPT, что потребовало создания еще одного типа загрузочного раздела.).

Предполагая, что вы установили GPT:

  1. Установите grub-efi. Это удалило grub-pc и остановило его работу. (grub-efi фактически все еще работал после того, как я удалил это!). Fedora кажется немного другой; Я только попробовал это на Ubuntu. Во время установки вы увидите ошибки, связанные с невозможностью доступа к переменным EFI, потому что вы не загрузились с помощью EFI.
  2. Неисправность.
  3. Включить. Убедитесь, что вы загружаетесь через EFI! Это системно-зависимая и тревожная часть. Моя система по умолчанию работала с загрузкой MBR, поэтому я увидел страшную ошибку от GRUB - но это было от старого grub-pc. В моей системе было легко войти в экран настройки прошивки на этом этапе (см. Ниже) и изменить приоритет загрузки на «ubuntu» (который был записан для загрузки моей ОС через EFI).
  4. Теперь вы можете повторить установку grub ( grub-install или grub2-install в Fedora), и она не выдаст никаких ошибок. И теперь при запуске update-grub (или grub2-mkconfig -o /boot/grub/grub.cfg на Fedora) будет создан пункт меню для входа в настройки прошивки.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это не самая последняя прошивка / плата. Ваша система ASUS может работать не так, как моя.

Моя текущая прошивка ASUS замечает, когда «загрузочная конфигурация» изменилась - например, когда я установил grub-efi. Там есть текст, говорящий, что он изменился, если вы посмотрите на начальный экран «EZ setup». И, когда он обнаруживает такое изменение, он облегчает доступ к экрану настройки. Что он делает, это показывает заставку с «нажмите DEL, чтобы войти в настройку» в течение нескольких секунд. (Если вы включили опцию «быстрой загрузки», она обычно пропускает заставку).

Я думаю, что также возможно вызвать заставку, выключив систему и отключив ее на минуту или около того, перед перезагрузкой.

На моей текущей прошивке я могу войти в настройку прошивки, мигая клавишей DEL во время загрузки, даже без заставки. Однако это зависит от включения поддержки клавиатуры в прошивке.

Возможно переключить прошивку, чтобы не проверять клавиатуры во время загрузки, что должно ускорить процесс. Я думаю, что это следующий эксперимент, который я попробую, теперь я более уверен в этом EFI! (Вполне вероятно, что это может убить поддержку клавиатуры в загрузочном меню GRUB. Но я все еще должен иметь возможность использовать grub-set-default, чтобы GRUB загрузил запись fwsetup и восстановил таким образом).

No longer do we press a certain key during the boot process to reveal the BIOS – instead, an option to access the BIOS is located in Windows 8’s boot options menu. If you’re just here to access your computer’s UEFI BIOS, click the Troubleshoot tile.

The main developer of Secure Boot for Linux says that alternative OS's can't assume the old way will continue to work. So does Linux also have a new way to enter UEFI setup?

I have an ASUS motherboard. It suggests that an upgraded version of the firmware contains a fast boot option. The flip side is that the option might make it even harder to "reveal the BIOS" than it already is.

I don't mind tinkering. Just if this is known to be a bad idea, I don't want to go through the risk of a firmware upgrade for nothing (and maybe have to pop the case off, reset the settings and have to set them all up again).

Alternatively, how is this handled for Windows 7 users? If they optimistically select the fast boot option, how do they get access to the "BIOS" setup again when they need it?


2,922 2 2 gold badges 19 19 silver badges 31 31 bronze badges

5 Answers 5

On modern Linux distributions using systemd, you can go straight to the Firmware setup menu using:

6,026 4 4 gold badges 25 25 silver badges 44 44 bronze badges See also this Unix.SE answer. Be very careful with using efivar , I somehow managed to remove the 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications variable, possibly by passing empty data to the efivar program. Now I have to find a way to recreate this file, without it the systemctl reboot --firmware-setup program does not work anymore. @sourcejedi Arch Linux ships with systemd 230. I finally managed to get my variable back. For some reason creating the variable via efivars resulted in OsIndications-89efde67-ffcd-12de-ab01-01efff012389 which has a different GUID. Once I booted into UEFI Shell, I invoked the command setvar OsIndications -nv -bs -rt =0000000000000000 to set the OsIndications variable in non-volatile storage for bootservice and runtime access to the hexadecimal sequence representing a 64-bit number (0).

I'm not sure how exactly Windows 8 does this, but I can guess that it takes advantage of UEFI variables used for boot options.

You can use efibootmgr to determine the meanings of the various boot variables. On my system, Boot0000 is Setup, so using efibootmgr -n 0 should cause the system to boot into setup on the next boot.

11.7k 22 22 gold badges 68 68 silver badges 89 89 bronze badges Welcome to Super User! Please quote the essential parts of the answer from the reference link(s), as the answer can become invalid if the linked page(s) change.

I have tried EFI booting with Ubuntu 12.04, and found an answer to my own question.

(I haven't upgraded my firmware. I misread the release notes originally - it probably wouldn't be any faster).

Entering firmware setup from the grub-efi boot menu

efibootmgr doesn't seem to support rebooting to firmware setup for me. But grub-efi does. It's able to create an entry for firmware setup in the GRUB boot menu.

You can enter the GRUB boot menu by holding down the shift key "early in the boot process". I press it down immediately after the NumLock light turned on on the keyboard, and that works for me.

If you're curious, I looked at the command as well: it's "fwsetup". I.e. you can enter the GRUB menu, follow the on-screen instructions to switch to the command line, then type "fwsetup" and hit return.

If you do an EFI install from scratch, I believe the menu item will be created automatically. I didn't install as EFI, which meant I had to kick it (see below, step 4).

Converting from BIOS-GPT boot to UEFI-GPT boot without burning an EFI boot CD?

EDIT: this section may work on some systems. However I now believe it relies on extra behaviour which is not part of the UEFI standard. Some day I'll figure out what's happening here.

I was converting an existing install to EFI, without an EFI-enabled boot CD. Some people think this isn't possible. Admittedly, there are a couple of confusing warning messages. I had a look at what was going on. If you can currently enter the firmware setup, then it's not all that bad.

The hard part is you're probably still using an MBR partition table, and you almost certainly need to convert it to GPT. I'm not going to cover conversion from MBR to GPT. Partitioning is always a bit dangerous. gdisk can convert, but there are quite a few fiddly bits. I haven't listed them all here. But for one, you probably need to shrink the last partition, to make space for the end-of-disk GPT. You can't do that if the partition is mounted, so you'll want to use a boot CD. (I also staged the conversion, making sure I could boot from BIOS-GPT before I tried UEFI-GPT, which involved having to create yet another type of boot partition.).

Assuming you've got GPT set up:

  1. Install grub-efi. This removed grub-pc, and stopped it from working. (grub-efi actually still worked after I removed it!). Fedora seems a bit different; I've only tried this on Ubuntu. During the install, you will see errors about not being able to access EFI variables, which is because you didn't boot by EFI.
  2. Shutdown.
  3. Power on. Make sure you boot through EFI! This is the system-dependent and worrying part. My system happened to default to MBR boot to start with, so I saw a scary error from GRUB - but it was from the old grub-pc. On my system, it was easy to enter the firmware setup screen at this point (see below), and change the boot priority to "ubuntu" (which was the entry for booting my OS via EFI).
  4. Now you can redo the grub installation ( grub-install , or grub2-install on Fedora), and it won't show any errors. And now, running update-grub (or grub2-mkconfig -o /boot/grub/grub.cfg , on Fedora) will create the menu item for entering firmware setup.

Entering the firmware setup/boot menu on my ASUS system

DISCLAIMER: this is not the very latest firmware/board. Your ASUS system may act differently from mine.

My current ASUS firmware notices when the "boot configuration" has changed - e.g. when I installed grub-efi. There's text saying that it's changed if you look at the initial "EZ setup" screen. And, when it detects such a change, it makes it easier to enter the setup screen. What it does is it shows the splash screen with "press DEL to enter setup" for a few seconds. (If you've enabled the "fast boot" option, it normally skips the splash screen).

I think it's also possible to trigger the splash screen by you powering off the system and unplugging it for a minute or so, before rebooting.

On my current firmware, I can enter the firmware setup by blitzing the DEL key during boot, even without the splash screen. However, this is conditional on enabling keyboard support in the firmware.

It's possible to switch the firmware not to probe for keyboards during boot, which is supposed to speed things up. I guess this is the next experiment to try, now I'm more confident about this EFI stuff! (It's plausible it could kill keyboard support in the GRUB boot menu as well. But I should still be able to use grub-set-default, so that GRUB boots the fwsetup entry, and recover that way).

Сегодня мы научимся перезагружаться из Linux прямиком в Windows и обратно всего за один (двойной) клик.

image

Дано:

  • Два диска с GPT с разными ОС
  • Материнская плата с UEFI и отключеным Legacy Mode
  • Windows, которую бережно поставили с полной поддержкой UEFI
  • Linux (у меня Manjaro), который бережно поставили, выпилив любое упоминание GRUB и прочих старомодных вещей
  • rEFInd — красивый менеджер загрузки (нет, не загрузчик)

Надо:

  • Написать два скрипта на *sh и cmd (bat), которые позволят перезагрузиться в нужную ОС

Примечания:

  • Рабочие варианты обозначены, как Решение, остальное — мои рассуждения и описание пути к цели.
  • Я сознательно опускаю описание тех деталей, которые не относятся к сути настройки, либо легко варьируются. Упоминаются же эти детали потому, что для меня они не были очевидны на момент настройки, поэтому статья становится более понятной для неискушенных читателей, которые не будут видеть в ней инструкцию по рисованию совы. стоит быть осторожным при модификации NVRAM

Linux:

Отлично, теперь запускаем:

И оказываемся в Windows, как того и желали. Теперь эту команду записываем в скрипт/alias/*.desktop-файл и радуемся тому, как всё здорово получилось.

Windows:

Typical Windows


Началось всё с поиска аналога efibootmgr для Windows, которого в чистом виде, конечно же, нет. Для успокоения совести я даже попытался использовать Linux Subsystem, но это, конечно же, не сработало.
Беглый поиск по интернетам показал, что схожим функционалом по модификации NVRAM обладает утилита bcdedit. Отлично, думаю я, запускаю PowerShell из-под Администратора и пишу

Где Linux? Куда грузиться? Ненавижу винду
На самом деле оказалось, что виновата не Windows, а я (да-да, тот самый момент для внимательных пользователей), и вот почему: rEFInd — прекрасная утилита, которая обычно, для корректной работы, требует только установить себя. Она умеет подхватывать все .efi файлы, разные дистрибутивы с разными ядрами, сама подставляет иконки. Прелесть, а не инструмент. Но это сыграло со мной злую шутку, так как оказалось, что UEFI ничего не знает про Linux, так как отсутствует соответствующий ему .efi-файл.
Поэтому презагружаемся обратно в Linux, конфигурируем systemd-boot (bootctl). Теперь всё выглядит вот так:

Возвращаемся обратно и снова запускаем.

Тут стоит упомянуть, что проблему мне помогали решать пользователи reddit. Именно благодаря им мы имеем следующий шаг:

Где аргументом является identifier необходимого варианта — Linux Boot Manager.

Powershell не даёт нормально выполнить эту команду, ругаясь на

Всё из-за того, что Microsoft периодически любит что-нибудь сломать. Решение просто и элегантно — вызываем классический CMD и работаем в нём. Это можно сделать командой

Перезагружаемся и видим, что порядок загрузки не изменился, а мы оказались в первом элементе в BootOrder (у меня это был rEFInd), выбираем Windows и видим страшный привет из времен DOS, который говорит нам, что \EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI не найден. Да, мы изменили параметры загрузчика Windows, но не UEFI.
Борьба с этой ошибкой заняла у меня все праздники, но ничего путного не получалось. Я уже подумывал написать на C++ небольшую программку для этого (то, что это возможно, следует из существования такого софта, как EasyUEFI).
Но тут на очередном сайте я обнаружил вот такую конструкцию

И тут меня осенило, что можно прямо сказать bcdedit что и куда писать. Дальше стоило только проверить догадку:
Решение

Тут важно, что мы явно сказали писать не в (как он, видимо, делает по-умолчанию), а в , что и является нашими настройками UEFI.
Перезагружаемся, и всё работает так, как мы этого хотели. Сохраняем это дело в bat/lnk, дописываем

Выставляем запуск из-под администратора и готово!
Спасибо за внимание! Буду крайне рад замечаниям по технической части в комментариях, замечаниям по оформлению — в ЛС.

Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?

Я обещал "самое краткое руководство". Вот оно:

  1. Создаём на диске таблицу разделов GPT
  2. Создаём FAT32-раздел на пару сотен мегабайт
  3. Скачиваем из интернета любой UEFI-загрузчик
    (нам нужен сам загрузчик, это один бинарный файл!)
  4. Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
  5. Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
    (настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете)
  6. После перезагрузки видим меню загрузчика
    (Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5.)

TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному "пути по-умолчанию", где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается

Как делать не надо

Есть, на самом-то деле, несколько способов настроить UEFI-загрузку. Я начну с описания других вариантов — чтобы было понятно, как (и почему) делать не надо. Если вы пришли за руководством — мотайте в самый низ.

Не надо лезть в NVRAM и трогать efivars

Наиболее "популярная" процедура установки загрузчика в систему такова: установщик ОС создаёт специальный раздел, на нём — структуру каталогов и размещает файлы загрузчика. После этого он с помощью особой утилиты (efibootmgr в linux, bcdedit в windows) взаимодействует с прошивкой UEFI-чипа, добавляя в неё загрузочную запись. В этой записи указывается путь к файлу загрузчика (начиная от корня файловой системы) и при необходимости — параметры. После этого в загрузочном меню компьютера появляется опция загрузки ОС. Для linux существует возможность вообще обойтись без загрузчика. В загрузочной записи указывается путь сразу к ядру вместе со всеми параметрами. Ядро должно быть скомпилировано с опцией EFISTUB (что давно является стандартом для большинства дистрибутивов), в этом случае оно содержит в себе заголовок "исполняемого файла EFI", позволяющий прошивке его запускать без внешнего загрузчика.

При старте системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сперва ищет на прописанном в этой записи диске особый EFI-раздел, обращается к файловой системе на этом разделе (обязательно FAT или FAT32), и запускает загрузчик. Загрузчик считывает из файла настроек свой конфиг, и либо грузит ОС, либо предоставляет загрузочное меню. Ничего не замечаете? Да, у нас два загрузочных меню — одно на уровне прошивки чипа UEFI, другое — на уровне загрузчика. В реальности о существовании второго пользователи могут даже не догадываться — если в меню всего один пункт, загрузчик Windows начинает его грузить без лишних вопросов. Увидеть экран с этим меню можно, если поставить вторую копию Windows или просто криво её переустановить.

Обычно для управления загрузочными записями руководства в интернете предлагают взаимодействовать с прошивкой UEFI. Есть аж пять основных вариантов, как это можно сделать: efibootmgr под linux, bcdedit в windows, какая-то софтина на "Маках", команда bcfg утилиты uefi shell (запускается из-под UEFI, "на голом железе" и без ОС, поскольку скомпилирована в том самом особом формате) и для особо качественных прошивок — графическими средствами UEFI (говоря популярным языком, "в настройках BIOS").

За всеми вышенаписанными "многобуков" вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать flash-память микросхемы на плате. Есть ли тут подводные камни? О да! Windows иногда способна сделать из ноутбука кирпич, linux тоже, причём разными способами. Качество прошивок часто оставляет желать лучшего — стандарты UEFI либо реализованы криво, либо не реализованы вообще. По логике, прошивка обязана переживать полное удаление всех переменных efivars без последствий, не хранить в них критичных для себя данных и самостоятельно восстанавливать значения по-умолчанию — просто потому что пользователь имеет к ним доступ, и вероятность их полного удаления далека от нуля. Я лично в процессе экспериментов неоднократно (к счастью, обратимо) "кирпичил" свой Lenovo — из загрузочного меню исчезали все пункты, включая опцию "зайти в настройки".

Работа с загрузочными записями UEFI — тоже не сахар. К примеру, утилита efibootmgr не имеет опции "редактировать существующую запись". Если ты хочешь немного изменить параметр ядра — ты удаляешь запись целиком и добавляешь её снова, уже измененную. При этом строка содержит в себе двойные и одинарные кавычки, а также прямые и обратные слеши в не особо очевидном порядке. Когда я наконец заставил эту магию работать — я сохранил её в виде bash-скриптов, которые до сих пор валяются у меня в корневой ФС:

Не надо использовать GRUB

Это чёртов мастодонт, 90% функциональности которого предназначено для дисков с MBR. Для настройки необходимо отредактировать ряд файлов, после чего выполнить команду генерации конфига. На выходе получается огромная малопонятная нормальному человеку простыня. В составе — гора исполняемых файлов. Ставится командой, которую просто так из головы не возьмешь — надо обязательно лезть в документацию

Для сравнения — самый простенький UEFI-bootloader, который есть в составе пакета systemd, ставится командой

Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на EFI-раздел и добавляет свою загрузочную запись в прошивку. А конфиг для неё занимает ровно СЕМЬ строчек.

"Самое краткое руководство" — чуть более подробно

Загрузочная запись нам не нужна — дело в том, что при выставлении в настройках BIOS загрузки с диска прошивка UEFI сначала ищет на нём EFI-раздел, а затем пытается исполнить файл по строго фиксированному адресу на этом разделе: /EFI/Boot/BOOTX64.EFI

Что такое "EFI-раздел"? В теории, он должен иметь особый тип "EFI System" (ef00). На практике, годится первый раздел на GPT-диске, отформатированный в FAT32 и имеющий достаточно места, чтобы разместить загрузчик и вспомогательные файлы (если есть).

Пункт 3: "Скачиваем из интернета любой UEFI-загрузчик". Что это значит? Загрузчик — это просто исполняемый файл определенного формата, к которому в комплекте идет конфиг. К примеру, если у вас есть под рукой установленный пакет с systemd — файл загрузчика можно найти по адресу /usr/lib/systemd/boot/efi/systemd-bootx64.efi, переименовать его в bootx64.efi и скопировать в /EFI/Boot/ на EFI-разделе. Нет под рукой systemd? Скачайте архив с сайта Archlinux. Или с репозитария Ubuntu. Или Debian. Есть под рукой система с Windows? Возьмите виндовый загрузчик оттуда, тоже сгодится )) Если сумеете настроить, я честно говоря не пробовал.

Пункт 4: "Настроить конфиг". Как и обычная программа, когда загрузчик запускается — он ожидает найти по определенным путям файлы конфигурации. Обычно эту информацию легко найти в интернете. Для загрузчика systemd-boot нам необходимо в корне EFI-раздела создать каталог "loader", а в нём файл "loader.conf" с тремя строчками (привожу свои):

Параметр editor отвечает за возможность отредактировать пункт загрузочного меню перед запуском.

Рядом с loader.conf необходимо создать каталог entries — один файл в нём будет отвечать за одну загрузочную запись в boot-меню. У меня там один файл arch.conf с таким содержанием:

Я не упомянул, но довольно очевидно — ядро и initramfs должны лежать в одной файловой системе с загрузчиком, то есть на EFI-разделе. Пути к ним в конфигах отсчитываются от корня этой ФС.

Другие загрузчики

systemd-boot очень простой и предоставляет спартанского вида чёрно-белое меню. Есть варианты красивей, если душа просит красоты.

Clover. Позволяет выставлять нативное разрешение экрана, имеет поддержку мыши на экране загрузки, разные темы оформления. Дефолтная тема ужасна, конфиг в виде xml нечитаем, настроить не смог.

Различные неочевидные последствия

Вы можете легко попробовать эту схему в работе. Берёте USB-флешку, форматируете в таблицу разделов GPT, создаете FAT-раздел и копируете туда загрузчик. Комп сможет с неё стартовать.

Если просто скопировать на такую флешку boot-раздел установленного linux — система будет спокойно загружаться с флешки, не видя разницы.

Читайте также: