Настройка Загрузчика Uefi. Самое Краткое Руководство В Мире

Как происходит загрузка современных операционных систем? Как мне настроить загрузку через 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 и трогать эфиварс

Самая «популярная» процедура установки загрузчика в систему следующая: установщик ОС создает специальный раздел, на нем структуру каталогов и размещает файлы загрузчика.

После этого с помощью специальной утилиты (efibootmgr в Linux, bcdedit в Windows) он взаимодействует с прошивкой UEFI-чипа, добавляя в него загрузочную запись.

В этой записи указывается путь к файлу загрузчика (начиная с корня файловой системы) и, при необходимости, параметры.

После этого в меню загрузки компьютера появится опция загрузки ОС.

Для Linux можно вообще обойтись без загрузчика.

Загрузочная запись указывает путь непосредственно к ядру вместе со всеми параметрами.

Ядро должно быть скомпилировано с опцией EFISTUB (которая уже давно является стандартом для большинства дистрибутивов), и в этом случае оно содержит заголовок «исполняемый файл EFI», который позволяет прошивке запускать его без внешнего загрузчика.

При запуске системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сначала ищет на диске специальный раздел EFI, зарегистрированный в этой записи, обращается к файловой системе на этом разделе (требуется FAT или FAT32) и запускает загрузчик.

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

Ничего не замечаете? Да, у нас есть два загрузочных меню — одно на уровне прошивки чипа UEFI, другое на уровне загрузчика.

В действительности пользователи могут даже не подозревать о существовании второго — если в меню всего один пункт, загрузчик Windows начинает его загрузку без каких-либо вопросов.

Увидеть экран с этим меню можно, если установить вторую копию Windows или просто криво переустановить.

Обычно для управления загрузочными записями инструкции в Интернете предлагают взаимодействовать с прошивкой UEFI. Есть целых пять основных вариантов, как это сделать: efibootmgr под Linux, bcdedit в Windows, какой-то софт на Mac, команда bcfg утилиты оболочки uefi (запускается из-под UEFI, «на голом железе» и без ОС, поскольку скомпилирована в том самом специальном формате), а для особо качественной прошивки — с помощью графических средств UEFI (в просторечии «в настройках биоса»).

Во всех написанных выше «мультикнигах» легко можно было упустить такую идею: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписать флэш-память чип на плате.

Есть ли здесь подводные камни? Ах, да! окна иногда можно сделать кирпич из ноутбука Linux Такой же , и различные пути .

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

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

В процессе экспериментов я лично неоднократно (к счастью, обратимо) "закирпичил" свой Леново - из загрузочного меню исчезли все пункты, включая опцию "перейти в настройки".

Работать с загрузочными записями UEFI тоже непросто.

Например, утилита efibootmgr не имеет опции «редактировать существующую запись».

Если вы хотите немного изменить параметр ядра, вы удаляете всю запись и добавляете ее снова, уже измененную.

В этом случае линия содержит двойные и одинарные кавычки, а также прямую и обратную косую черту в не особенно очевидном порядке.

Когда наконец это волшебство заработало, я сохранил его в виде bash-скриптов, которые до сих пор лежат в моей корневой файловой системе:

  
  
  
  
   

efibootmgr -c -L "Archlinux (debug)" -l '\EFI\archlinux\vmlinuz-linux' -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0"



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

Это чертов мастодонт, 90% его функционала предназначено для MBR накопителей.

Для настройки необходимо отредактировать ряд файлов, а затем запустить команду генерации конфига.

В результате получается огромный лист, непонятный обычному человеку.

Он содержит гору исполняемых файлов.

Устанавливается командой, которую просто так из головы не выкинешь - надо обязательно заглянуть в документацию

grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub

Для сравнения простейший UEFI-загрузчик, входящий в состав пакета systemd, устанавливается командой

bootctl install --path=/boot

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

А конфиг для него занимает ровно СЕМЬ строк.



«Кратчайший путеводитель» — немного подробнее

Загрузочное меню должно быть реализовано на уровне загрузчика.

— редактировать текстовые конфиги намного проще и безопаснее.

Загрузочная запись нам не нужна — дело в том, что когда в настройках биоса выставлена загрузка с диска, 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. Или Дебиан.

У вас есть под рукой система Windows? Возьмите оттуда загрузчик Windows, он тоже будет работать)) Если получится настроить, то я, честно говоря, не пробовал.

Пункт 4: «Настроить конфигурацию» .

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

Эту информацию обычно легко найти в Интернете.

Для загрузчика systemd-boot нам необходимо создать в корне раздела EFI каталог «loader», а в нем файл «loader.conf» с тремя строками (приведу свои):

default archlinux timeout 10 editor 1

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

Рядом с loader.conf вам необходимо создать каталог записей — один файл в нем будет отвечать за одну загрузочную запись в меню загрузки.

У меня есть один файлarch.conf со следующим содержимым:

title Arch Linux linux /efi/archlinux/vmlinuz-linux initrd /efi/archlinux/initramfs-linux.img options root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img

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

Пути к ним в конфигах считаются от корня этой файловой системы.



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

systemd-boot очень прост и предоставляет спартанское черно-белое меню.

Есть и более красивые варианты, если душа просит красоты.

перенайти — очень красивый погрузчик.

Скачать можно найти здесь как пакет deb. Я использую его на своем ноутбуке.

Может создать загрузочное меню автоматически, без конфига - просто путем сканирования файлов.

Клевер .

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

Тема по умолчанию ужасная, конфиг xml нечитабельный, настроить не смог.



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

Вы можете легко опробовать эту схему в работе.

Возьмите флешку, отформатируйте ее в таблицу разделов GPT, создайте раздел FAT и скопируйте туда загрузчик.

Компьютер сможет запуститься с него.

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

Теги: #linux #*nix #Windows #Системное администрирование #настройка Linux #UEFI #bootloader #GPT

Вместе с данным постом часто просматривают: