Компьютер с 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:) через diskpart → list volume.
bcdboot D:\Windows /s S: /f UEFI
Здесь D:\Windows — путь к папке Windows, S: — буква раздела EFI, а параметр /f UEFI явно указывает тип создаваемого загрузчика. Успешное выполнение сопровождается сообщением «Файлы загрузки успешно созданы».
☑️ Проверка после создания загрузчика
⚠️ Внимание: не указывайте в 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, которая сама скопирует файлы и создаст запись.
Сравнение инструментов для работы с загрузчиком
Разные задачи требуют разных инструментов. Таблица ниже поможет выбрать подходящий под ситуацию.
| Инструмент | Система | Назначение | Сложность |
|---|---|---|---|
| bcdboot | Windows | Создание файлов загрузки и записи NVRAM | Низкая |
| bcdedit | Windows | Редактирование меню загрузки, таймауты | Средняя |
| efibootmgr | Linux | Управление записями NVRAM | Средняя |
| grub-install | Linux | Установка загрузчика GRUB на ESP | Средняя |
| diskpart | Windows | Создание и разметка раздела 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 или меню прошивки.