Uefi shell как запустить linux

Обновлено: 05.07.2024

systemd-boot, ранее известный как gummiboot - это простой UEFI менеджер загрузки, который исполняет настроенные EFI образы. Запись по умолчанию выбирается с помощью настроенного шаблона (glob) или меню на экране. Включен в пакет systemd , который устанавливается на системе Arch по умолчанию.

Прост в настройке, но способен только на запуск исполняемых EFI файлов, таких как ядро Linux EFISTUB, UEFI Shell, GRUB, Windows Boot Manager.

Contents

Установка

Загрузка в режиме EFI

  1. Убедитесь, что вы загружены в режиме UEFI.
  2. Проверьте доступны ли EFI переменные.
  3. Корректно примонтируйте Системный Раздел EFI (ESP). В этой статье esp используется для обозначения точки монтирования.

Загрузка в режиме BIOS

Важно: Это нерекомендованный процесс

Вы с таким же успехом можете установить systemd-boot, если загружаетесь в режиме BIOS. Тем не менее, от вас всё равно требуется сообщить прошивке запускать EFI файл systemd-boot при загрузке:

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

Если вы имеете такую возможность, процесс установки будет проще: перейдите в ваш EFI shell или интерфейс настройки вашей прошивки и измените EFI файл по умолчанию вашей машины на esp/EFI/systemd/systemd-bootx64.efi ( или systemd-bootia32.efi если у вас 32 битная системная прошивка).

Примечание: интерфейс прошивки в Dell Latitude сериях предоставляет все необходимое, чтобы установить EFI загрузку, но EFI Shell не сможет осуществить запись в ПЗУ компьютера.

Обновлениe

В отличие от предыдущего отдельного пакета gummiboot, который автоматически обновляется с помощью post_install скрипта, обновления systemd-boot теперь должны производиться пользователем вручную. Однако, эта процедура может быть автоматизирована с использованием pacman hooks.

Вручную

systemd-boot (bootctl(1)) предполагает, что ваш Системный Раздел EFI примонтирован в /boot .

Если ESP не примонтирован в /boot , опцией --path= можно явно указать точку монтирования, например:

Примечание: Также эту команду следует использовать при переходе с gummiboot, перед удалением этого пакета. Однако, если этот пакет уже был удален, выполните bootctl --path=esp install .

Автоматически

AUR (Русский) пакет systemd-boot-pacman-hook AUR предоставляет хук Pacman для автоматизации процесса обновления. Установка этого пакета добавит hook, который будет выполняться при каждом обновлении пакета systemd .

В качестве альтернативы, вы можете разместить следующий pacman hook в каталоге /etc/pacman.d/hooks/:

Настройка

Базовая настройка

Базовая конфигурация хранится в файле esp/loader/loader.conf и состоит из трех опций:

  • default – выбираемая по умолчанию запись (без суффикса .conf ); можно использовать подстановку, например arch-*
  • timeout – задержка меню в секундах. Если таймаут не задан, то меню будет отображаться, только если удерживать клавишу Space (другие клавиши тоже могут работать) при загрузке.
  • editor - следует ли включить редактор параметров ядра. 1 (по умолчанию) - включить, 0 - отключить; Поскольку пользователь может добавить init=/bin/bash для обхода пароля администратора и получить полный доступ, настоятельно рекомендуется установить эту опцию в 0 .
Примечание: Обратите внимание, что первые 2 опции могут быть изменены в самом меню загрузки, эти изменения будут храниться как переменные EFI. Совет: Пример базового конфигурационного файла расположен как /usr/share/systemd/bootctl/loader.conf .

Добавление загрузочных записей

  • bootctl будет автоматически проверять наличие "Windows Boot Manager" ( \EFI\Microsoft\Boot\Bootmgfw.efi ), "EFI Shell" ( \shellx64.efi ) и "EFI Default Loader" ( \EFI\Boot\bootx64.efi ) во время загрузки, так же как специально подготовленные файлы ядра, найденные в \EFI\Linux . После обнаружения соответствующие записи с заголовками auto-windows , auto-efi-shell и auto-efi-default будут автоматически сгенерированы. Эти записи не требуют ручной настройки загрузчика. Однако, другие EFI приложения не будут обнаружены автоматически (не в случае с rEFInd (Русский)), поэтому для зарузки ядра Linux, записи должны быть созданы вручную.
  • Если вы используете двойную загрузку с Windows, настоятельно рекомендуется отключить Быстрый запуск [ссылка недействительна: раздел не найден]
  • Не забудте загрузить intel microcode с initrd если это применимо в вашем случае.
  • Вы можете узнать PARTUUID вашего корневого раздела с помощью команды blkid -s PARTUUID -o value /dev/sdxY , где x - это буква устройства, а Y - это номер раздела. Это нужно только для вашего корневого раздела, не для esp .

