Как зайти в uefi linux

Обновлено: 05.07.2024

Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством 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 — система будет спокойно загружаться с флешки, не видя разницы.

Мы больше не нажимаем определенную клавишу во время процесса загрузки, чтобы открыть 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 и восстановил таким образом).

Перед тем, как начинает загружаться операционная система, специализированное программное обеспечение компьютера инициализирует все компоненты, проверяет их готовность к работе и только потом передает управление загрузчику ОС.

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

Установка Linux на Legasy BIOS

Это вариант для владельцев плат UEFI, которые не хотят разбираться в тонкостях использования этой технологии и согласны использовать свое устройство как раньше с BIOS. Большинство материнских плат позволяют эмулировать режим BIOS. В этом режиме вы можете установить Linux безо всяких проблем и дополнительных разделов, так как это делалось в BIOS.

Чтобы включить режим Legasy BIOS надо войти в настройки BIOS/UEFI с помощью кнопки F2, Del или Shift+F2 и найти там соответствующий пункт. Например, у меня этот пункт находится на вкладке Boot. Здесь нужно выбрать режим загрузки UEFI или Legasy.


После сохранения настроек вы можете устанавливать свою операционную систему как обычно. Если же вас такой вариант не устраивает, дальше мы рассмотрим как установить Linux именно на UEFI.

Установка Linux на платы с UEFI

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

Шаг 1. Запись Linux на флешку UEFI в Linux

Для записи образа на флешку в Linux лучше использовать утилиту Etcher. Программа запишет носитель, который можно загружать как в UEFI, так и в обычной системе. После запуска программы надо выбрать образ системы:

Затем карту памяти и дождаться завершения записи:

Также можно записать образ на флешку вручную. Это проще чем для обычного BIOS, хотя и потребует больше действий. Сначала отформатируйте ваш носитель в FAT32. Это можно сделать в стандартной утилите управления дисками Gnome:

Затем распакуйте содержимое установочного образа в корень флешки:

