Создание UEFI загрузчика: полное руководство

Компьютер с UEFI отказывается загружаться после замены диска или переустановки системы — и на экране появляется сообщение вроде «No bootable device» или выброс в оболочку BIOS. В подавляющем большинстве таких случаев проблема кроется в отсутствующем или повреждённом загрузчике на разделе EFI, и его можно создать заново своими силами, без переустановки всей системы.

Загрузчик UEFI — это небольшой исполняемый файл формата .efi, который прошивка материнской платы находит на специальном разделе ESP (EFI System Partition) и запускает. Понимание этой структуры позволяет не только восстановить загрузку, но и настроить мультизагрузку нескольких операционных систем на одном диске.

Как устроен процесс загрузки UEFI

В отличие от старого режима Legacy BIOS, где код загрузчика прятался в первый сектор диска (MBR), UEFI работает с обычными файлами. Прошивка читает таблицу разделов GPT, находит раздел ESP с файловой системой FAT32 и ищет загрузочный файл по пути, записанному в NVRAM, либо по стандартному пути \EFI\BOOT\BOOTX64.EFI.

Для Windows основным загрузчиком служит файл bootmgfw.efi, который затем передаёт управление winload.efi. В Linux-дистрибутивах чаще всего используются GRUB (файл grubx64.efi) или systemd-boot. Все они размещаются на одном разделе ESP и могут сосуществовать без конфликтов.

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

Подготовка: что понадобится

Прежде чем приступать к созданию загрузчика, убедитесь, что у вас есть всё необходимое. Работа ведётся из командной строки, поэтому базовое умение работать с diskpart и cmd существенно упростит задачу.

  • 💿 Установочная флешка Windows той же разрядности, что и установленная система, либо Live-образ Linux
  • 💾 Диск, размеченный в GPT — проверить можно через diskpart командой list disk (звёздочка в столбце GPT)
  • 🔐 Доступ к командной строке с правами администратора или root
  • 📋 Резервная копия важных данных — операции с разделами всегда несут риск
⚠️ Внимание: если диск размечен в MBR, загрузка в чистом режиме UEFI невозможна — прошивка просто не увидит загрузчик. Потребуется либо конвертация диска в GPT (в современных версиях Windows для этого есть утилита MBR2GPT), либо переключение платы в режим CSM/Legacy, если он поддерживается.

Создание раздела EFI вручную

Если раздел ESP был удалён или повреждён, его нужно создать заново. Загрузитесь с установочной флешки Windows, нажмите Shift+F10 для вызова командной строки и запустите diskpart.

diskpart

list disk

select disk 0

create partition efi size=100

format quick fs=fat32

assign letter=S

exit

Размер раздела в примере — 100 МБ, этого достаточно для Windows. Если планируется мультизагрузка с несколькими системами, имеет смысл выделить 200–500 МБ, чтобы файлы всех загрузчиков помещались без тесноты. Буква S присваивается временно, только для копирования файлов.

Запись загрузчика Windows командой bcdboot

Самый надёжный способ создать загрузчик Windows — встроенная утилита bcdboot. Она копирует необходимые файлы на раздел ESP и автоматически создаёт запись в NVRAM. Находясь в среде восстановления, определите букву раздела с установленной Windows (в среде восстановления она может отличаться от привычной C:) через diskpartlist volume.

bcdboot D:\Windows /s S: /f UEFI

Здесь D:\Windows — путь к папке Windows, S: — буква раздела EFI, а параметр /f UEFI явно указывает тип создаваемого загрузчика. Успешное выполнение сопровождается сообщением «Файлы загрузки успешно созданы».

☑️ Проверка после создания загрузчика

Выполнено: 0 / 5
⚠️ Внимание: не указывайте в bcdboot букву раздела восстановления или зарезервированного системой раздела вместо папки Windows — файлы будут созданы, но загрузка завершится ошибкой. Всегда проверяйте содержимое диска командой dir перед выполнением.

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

В Linux для управления записями UEFI используется утилита efibootmgr. Она позволяет просматривать, создавать и удалять загрузочные записи напрямую из работающей системы или Live-сессии. Просмотр текущих записей выполняется простым вызовом без параметров:

sudo efibootmgr -v

Для создания новой записи, указывающей на GRUB, команда выглядит примерно так (диск и раздел подставьте свои):

sudo efibootmgr -c -d /dev/sda -p 1 -L "MyLinux" -l '\EFI\ubuntu\grubx64.efi'

