UEFI (Unified Extensible Firmware Interface) — унифицированный расширяемый интерфейс прошивки, спецификация, определяющая, как программное обеспечение низкого уровня инициализирует платформу и передает управление загрузчику операционной системы. Это модульная среда с драйверами, сетевым стеком, сервисами времени выполнения и собственным менеджером загрузки, предназначенная для современных архитектур и носителей 💻⚙️.
Назначение и ключевые особенности 🔧
UEFI решает ограничения исторического BIOS и обеспечивает гибкий, расширяемый и безопасный процесс загрузки. Это включает работу с большими дисками, драйверами в прошивке, графическим интерфейсом, сетевой загрузкой, переменными NVRAM и механизмами доверенной загрузки. UEFI пришёл на смену классическому BIOS и сегодня де-факто стандарт на ПК, серверах и многих ARM-устройствах.
Аспект | UEFI | Практическое значение |
---|---|---|
Схема разделов | GPT (поддержка MBR через CSM) | Диски >2 ТБ и до 128+ разделов без ограничений MBR |
Файлы загрузчиков | Исполняемые .EFI (PE/COFF) | Напр., BOOTX64.EFI, grubx64.efi, bootmgfw.efi |
Менеджер загрузки | Встроенный, использует переменные NVRAM | BootOrder, Boot####, выбор OS без внешнего MBR-кода |
Безопасность | Secure Boot, db/dbx, KEK/PK, Measured Boot с TPM | Цепочка доверия и аттестация состояния платформы |
Сетевая загрузка | PXE, iSCSI, HTTP(S) Boot | Загрузка по сети без локального носителя 🌐 |
Интерфейс | Графическое меню, мышь, локализация | Удобная конфигурация и диагностика |
Драйверная модель | DXE-драйверы, протоколы | Расширения от вендоров и Option ROM как UEFI-драйверы |
Обновления | UEFI Capsule | fwupd/LVFS в Linux, средства OEM для Windows 🔁 |
Совместимость | CSM (Legacy) опционально | Запуск старых ОС, но всё чаще отключается |
Архитектуры | x86/x64, ARM, RISC‑V | Единый подход к инициализации платформ |
Архитектура и стадии инициализации 🧩
- SEC — первичная инициализация, запуск доверенного кода из ROM.
- PEI — инициализация памяти и базовых устройств (PEIM-модули).
- DXE — загрузка DXE-драйверов, публикация протоколов, обнаружение устройств.
- BDS — политика загрузки, поиск записей Boot#### в NVRAM.
- Boot Services — сервисы драйверов и устройств до передачи ОС.
- Runtime Services — сервисы времени, переменные, UEFI variables после старта ОС.
Ключевые данные конфигурации хранятся в NVRAM как переменные UEFI (BootOrder, BootNext, SecureBoot, PlatformKey и др.). Пользователь взаимодействует через меню прошивки, UEFI Shell или инструменты ОС.
EFI System Partition (ESP) 💽
ESP — специальный раздел на диске, содержащий загрузчики, драйверы и конфигурацию. Обычно это FAT32 объёмом 100–600 МБ; для носителей >2 ТБ требуется GPT. Структура каталогов: EFIVendor*.efi.
- Стандартные пути: EFIBOOTBOOTX64.EFI (фолбэк), EFIMicrosoftBootbootmgfw.efi, EFIubuntugrubx64.efi.
- Конфигурации: EFIBootbootx64.efi как резервный загрузчик на съёмных носителях.
- Драйверы UEFI: EFIdrivers*.efi (при необходимости).
Процесс загрузки ОС 🚀
- UEFI BDS читает BootOrder из NVRAM и пытается по очереди записи Boot####.
- Проверяются носители и файлы .efi на ESP; при неудаче — резервный путь EFIBOOTBOOT{арх}.EFI.
- При включённой проверке ключей выполняется верификация подписи загрузчика.
- Загрузчик ОС инициализирует ядро; UEFI передаёт управление, завершая Boot Services.
Безопасность и доверенная загрузка 🛡️
Secure Boot строит цепочку доверия: платформа хранит корневой ключ PK, список доверенных ключей/хешей (db), список отозванных (dbx) и KEK для управления обновлениями. Подписанные загрузчики и драйверы UEFI проверяются до их исполнения.
- TPM/Measured Boot: хеши стадий загрузки измеряются в PCR, что позволяет ОС или средам аттестации подтверждать целостность.
- MOK (Machine Owner Key): механизм добавления собственных ключей (например, для shim+GRUB в Linux).
- Пароли и PIN в прошивке: защита конфигурации и отключение отладки.
Совместимость и варианты конфигурации 🔄
CSM (Compatibility Support Module) эмулирует старую модель BIOS/MBR и нужен лишь для старых ОС и некоторых оптических носителей. В современных системах часто отсутствует или отключён по умолчанию. На x64 рекомендуется использовать 64-битный UEFI; 32-битный встречается на отдельных планшетах и встраиваемых системах. На ARM64 UEFI — стандартная основа для Windows и многих дистрибутивов Linux.
Инструменты администрирования и практические приёмы 🧰
- Linux: efibootmgr (управление BootOrder/Boot####), fwupd (обновления прошивок через LVFS), mokutil (управление MOK), sbverify/sbsign (подпись образов).
- Windows: bcdedit и bcdboot для записи загрузчиков на ESP и создания записей; PowerShell и средства OEM для Capsule-обновлений.
- UEFI Shell: команды map, fs0:, bcfg, dmpstore для работы с файловыми системами и переменными NVRAM.
Типичные проблемы и диагностика 🧩
- После переноса диска отсутствует запись Boot#### — используйте bcdboot/efibootmgr или загрузку с фолбэк EFIBOOTBOOTX64.EFI.
- Secure Boot блокирует кастомный загрузчик — добавьте ключ через MOK или отключите проверку (если политика безопасности это допускает).
- ESP повреждён или мал — пересоздайте раздел 200–600 МБ FAT32 и установите загрузчик заново.
- Смена режима CSM/UEFI ломает загрузку — придерживайтесь единого режима (чистый UEFI + GPT).
- Обновления прошивки — предпочитайте Capsule через fwupd/Windows Update; избегайте прерываний питания ⚠️.
Стандарт UEFI поддерживается UEFI Forum; версии спецификации описывают протоколы, переменные и поведение сервисов. Ключевые преимущества: масштабируемость под большие носители, расширяемость драйверами и повышенная безопасность цепочки загрузки 🔒.