BDS
BDS (Boot Device Selection) — четвёртая стадия работы прошивки UEFI: выбор загрузочного устройства и запуск загрузчика. Именно здесь заканчивается POST и начинается загрузка операционной системы.
К этому моменту железо инициализировано, драйверы работают, сервисы подняты (см. DXE). Задача BDS — решить что загружать и запустить это.
Откуда BDS знает, что загружать
Список загрузки живёт в NVRAM прошивки — это переменные UEFI, которые задаёт Setup и изменяет операционная система:
BootOrder— порядок, в котором перебираются записи;Boot####— сами записи: имя и путь к загрузчику (например, «ubuntu» →HD(1,GPT,…)/File(\EFI\ubuntu\grubx64.efi));BootNext— «загрузить вот это один раз» (используется установщиками и обновлениями);BootCurrent— чем загрузились сейчас.
Посмотреть и изменить этот список из Linux можно командой efibootmgr.
Что делает BDS
- Читает список загрузки из NVRAM и порядок записей.
- Проверяет доступность каждого устройства из списка: подключено ли оно, читается ли.
- Показывает меню, если записей несколько или если пользователь нажал клавишу вызова загрузочного меню (
F12,F11,Esc— зависит от производителя). Меню может быть и скрытым — тогда BDS идёт по списку сам. - Загружает выбранный образ: сервис
LoadImageпомещает файл загрузчика в память,StartImageзапускает его. - Передаёт управление загрузчику — обычно GRUB 2.
- Если ничего не сработало — переходит к запасному пути: файл
\EFI\BOOT\BOOTX64.EFIна любом подходящем разделе. Именно поэтому система часто остаётся загружаемой даже после сброса настроек прошивки.
Что видит пользователь
- меню выбора ОС при включении — если записей несколько (несколько Linux, Windows и Linux, разные ядра);
- подсказку «Press F12 for boot menu» или логотип производителя;
- ошибки:
No bootable device,Boot device not found— BDS не нашёл ни одной рабочей записи; - порядок загрузки — тот самый список, который можно переставить в Setup или через
efibootmgr.
После BDS: TSL и RT
BDS не «выключает» прошивку. По спецификации дальше идут ещё две стадии:
- TSL (Transient System Load) — загрузчик и ядро работают, пользуясь Boot Services прошивки: читают файлы, выводят на экран, работают с устройствами;
- RT (Runtime) — ядро вызывает
ExitBootServices(), Boot Services становятся недоступны, остаются только Runtime Services (переменные, время, обновление прошивки).
Вот где на самом деле проходит граница между прошивкой и операционной системой — см. UEFI.
Как посмотреть загрузку из системы
# записи BDS и их порядок
efibootmgr -v
# чем загрузились и какие записи есть
cat /sys/firmware/efi/efivars/BootCurrent-* 2>/dev/null
bootctl status
Частые проблемы
- сбился порядок загрузки — после обновления прошивки или установки второй системы: лечится в Setup или
efibootmgr -o; - пропала запись — например, после переустановки загрузчика: запись добавляется
efibootmgr -cили создаётся заново установкой GRUB; - не загружается ничего — проверяют, есть ли вообще файл загрузчика на ESP и доступен ли раздел;
- загрузка через CSM вместо UEFI — система установлена в режиме совместимости; тогда
/sys/firmware/efiотсутствует.
Комментарии
Пока комментариев нет.