sudo mount /путь/к/образу.iso /mnt
sudo mount /dev/sdb1 /media/flash/
sudo cp -r /mnt/* /media/flash

Здесь /dev/sdb1 - имя раздела вашей флешки. Вы можете выполнить все эти действия в файловой менеджере. Не обязательно использовать команды. Далее нужно установить на раздел флешки, куда вы распаковали свои файлы два флага - boot и lba. Это можно сделать с помощью Gparted. Просто запустите программу, выберите в списке дисков свою флешку:

Нажмите правой кнопкой по разделу, выберите Управление флагами и установите галочки на против флагов boot и lba.

Каким бы способом вы не пользовались, ваша флешка готова и вы можете с нее загружаться. Большинство образов Linux уже содержат загрузчик EFI и прошивка компьютера его найдет при следующей перезагрузке.

Шаг 1 (альтернатива). Запись Linux на флешку UEFI в Windows

Если вы решили записать Linux в Windows, то лучше использовать утилиту Rufus. В ней необходимо выставить такие параметры:

  • Схема раздела и тип системного интерфейса: GPT для компьютеров с UEFI;
  • Файловая система: FAT32.

Все остальные параметры - по умолчанию. После завершения записи ваша флешка готова к использованию.

Шаг 2. Выбор порядка загрузки

Для того чтобы ваша система смогла загрузиться с только что записанной флешки нужно отключить UEFI Secure Boot. Этот режим позволяет загружаться только подписанным операционным системам, а подписанными являются только ОС от Microsoft. Поэтому для Linux этот режим надо отключать. У меня эта настройка тоже есть на вкладке Boot:


Кроме того, надо установить на первое место флешку:


После этого можно перезагружать компьютер и приступать к установке. Если у вас появилось вот такое окно, значит все хорошо. Здесь надо выбрать "Try Ubuntu without installing", это обязательное условие:

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

Шаг 3. Разметка диска для UEFI

У UEFI в этом плане есть несколько отличий от BIOS. Во первых, это использование таблицы разделов диска GPT. Это новая технология, которая имеет массу преимуществ над MBR, среди которых очень большое количество первичных разделов (в MBR только четыре), восстановление при повреждениях, и многое другое. Подробнее о том чем GPT отличается от MBR читайте в отдельной статье. Второе отличие в том, что файлы загрузчика операционной системы больше не хранятся в первых 512 байтах жесткого диска. Все они хранятся на отдельном разделе, который называется ESP.

Перед тем, как нажать "Install Ubuntu" желательно подготовить диск с помощью Gparted. Откройте утилиту из главного меню образа. Затем выберите Device -> Create Partition Table:


В списке выберите таблицу разделов GPT:


Дальше переходим к созданию разделов.

Шаг 4. Создание раздела ESP

В Gparted нам необходимо создать только раздел ESP для UEFI. Для этого выберите "Незамеченно", а затем нажмите по нему правой кнопкой и выберите "New":


В качестве файловой системы для раздела надо выбрать FAT32, размер - 100 мегабайт. Далее нажмите кнопку "Apply" для применения изменений.

Затем нажмите "Manage Flags" и установите галочки напротив флагов "boot" и "efi".


Далее переходим к установщику Ubuntu.

Шаг 5. Вариант разметки дисков

Когда система предложит выбрать способ разметки можно позволить системе все разметить автоматически. Но это только в том случае, если вы у вас уже не установлена какая-либо операционная система. Иначе выбираем "Свой вариант":


Шаг 6. Назначение разделов

Если вы выбрали другой вариант разметки, то перед вами откроется меню со списком всех разделов. Найдите внизу окна "Устройство для установки загрузчика" и выберите в списке раздел для EFI.


Затем кликните по разделу для EFI в списке и выберите "Системный раздел EFI":


Далее можно продолжить установку как обычно. Вам надо создать корневой раздел, и по желанию вы можете создать раздел для загрузчика, подкачки и домашний раздел. Подробнее про установку Ubuntu 18.04 вы можете прочитать по ссылке.

Шаг 7. Завершение установки

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


Но давайте еще рассмотрим управление пунктами меню и загрузчиками EFI.

Управление загрузчиком UEFI с помощью eifbootmgr

Когда система загрузится вы можете отобразить настройки UEFI по умолчанию выполнив команду:


Рассмотрим подробнее что означает каждый из параметров:

  • BootCurrent - загрузчик, который был использован для запуска этой операционной системы;
  • BootOrder - порядок загрузчиков, в котором менеджер загрузки будет их перебирать во время старта системы. Если первый загрузчик не сработал, то будет использован второй и так далее;
  • BootNext - загрузчик, который будет запущен при следующей загрузке;
  • Timeout - таймаут на протяжении которого будет показываться меню выбора загрузчика, перед тем, как он будет выбран автоматически;
  • Пункты 0000 - 0004 - загрузчики которые можно использовать.

Вы можете изменить порядок загрузки с помощью опции -o, например, сделаем так чтобы первым загружалась ОС из оптического диска:

sudo efibootmgr -o 0,1,2,3

И вернем обратно на первое место Ubuntu:

sudo efibootmgr -o 3,0,1,2


Можно изменить таймаут, чтобы отображалось меню выбора системы:

sudo efibootmgr -t 20


Здесь мы установили таймаут в 20 секунд.

Выводы

В этой статье мы рассмотрели как установить Linux на UEFI, а также как управлять порядком загрузки в установленной системе. Теперь, если у вас возникнет желание установить эту операционную систему на свой новый ноутбук с EFI, то вы уже знаете как это сделать. Если у вас остались вопросы, спрашивайте в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

31 окт 2019, 15:14

Доброго времени суток! Я столкнулся с проблем (накосячил, вероятнее всего, в настройках биоса) и теперь у меня не активна клавиатура при запуске ос, как во время логотипа, так и во время загрузчика граб. Из-за этого есть очевидные проблемы. Поскольку клавиатура не запускается, то и в биос зайти нельзя, так и в грабе другую опцию не выбрать.
Вопрос, собственно, в том, можно ли как-то включить запуск клавиатуры при старте системы или зайти в биос не через ф2, а через лиункс систему?

31 окт 2019, 15:18

Что за комп , сталкивался как то , чтоб войти в биос нужно было нажимать Fn+функциональную клавишу.

31 окт 2019, 15:53

Клава усб? Обычный писи? Вырубил нафик усб? Сброс биоса тебе поможет..

А вообще какой вопрос, такой и ответ.

31 окт 2019, 15:56


А может ноут . У меня сейчас вход в биос нажатием спичкой кнопочки возле разьёма питания))

31 окт 2019, 18:06

На современных системах с UEFI можно через GRUB зайти, там в меню соответствующий пунктик появляется.
Но хорошо бы информацию о системе сначала увидеть.

01 ноя 2019, 15:40

Я не специалист, но на накоторых матерях usb-клава на стадии загрузки биоса активна только если воткнута в верхних двух usb разъемах на материнской, сталкивался на p5kc матерях старых, лично из опыта

01 ноя 2019, 19:33

Да. попадалово. а я бы BIOS переустановил "с нуля". Скорее найдёшь здесь: www.driver.ru укажешь свою железяку, скачаешь. могут возникнуть проблемы при установке (я бы это прошивкой назвал): тут у кого как: у некоторых отключить лишнее, у других - наоборот добавить (отдельно докачивать). А вообще. "вход в BIOS через терминал. " Это как? Дурь какая-то. я 20 лет компами занимаюсь, BIOS - это то, что запускается на материнке ДО запуска любой ОС, Bios просто определяет систему, определяет диски, передаёт управление на загрузочный диск. Как-то так. Али точнее опиши проблему.

01 ноя 2019, 19:36

А вообще. "вход в BIOS через терминал. " Это как? Дурь какая-то.

01 ноя 2019, 19:50

А вы в курсе что BIOS на ПК уже лет как 8, а то и больше нет, а есть UEFI. А на серваках так и того больше, и пришел он на ПК с серваков.

Изображение

01 ноя 2019, 19:59

А вообще. "вход в BIOS через терминал. " Это как? Дурь какая-то.

Если вам интересно узнать как загружается Linux, то эта статья для вас. Рассмотрим алгоритм загрузки Linux на компьютерах с BIOS и UEFI.

Алгоритм загрузки linux (BIOS)

BIOS расшифровывается как Basic Input/Output System, что в переводе – Базовая Система Ввода/Вывода. Это специальная микросхема, которая находится на материнской плате компьютера.

Чип BIOS

Когда компьютер только включается, то выполняется код из микросхемы BIOS. Вначале этот код выполняет тестирование системы POST (power-on self test), этим тестированием проверяется аппаратная часть системы. А затем из всех дисков определяется загрузочный.

BIOS умеет работать только с дисками размеченными MBR способом. На первом секторе такого диска находится так называемый MBR (master boot record). Сектор диска имеет размер 512 байт. В эти 512 байт помещается маленький загрузчик и таблица разделов. Кстати, если диск не загрузочный, то вместо загрузчика там может находится код, который сообщает, что это не загрузочный диск (No bootable device).

Так вот, BIOS передает управление маленькому загрузчику из MBR на загрузочном диске.

BIOS - MBR

Загрузчик MBR и GRUB 2

Код загрузчика из MBR очень маленький и он способен лишь найти и запустить следующий загрузчик.

Следующий загрузчик больше и умнее. Бывают разные загрузчики для Linux, но самым популярным является GRUB 2. Он позволяет пользователю выбрать операционную систему для загрузки. А также умеет загружать операционные системы с логических разделов. GRUB 2 расположен на разделе жесткого диска в каталоге /boot и обычно для этого каталога выделяют отдельный раздел – boot.

MBR - /boot

Давайте посмотрим что находится в этом каталоге на Debian 10:

Ubuntu 20.04 в этом каталоге содержит примерно тоже самое, но ядро новее:

Разберем некоторые файлы в этом каталоге. Здесь находится:

  • подкаталог с загрузчиком – grub;
  • ядра разных версий – файлы vmlinuz;
  • архивы с временной файловой системой и утилитами необходимыми для загрузки ядра – файлы initrd.img;
  • остальные файлы я рассматривать пока не буду.

После того, как GRUB 2 получил управление, он загружает ядро Linux (файл vmlinuz). При этом GRUB 2 загружает в память файловую систему из файла initrd.img. А затем запускает ядро, и при запуске, передаёт ему некие параметры, которые мы рассмотрим в следующей статье.

Вы можете спросить, зачем вообще нужен образ корневой файловой системы с утилитами initrd.img? Он необходим, так как, когда GRUB 2 начинает загружать систему корневая файловая система Linux еще не смонтирована. Поэтому GRUB 2 использует initrd файл для запуска ядра.

Initrd – представляет собой файл, содержащий загружаемые модули ядра и минимальный набор утилит для загрузки этих модулей. Он сжимается и загружается в оперативную память с помощью загрузчика. Ядро получает доступ к нему, как если бы была установлена файловая система.

Вы можете использовать команду lsinitramfs чтобы перечислить содержимое файла initrd.img.

Вот пример для Debian 10:

А вот пример для Ubuntu 20.04:

Ядро Linux и процесс инициализации

Ядро при запуске использует временную файловую систему из файла initrd.img для того чтобы загрузиться полностью.

А дальше ядро запускает процесс инициализации операционной системы. Процесс инициализации является первым процессом в системе, так как ядро запускалось не как процесс. Каким именно будет процесс инициализации зависит от используемой системы инициализации. Существуют разные системы инициализации, но в Debian 10 и Ubuntu 20.04 используется система под названием SystemD.

То есть, первым процессом при запуске этих двух систем является systemd. Чтобы это проверить выполним следующие две команды, которые на обоих системах выполняются одинаково:

Первой командой мы смотрим название процесса под номером 1 (systemd). А второй командой смотрим на что ссылается файл, который традиционно считается файлом системы инициализации (/lib/systemd/systemd).

И наконец система инициализации запускает все остальные процессы в системе.

Итог по загрузке с BIOS

Алгоритм загрузки Linux используя BIOS

Алгоритм загрузки linux (UEFI)

Сейчас на смену BIOS пришёл UEFI (Unified Extensible Firmware Interface). UEFI содержит множество преимуществ перед BIOS, одна из которых это поддержка GPT.

Раньше диски разбивались на разделы с помощью MBR, при этом диск не мог быть больше 2 TB, а разделов не могло быть больше четырёх. При этом таблица разделов и первичный загрузчик помещались на первый сектор диска в MBR. А GPT позволяет использовать очень большие диски и помещает загрузчик на специальный раздел, а также позволяет создавать очень много разделов.

Диск разбитый на разделы с помощью таблицы разделов GPT в первом секторе продолжает хранить MBR запись. Это делается для того, чтобы старые системы с BIOS могли использовать GPT диски.

UEFI не использует загрузчик из MBR, вместо этого используется загрузчик со специального раздела на диске, который отформатирован в FAT32 и называется ESP или EFI. Это специальный загрузчик от UEFI. Обычно это файл /efi/boot/bootx64.efi.

UEFI - /efi/bootx64.efi

Secure Boot

UEFI имеет специальный режим, который называется Secure Boot. Если этот режим включен, то загрузчик без специальной подписи не будет работать. Windows и некоторые системы Linux имеют такие подписи, а для других систем приходится этот режим отключать.

Или можно не отключать Secure Boot, а просто очистить ключи производителя и добавить туда ключи от необходимого загрузчика. Например в Ubuntu – GRUB 2 подписан подписью от Canonical, именно эту подпись и следует добавить в Secure Boot.

Дальнейшая загрузка

А дальше все происходит также как и в системах с BIOS. Загрузчик запускает GRUB 2, хотя может сразу запустить и ядро Linux, но тогда мы теряем гибкость GRUB 2.

GRUB 2 в свою очередь запускает ядро Linux. Дальше ядро запускает систему инициализации. А уже система инициализации запускает все остальные процессы в системе.

Итог по загрузке с UEFI

Алгоритм загрузки Linux используя UEFI

Немного про GRUB 2

GRUB 2 в настоящее время является основным загрузчиком для большинства систем Linux. Он позволяет запустить не только ядро Linux, но и Windows систему. Он имеет собственную командную строку с помощью которой можно, например устранить некоторые ошибки при загрузки.

Существует две версии загрузчика GRUB 2: для BIOS и для UEFI. Но для UEFI он не имеет цифровой подписи для режима Secure Boot.

Ubuntu, кстати, поддерживает Secure Boot. Для этого используется загрузчик Shim подписанный подписью от Microsoft. И этот загрузчик запускает GRUB 2, который подписан цифровой подписью от Canonical.

Взаимодействуя с GRUB 2 при старте системы вы можете выбрать, какую из возможных конфигураций загрузить или изменить:

Меню Grub 2

Когда отображается меню, вы можете нажать:

  • «Enter» — чтобы немедленно загрузить выбранную строку меню;
  • любую другую клавишу — чтобы остановить тайм-аут;
  • «e» — чтобы отредактировать запись;
  • «c» — чтобы войти в командную строку GRUB2.

Если ваш тайм-аут установлен на 0, то GRUB 2 немедленно загружает систему не показывая подобное меню.

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