Обратите внимание: путь к файлу указывается с обратными слешами, как принято в UEFI, а не в стиле Linux. Более простой вариант — переустановить GRUB штатной командой grub-install с параметром --target=x86_64-efi, которая сама скопирует файлы и создаст запись.

📊 С какой задачей вы столкнулись?
Восстановление загрузчика Windows после сбоя
Настройка двойной загрузки Windows + Linux
Перенос системы на новый диск
Разработка собственного .efi приложения

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

Разные задачи требуют разных инструментов. Таблица ниже поможет выбрать подходящий под ситуацию.

ИнструментСистемаНазначениеСложность
bcdbootWindowsСоздание файлов загрузки и записи NVRAMНизкая
bcdeditWindowsРедактирование меню загрузки, таймаутыСредняя
efibootmgrLinuxУправление записями NVRAMСредняя
grub-installLinuxУстановка загрузчика GRUB на ESPСредняя
diskpartWindowsСоздание и разметка раздела ESPНизкая

Для типового восстановления Windows достаточно связки diskpart + bcdboot. Инструмент bcdedit понадобится только при тонкой настройке меню загрузки — например, чтобы изменить порядок систем или убрать таймаут.

Что делать, если запись в NVRAM не сохраняется

На некоторых платах прошивка игнорирует записи, созданные извне. В этом случае скопируйте загрузчик по стандартному пути \EFI\BOOT\BOOTX64.EFI — прошивка загрузит его как вариант по умолчанию. Также проверьте, не включена ли в UEFI функция блокировки записи загрузочных переменных, и сверьтесь с документацией к вашей материнской плате.

Типичные ошибки и их устранение

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

  • 🚫 Диск в MBR вместо GPT — UEFI-загрузчик физически не сможет работать, нужна конвертация
  • 🧩 Включён Secure Boot, а загрузчик не подписан — актуально для самосборных .efi и некоторых Linux-дистрибутивов
  • 🔀 Неправильная буква диска в bcdboot — файлы записались не туда или вовсе не записались
  • 🗂️ Файловая система ESP не FAT32 — прошивка обязана понимать FAT32, другие форматы не гарантированы
  • 🔋 Сброшенная NVRAM после обновления прошивки — записи нужно создать заново

Отдельно стоит сказать про Secure Boot: если вы создаёте собственный загрузчик или используете неподписанный GRUB, эту функцию придётся временно отключить в настройках UEFI, либо использовать подписанный загрузчик-прослойку shim, как это делают основные дистрибутивы Linux.

Разработка собственного .efi-приложения

Под созданием UEFI загрузчика иногда понимают не восстановление, а написание собственной программы для среды UEFI. Для этого существует открытый инструментарий EDK II от Intel, а также более лёгкая библиотека gnu-efi и фреймворк POSIX-UEFI, позволяющие писать на C.

Минимальное приложение UEFI — это точка входа efi_main, которая получает указатель на системную таблицу и может выводить текст через протокол консоли. Скомпилированный файл кладётся на раздел ESP и запускается либо через запись NVRAM, либо как BOOTX64.EFI. Для отладки удобно использовать виртуальную машину с прошивкой OVMF — так вы не рискуете реальным оборудованием.

Начинать лучше с готовых примеров из документации gnu-efi: классический «Hello World» для UEFI занимает несколько десятков строк и наглядно показывает структуру программы, работу с протоколами и завершение через ExitBootServices.

Часто задаваемые вопросы

Можно ли создать UEFI загрузчик без установочной флешки?

Да, если система ещё загружается: bcdboot и bcdedit работают из обычной Windows с правами администратора. Флешка нужна только когда система не стартует вовсе.

Какого размера должен быть раздел EFI?

Для одной Windows достаточно 100 МБ — именно столько создаёт установщик по умолчанию. При мультизагрузке нескольких систем разумно выделить 200–500 МБ.

Почему после клонирования диска система не загружается?

Возможная причина — запись загрузки в NVRAM ссылается на старый идентификатор диска. Решение — пересоздать загрузочные файлы командой bcdboot с нового раздела ESP.

Мешает ли Secure Boot самостоятельному созданию загрузчика?

Для штатных загрузчиков Windows и подписанных загрузчиков популярных дистрибутивов Linux — нет. Для собственных .efi-приложений и неподписанных загрузчиков Secure Boot придётся отключить в настройках прошивки.

Можно ли держать загрузчики Windows и Linux на одном разделе ESP?

Да, это стандартная практика: файлы размещаются в разных подкаталогах (\EFI\Microsoft, \EFI\ubuntu и т.д.) и не конфликтуют. Управлять порядком загрузки можно через efibootmgr или меню прошивки.