Windows Boot Manager

Материал из sysadm
Перейти к навигации Перейти к поиску

Обзор

Ссылки по теме:

Примечание: Описание ниже относится к 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 загрузчики.