Windows Boot Manager
Обзор
Ссылки по теме:
Примечание: Описание ниже относится к Windows 10 установленой в режиме UEFI (на Windows Server 2019 не проверялось, но должно быть аналогично)
Термины
- NVRAM (Non Volatile Random Access Memory) - энергонезависимая память (https://ru.wikipedia.org/wiki/Энергонезависимая_память), энергонезависимость обычно обеспечивает батарейка, хранит данные UEFI (ранее BIOS)
- ESP (EFI System Partition) - специальный загрузочный раздел диска с которого UEFI может запускать на исполнение EFI программы (обычно загрузчики различных ОС)
Предопределенные обозначения
{fwbootmgr} - список загрузочных записей в NVRAM {bootmgr} - загрузочная запись Windows Boot Manager в NVRAM
NVRAM
Управление списком загрузочных записей NVRAM из Windows
Вывести текущий список загрузочных записей NVRAM.
bcdedit /enum firmware
Задать нужный порядок загрузочных записей в NVRAM
bcdedit /set {fwbootmgr} displayorder {GUID1} {GUID2} {GUID3} ...
Добавить нужную запись в начало списка загрузочных записей NVRAM
bcdedit /set {fwbootmgr} displayorder {нужный_GUID} /addfirst
Изменить путь к запускаемому файлу в нужной загрузочной записи NVRAM
bcdedit /set {GUID_нужной_записи} path \EFI\путь_к_нужному_файлу_загрузчика
ESP
Требования к ESP разделу
- таблица разделов диска в формате GPT
- файловая система раздела FAT16 или FAT32
- специальный идентификатор типа раздела C12A7328-F81F-11D2-BA4B-00A0C93EC93B
Монтирование ESP раздела в Windows
ESP является системным разделом, которому в Windows по умолчанию не присваивается буква диска.
Смонтировать данный раздел на букву диска можно утилитой diskpart
diskpart list disk select disk 0 list part select part 0 assign letter=S: quit
Размонтировать букву можно так
diskpart list disk select disk 0 list part select part 0 remove letter=S: quit
Windows Boot Manager
Исполняемый файл Windows Boot Manager расположен на ESP разделе
\EFI\Microsoft\Boot\bootmgfw.efi
Windows Boot Manager хранит свои данные в файле
\EFI\Microsoft\Boot\BCD
Для редактирования файла BCD используется утилита командной строки bcdedit.
Важно: Если не удалось загрузить Windows, то можно загрузить инсталлятор Windows, нажать F10 и появится командная строка. Функционал ограничен, но bcdedit там есть.
Известные проблемы
Проблема мультизагрузки
По умолчанию, в загрузочной записи Windows 10 параметр recoveryenabled имеет значение "yes". Это означает, что если Windows Boot Manager решит, что предыдущая загрузка Windows была не удачной (это может произойти даже при удачной загрузке), то он запустит режим восстановления. Также это может приводить к тому, что при любом входе в Windows (даже успешном) будет перезаписываться очередность загрузочных записей NVRAM и Windows Boot Manager будет ставить себя на первое место. Если вы используете другой основной загрузчик, то это может стать проблемой.
Решение 1
# отключение режима восстановления bcdedit /set {GUID_нужной_записи} recoveryenabled no
Решение 2 (костыль)
bcdedit /set {bootmgr} path \EFI\путь_к_нужному_загрузчику # это прописывает в NVRAM записи для Windows Boot Manager путь к другому загрузчику. # если мы запустим bootmgfw.efi из другого загрузчика и он снова пропишет свою NVRAM запись на первое место, то она все равно запустит нужный нам загрузчик # прежде чем это делать, убедитесь что в нужный вам загрузчик добавлена возможность запуска Windows и она работает # если вы не сможете запустить windows альтернативным загрузчиком, то # для корректировки параметров загрузки придется загружать Windows PE и command shell с флешки (например с инсталлятора Windows) # так можно вернуть обратно, если потребуется bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
Текущий список записей NVRAM с их GUID-ами можно вывести командой
bcdedit /enum firmware
Решение 3
Использовать Windows Boot Manager как основной загрузчик, но я пока не нашел способ запускать из него другие UEFI загрузчики.