bootctl ищет элементы для загрузочного меню в esp/loader/entries/*.conf – каждый найденный файл должен содержать точно одну загрузочную запись. Возможными опциями являются:

  • title – название операционной системы. Обязательная.
  • version – версия ядра, отображаемая только если существуют несколько записей с одинаковым названием. Не обязательная.
  • machine-id – идентификатор машины из /etc/machine-id , отображаемый только если существуют несколько записей с одинаковым названием и одинаковой версией. Не обязательная.
  • efi – EFI программа для запуска, относительно вашего ESP ( $esp ); например, /vmlinuz-linux . Либо это, либо linux (смотрите ниже) является обязательным.
  • options – опции командной строки для передачи EFI приложению. Не обязательная, но вам нужно будет передать как минимум initrd=efipath и root=dev если загружаете Linux.

Для Linux вы можете задать linux path-to-vmlinuz и initrd path-to-initramfs ; это автоматически преобразуется в efi path и options initrd=path – этот синтаксис поддерживается только для удобства и не имеет различий по функциональности.

Установки со стандартной корневой директорией

Вот пример записи для корневого раздела без LVM или LUKS:

Пожалуйста, обратите внимание, что в вышеприведённом примере PARTUUID / PARTLABEL идентифицируют GPT раздел, а это не то же самое, что UUID / LABEL , которые идентифицируют файловую систему. Использование PARTUUID / PARTLABEL бывает полезным, потому что они инвариантны (то есть неизменяемы), если вы переформатируете раздел в другую файловую систему или если по какой-то причине изменятся обозначения /dev/sd*. Также оно может быть полезно, если у вас нет файловой системы на разделе (или вы используете LUKS, который не поддерживает метки LABEL ).

Совет: Пример файла записи расположен как /usr/share/systemd/bootctl .

Установки с LVM корневой директорией

Важно: systemd-boot не может использоваться без отдельной файловой системы /boot вне LVM.

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

Замените <VolumeGroup-LogicalVolume> на актуальные названия VG и LV (например, root=/dev/mapper/volgroup00-lvolroot ). Кроме того, вместо них можно использовать UUID:

Обратите внимание, что root=UUID= используется вместо root=PARTUUID= , который используется для корневых разделов без LVM или LUKS.

Установки с зашифрованной корневой директорией

Ниже приведен пример конфигурационного файла для зашифрованного корневого раздела (DM-Crypt / LUKS) с использованием encrypt mkinitcpio (Русский) hook:

Если вы используете LVM, ваша опция cryptdevice будет выглядеть следующим образом:

Вы также можете добавить другие EFI приложения, такие как \EFI\arch\grub.efi .

Установка корневого подраздела btrfs

При загрузке с подраздела Btrfs (Русский) в роли корневого, добавьте к строке options rootflags=subvol=<root subvolume> . В примере ниже, корневой раздел монтируется как btrfs подраздел с именем 'ROOT' (например, mount -o subvol=ROOT /dev/sdxY /mnt ):

Если это невозможно сделать, то это приведет к ошибке: ERROR: Root device mounted successfully, but /sbin/init does not exist.

Установки с ZFS корневой директорией

В случае загрузки из ZFS dataset, добавьте zfs=<root dataset> к строке options . Здесь в корневом dataset установлено значение 'zroot/ROOT/default':

When booting off of a ZFS dataset ensure that it has had the bootfs property set with zpool set bootfs=<root dataset> <zpool> .

EFI Shells или другие EFI приложения

В случае, если вы установили EFI Shells или другие EFI приложения в ESP, вы можете использовать следующие фрагменты:

Поддержка гибернации

Редактор параметров ядра с защитой паролем

В качестве альтернативы можете установить systemd-boot-password AUR который поддерживает password опцию базовой конфигурации. Используйте sbpctl generate для генерации значения для этой опции.

Установка systemd-boot-password следующей командой:

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

Клавиши в загрузочном меню

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

  • Вверх/Вниз - выбор записи
  • Enter - загрузить выбранную запись
  • d - выбрать загрузочную запись по умолчанию (хранится в энергонезависимой EFI переменной)
  • -/T - уменьшить таймаут (хранится в энергонезависимой EFI переменной)
  • +/t - увеличить таймаут (хранится в энергонезависимой EFI переменной)
  • e - редактировать командную строку ядра. Не имеет эффекта, если опция конфигурации editor установлена в 0 .
  • v - показать версию gummiboot и UEFI
  • Q - выйти
  • P - отобразить текущую конфигурацию
  • h/? - помощь

А эти клавиши, нажатые в меню в процессе загрузки, сразу загрузят определённую запись:

  • l - Linux
  • w - Windows
  • a - OS X
  • s - EFI Shell
  • 1-9 - порядковый номер записи

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

Создание записи вручную с помощью efibootmgr

Если команда bootctl install не сработала, вы можете создать загрузочную EFI запись самостоятельно с помощью утилиты efibootmgr :

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

Каждый раз, когда вы включаете свой компьютер с Linux, он проходит ряд этапов, прежде чем, наконец, отобразится экран входа в систему, который запрашивает ваше имя пользователя или пароль. Существует 4 различных этапа, которые каждый дистрибутив Linux проходит в типичном процессе загрузки.

В этом руководстве мы выделим различные шаги, предпринятые ОС Linux с момента включения до момента входа в систему. Обратите внимание, что это руководство сфокусировано на загрузчике GRUB2 и systemd init, поскольку они используются в настоящее время подавляющим большинством современных дистрибутивов Linux. Но существуют и другие загрузчики, например, дистрибутивы на основе Arch Linux используют systemd-boot.


Процесс загрузки состоит из следующих 4 шагов, которые мы обсудим более подробно:

  1. Инициализация системы: UEFI или BIOS (POST)
  2. Запуск загрузчика (GRUB2 или systemd-boot)
  3. Инициализация ядра
  4. Запуск systemd, родителя всех процессов

1. Инициализация системы: UEFI или BIOS

Инициализация системы под UEFI

  1. Система включена, выполняется самотестирование при включении (POST).
  2. После POST UEFI инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
  3. Прошивка считывает загрузочные записи в NVRAM, чтобы определить, какое приложение EFI запускать и откуда (например, с какого диска и раздела).
  • Загрузочной записью может быть просто диск. В этом случае микропрограмма ищет системный раздел EFI на этом диске и пытается найти приложение EFI в резервном загрузочном пути \EFI\BOOT\BOOTX64.EFI (BOOTIA32.EFI в системах с IA32 (32-разрядным) UEFI). Так работают загрузочные съёмные носители UEFI.
  1. Прошивка запускает приложение EFI.
  • Это может быть загрузчик или само ядро Arch, использующее EFISTUB.
  • Это может быть какое-то другое приложение EFI, такое как оболочка UEFI, или менеджер загрузки, например systemd-boot или rEFInd.

Если включена безопасная загрузка, процесс загрузки будет проверять подлинность двоичного файла EFI по подписи.

Инициализация системы под BIOS

  1. Система включена, выполняется самотестирование при включении (POST).
  2. После POST BIOS инициализирует оборудование, необходимое для загрузки (диск, контроллеры клавиатуры и т. д.).
  3. BIOS запускает первые 440 байтов (область кода начальной загрузки основной загрузочной записи) первого диска в порядке дисков BIOS.
  4. Затем первый этап загрузчика в загрузочном коде MBR запускает свой второй этап (если есть) из одного из следующих источников:
  • следующие секторы диска после MBR, то есть так называемый промежуток после MBR (только в таблице разделов MBR).
  • загрузочная запись тома раздела или диска без разделов (VBR).
  • загрузочный раздел BIOS (только GRUB в BIOS/GPT).
  1. Запускается фактический загрузчик.
  2. Затем загрузчик загружает операционную систему путём последовательной или прямой загрузки ядра операционной системы.

Проверка целостности BIOS (POST)

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

Когда система Linux включается, включается BIOS (базовая система ввода-вывода) и выполняет самотестирование при включении (POST). Это проверка целостности, которая выполняет множество диагностических проверок.

В некоторых случаях раздаётся звуковой сигнал, особенно в случае отсутствия модуля RAM. Однако, если ожидаемое оборудование присутствует и функционирует должным образом, процесс загрузки переходит к следующему этапу.

2. Загрузчик (GRUB2 или systemd-boot)


Если компьютер запускает UEFI, то обычно она запускает приложение EFI, обычно располагающееся по пути \EFI\BOOT\BOOTX64.EFI (/boot/EFI/BOOT/BOOTX64.EFI) на загрузочном диске.

Если это BIOS, то после завершения POST, BIOS проверяет MBR (главную загрузочную запись) на предмет загрузчика и информации о разделах диска.

MBR — это 512-байтовый код, расположенный в первом секторе жёсткого диска, обычно это /dev/sda или /dev/hda, в зависимости от архитектуры вашего жёсткого диска. Обратите внимание, однако, что иногда MBR может находиться на Live USB или DVD-диске Linux.

В Linux существует 2 основных типа загрузчиков: GRUB2 и systemd-boot. Загрузчик GRUB2 — распространён в дистрибутивах на основе Debian. Загрузчик systemd-boot применяется в Arch Linux и основанных на этой ОС дистрибутивах.

Загрузчик GRUB2


GRUB2 означает GRand Unified Bootloader version 2. Как только BIOS обнаруживает загрузчик grub2, он запускается и загружает его в основную память (RAM).

Современный GRUB2 может работать и с UEFI (с помощью efibootmgr). В Arch Linux поддержка BIOS и UEFI собрана в один пакет grub. В Debian и производных дистрибутивах GRUB представлен двумя версиями:

Меню grub2 позволяет вам делать несколько вещей. Оно позволяет вам выбрать версию ядра Linux, которую вы хотите использовать. Если вы несколько раз обновляли свою систему, вы можете увидеть в списке разные версии ядра. Кроме того, он даёт вам возможность редактировать некоторые параметры ядра, нажимая комбинацию клавиш клавиатуры.

Кроме того, в настройке с двойной загрузкой, когда у вас есть несколько установок ОС, меню grub позволяет вам выбрать, в какую ОС загружаться. Файл конфигурации grub2 — это файл /boot/grub2/grub2.cfg. Основная цель GRUB — загрузить ядро Linux в основную память.

Загрузчик systemd-boot

systemd-boot (сокращенно sd-boot) — простой менеджер загрузки UEFI. Он предоставляет графическое меню для выбора записи для загрузки и редактор командной строки ядра. Systemd-boot поддерживает системы только с прошивкой UEFI.

systemd-boot загружает информацию о загрузочной записи из системного раздела EFI (ESP), обычно монтируемого в /efi/, /boot/ или /boot/efi/ во время запуска ОС, а также из расширенного раздел загрузчика, если он существует (обычно монтируется в /boot/). Фрагменты файла конфигурации, ядра, initrds и другие образы EFI для загрузки обычно должны находиться на ESP или разделе расширенного загрузчика. Ядра Linux должны быть собраны с CONFIG_EFI_STUB, чтобы их можно было напрямую запускать как образ EFI. Во время загрузки systemd-boot автоматически собирает список загрузочных записей из следующих источников:

  • Загрузочные записи, определённые с помощью файлов описания спецификации загрузчика, расположенных в /loader/entries/ на ESP и в разделе расширенного загрузчика. Обычно они описывают образы ядра Linux со связанными образами initrd, но также могут описывать произвольные другие исполняемые файлы EFI.
  • Унифицированные образы ядра в соответствии со спецификацией загрузчика в виде исполняемых двоичных файлов EFI в /EFI/Linux/ на ESP и в разделе расширенного загрузчика.
  • Диспетчер загрузки Microsoft Windows EFI, если он установлен.
  • Диспетчер загрузки Apple MacOS X, если он установлен.
  • Бинарный файл EFI Shell, если он установлен
  • Перезагрузка в опцию настройки прошивки UEFI, если она поддерживается.

systemd-boot поддерживает следующие функции:

3. Инициализация ядра

Ядро — это основа любой системы Linux. Он связывает оборудование ПК с базовыми процессами. Ядро контролирует все процессы в вашей системе Linux. После того как выбранное ядро Linux загружено загрузчиком, оно должно самораспаковаться из сжатой версии перед выполнением любой задачи. После самораспаковывания выбранное ядро монтирует корневую файловую систему и инициализирует программу /sbin/init, обычно называемую init.


Init всегда запускается первой программой, и ей назначается ID процесса или PID 1. Это процесс init, который порождает различных демонов и монтирует все разделы файловых систем, указанные в файле /etc/fstab.

Затем ядро монтирует начальный RAM-диск (initrd), который является временной корневой файловой системой, пока не будет смонтирована настоящая корневая файловая система. Все ядра находятся в каталоге /boot вместе с начальным образом RAM-диска.

4. запуск Systemd

Наконец, ядро загружает Systemd, заменяющий старый SysV init. Systemd является матерью всех процессов Linux и управляет, среди прочего, монтированием файловых систем, запуском и остановкой служб, и это лишь некоторые из её функций.

Systemd использует файл /usr/lib/systemd/system/default.target для определения состояния или цели, в которую должна загружаться система Linux.

  • Для настольной рабочей станции (с графическим интерфейсом пользователя) целевое значение по умолчанию graphical.target.
  • Для сервера целью по умолчанию является multi-user.target.

Вот виды целей systemd:

  • poweroff.target: выключение системы.
  • rescue.target: запускает сеанс спасательной оболочки.
  • multi-user.target: настраивает систему на неграфическую (консольную) многопользовательскую систему.
  • graphical.target: настройка системы на использование графического многопользовательского интерфейса с сетевыми службами.
  • reboot.target: перезагружает систему.

Чтобы проверить текущую цель в вашей системе, выполните команду:


Вы можете переключаться с одной цели на другую, выполнив на терминале следующую команду:

Эта команда переводит систему в неграфическое состояние (после перезагрузки).

А эта команда возвращает в загрузку в графический интерфейс:

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


В течение нескольких лет от глаз большинства обычных пользователей была скрыта новая технология прошивки. Она, известная как технология Extensible Firmware Interface (EFI), или в последнее время, как технология Unified EFI (UEFI, которая является по существу версией EFI 2.x), начала заменять старый вариант прошивки Basic Input/Output System (BIOS), с которой немного знакомы, по крайней мере, наиболее опытные Интернет-пользователи.

Эта статья представляет собой краткое введение в технологию EFI для пользователей Linux, в том числе в ней даются советы о том, как начать установку системы Linux на такой компьютер. К сожалению, тема EFI является обширной; само программное обеспечение EFI является сложным, а во многих реализациях есть специфические для конкретной системы особенности и даже ошибки. Таким образом, в этой статье я не смогу описать все, что вам нужно знать для того, чтобы установить и использовать Linux на компьютере с EFI. Тем не менее, я надеюсь на то, что вы будет считать эту статью полезной отправной точкой, а ссылки внутри каждого раздела и раздела «Ссылки и дополнительная информация», расположенного в конце статьи, укажут вам, где найти дополнительную документацию.

В вашем компьютере используется EFI?

EFI является одним из видов прошивки, что означает, что это такое программное обеспечение, которое встроено в компьютер для выполнения низкоуровневых задач. Самое важное, что прошивка контролирует процесс загрузки компьютера, а это в свою очередь означает, что компьютеры, использующие EFI, загружаются не так, как это происходит в компьютерах, использующих BIOS. Немного ниже будет приведено частное исключение из этого правила. Это различие может значительно усложнить создание инсталляционного носителя с ОС, но как только все будет настроено и заработает, оно будет мало влиять на каждодневную работу компьютера. Обратите внимание, что большинство производителей для обозначения своих вариантов прошивок EFI используют термин «BIOS». Я считаю, что такое использование терминов ведет к заблуждению, так что я избегаю этого; на мой взгляд, EFI и BIOS являются двумя различными типами прошивок.

Примечание: Прошивка EFI, которую фирма Apple использует на компьютерах Mac, необычна во многих отношениях. Хотя большая часть рассуждений, излагаемых в данной статье, применима к компьютерам Mac, некоторые детали отличаются, особенно когда речь идет о создании загрузчиков EFI. Эту задачу лучше всего выполнить в OS X с помощью утилиты bless, которая есть на компьютерах Mac, но в данной статье не описывается.

Сразу как только компьютеры Mac, созданные на базе Intel, были впервые выпущены в 2006 году, на них была использована прошивка EFI. С конца 2012 года большинство компьютеров, которые поставляются с Windows 8 или более поздней версией, загружаются по умолчанию с использованием UEFI, и, на самом деле, в большинстве компьютеров, выпущенных с середины 2011 года, используется прошивка UEFI, хотя по умолчанию они могут не загружаться в режиме EFI. В некоторых компьютерах, продававшихся до 2011 года, также поддерживается прошивка EFI, хотя большинство таких компьютеров по умолчанию загружаются в режиме BIOS.

Если вы не уверены в том, есть ли в вашем компьютере поддержка EFI, вам следует посмотреть вашу утилиту работы с прошивкой setup и поискать, есть ли в руководстве пользователя ссылки на EFI, UEFI или legacy booting (старый вариант загрузки). Это можно быстро сделать при помощи поиска в файле PDF вашего руководства. Если вы не найдете ни одной такой ссылки, то ваш компьютер, вероятно, использует старый вариант BIOS («legacy BIOS»), но если вы найдете ссылки на эти термины, то определенно используется режим EFI. Вы также можете попробовать загрузиться с загрузочного носителя, на котором находится только загрузчик режима EFI. Для этого теста хорошим выбором будет образ для флешки USB или CD-R с загрузчиком rEFInd.

Следует упомянуть еще об одной дополнительной функции UEFI: режиме Secure Boot. Эта функция предназначена для минимизации риска заражения компьютера вирусами вида boot kit, которые являются одним из видов вредоносного ПО, заражающего загрузчик компьютера. В частности, эти вирусы обнаруживать и удалять особенно трудно, что делает более приоритетным их блокирование. Фирма Microsoft требует, чтобы все настольные и портативные компьютеры, на которых есть логотип Windows 8, поставлялись с включенным режимом Secure Boot. Такой вариант конфигурации усложняет установку Linux, хотя в некоторых дистрибутивах справляются с этой проблемой лучше, чем в других. Впрочем, не бойтесь режима Secure Boot в EFI или в UEFI, возможно, что в компьютере с EFI режим Secure Boot не поддерживается и даже на тех компьютерах x86-64 с EFI, на которых режим Secure Boot поддерживается, его можно отключить. Фирма Microsoft требует это для сертификации Windows 8; но это требование отменено для компьютеров ARM — для таких компьютеров, которые поставляются с Windows 8, пользователям не разрешается отключать режим Secure Boot. К счастью, в настоящее время компьютеры на основе ARM с операционной системой Windows 8 достаточно редки. Я не рекомендую ими пользоваться.

В вашем дистрибутиве поддерживается EFI?

На момент написания статьи (в конце 2013 года), в большинстве дистрибутивов Linux поддерживается режим EFI; на самом деле, большинство из них поддерживают его в течение многих лет. Но в различных дистрибутивах качество этой поддержки различно. Что касается имен нескольких популярных дистрибутивов, то по моим оценкам, качество поддержки EFI является лучшим в Fedora и падает в OpenSUSE, Ubuntu и Mint. Некоторые дистрибутивы, более близкие по принципам к технологии «сделай сам», такие как, Gentoo, официально не поддерживают EFI, но их особенности позволяют легко добавлять поддержку EFI. На самом деле, поддержку EFI можно добавить в любой дистрибутив: вам нужно его установить (даже в режиме BIOS), а затем установить на компьютере загрузчик EFI.

Чтобы определить, поддерживается ли в вашем дистрибутиве прошивка EFI, вам следует просмотреть список его возможностей. Также вам следует обратить внимание на поддержку в вашем дистрибутиве режима Secure Boot, особенно если вы намерены использовать двойную загрузку с Windows 8. Обратите внимание, что даже в дистрибутивах, в которых официально поддерживается режим Secure Boot, может потребоваться отключить эту функцию, так как режим Secure Boot для Linux зачастую оставляет желать лучшего или создает проблемы.

Подготовка к установке Linux

Несколько подготовительных шагов помогут вам более гладко выполнить инсталляцию вашей системы Linux на компьютере с прошивкой EFI:

Установка Linux

В большинстве дистрибутивов Linux предоставляются достаточно полные инструкции по установке; но в инсталляторах с режимом EFI я обнаружил несколько общих камней преткновения:

В некоторых случаях, вы, может быть, вынуждены установить Linux в режиме BIOS. Затем в некоторых случаях для Linux для того, чтобы начать загрузку в режиме EFI, вы сможете вручную установить загрузчик режима EFI.

Устранение постустановочных проблем

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

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