1. Этап BIOS и UEFI: инициализация оборудования и поиск загрузчика
Этап BIOS и UEFI: инициализация оборудования и поиск загрузчика
Представьте: вы нажимаете кнопку питания сервера в дата-центре, а через 40 секунд монитор остаётся чёрным. Ни ошибки, ни лога — ничего. Проблема может быть где угодно, но диагностику придётся начинать с самого первого звена цепочки загрузки: прошивки материнской платы. Именно поэтому DevOps-инженеру критически важно понимать, что происходит в первые миллисекунды после подачи питания — до того, как ядро Linux вообще начнёт загружаться.
POST: самотестирование при включении
Когда питание поступает на материнскую плату, процессор начинает выполнять инструкции из прошивки — программного кода, записанного в энергонезависимую память микросхемы на плате. Первое, что делает прошивка — запускает процедуру POST (Power-On Self-Test), самотестирование при включении.
POST проверяет базовую работоспособность оборудования:
Если POST проходит успешно, на старых системах раздавался один короткий пик — так называемый beep code. Если что-то не так — комбинация звуковых сигналов указывала на конкретную неисправность. На современных серверах вместо beep codes используются POST-коды, выводимые на цифровой индикатор материнской платы или в IPMI/BMC-лог.
> POST — это не «проверка Linux». Это аппаратная процедура, выполняемая прошивкой до загрузки любой операционной системы. Если POST не проходит, до загрузчика дело не дойдёт.
BIOS: классический подход
BIOS (Basic Input/Output System) — прошивка, которая десятилетиями была стандартом для персональных компьютеров и серверов. BIOS хранится в микросхеме flash memory на материнской плате и выполняет несколько ключевых функций.
После завершения POST BIOS обращается к таблице приоритетов загрузки (Boot Order) — упорядоченному списку устройств, с которых система попытается загрузиться. Типичный порядок: CD/DVD, USB, жёсткий диск, сетевая карта (PXE boot). BIOS последовательно проверяет каждое устройство: читает первый сектор, ищет сигнатуру загрузчика (байты 0x55AA в конце 512-байтового сектора) и, если находит, передаёт управление коду из этого сектора.
Ключевые ограничения BIOS:
Проверить, в каком режиме загрузилась система, можно командой:
UEFI: современная замена
UEFI (Unified Extensible Firmware Interface) — спецификация прошивки, пришедшая на смену BIOS. UEFI принципиально отличается архитектурно и устраняет большинство ограничений предшественника.
| Характеристика | BIOS | UEFI | |---|---|---| | Таблица разделов | MBR (до 2 ТБ, 4 раздела) | GPT (до 9.4 ЗБ, 128 разделов) | | Загрузочный код | 446 байт в MBR | Отдельный EFI System Partition (FAT32) | | Графический интерфейс | Текстовый, клавиатура | Графический, мышь | | Безопасная загрузка | Нет | Secure Boot (проверка подписи) | | Сетевая загрузка | Через PXE-расширение | Встроенный сетевой стек | | Архитектура | 16-битный реальный режим | 32/64-битный защищённый режим |
EFI System Partition (ESP) — специальный раздел на диске, отформатированный в FAT32, на котором хранятся загрузочные файлы .efi. Каждая ОС устанавливает свой загрузочный файл в ESP, а UEFI-прошивка выбирает нужный на основе NVRAM-переменных — настроек, хранящихся в энергонезависимой памяти прошивки.
Посмотреть смонтированный ESP и его содержимое:
Обычно внутри вы увидите директории вроде ubuntu/, debian/ или BOOT/, в которых лежат .efi-файлы загрузчиков.
Secure Boot: защита от вредоносного кода
Одна из самых обсуждаемых возможностей UEFI — Secure Boot. Механизм работает так: прошивка хранит набор доверенных сертификатов (Platform Key, Key Exchange Key, Authorized/Forbidden Signature Databases). При загрузке любого .efi-файла прошивка проверяет его цифровую подпись. Если подпись не проходит проверку — загрузка прерывается.
Для Linux это исторически создавало проблемы: дистрибутивы должны были либо получать сертификаты от Microsoft (которая владеет ключом, предустановленным на большинстве плат), либо поставлять свои ключи для ручной установки. Сегодня большинство крупных дистрибутивов (Ubuntu, Fedora, Debian) подписывают свои загрузчики и ядра, поэтому Secure Boot работает «из коробки».
> На практике: если вы настраиваете сервер с кастомным ядром или загрузчиком, Secure Boot может блокировать загрузку. В таком случае либо подпишите ядро через sbsign, либо отключите Secure Boot в настройках UEFI — но только если вы понимаете риски.
Legacy vs UEFI: какой режим выбрать
На большинстве современных серверов UEFI — единственный доступный режим. Но в виртуализации и контейнеризации ситуация может быть иной: гипервизоры (KVM, VMware) поддерживают оба режима, а в некоторых сценариях PXE boot Legacy-режим проще настраивать.
Для DevOps-инженера практическое правило такое: если система поддерживает UEFI — используйте UEFI с GPT. Это даёт больше гибкости, поддержку дисков ТБ и возможность использовать Secure Boot. Legacy BIOS оставляйте только для совместимости со старым оборудованием или специфическими bare-metal-сценариями.
Что происходит в момент передачи управления
Когда прошивка (BIOS или UEFI) находит загрузочный сектор или .efi-файл, она загружает его код в оперативную память и передаёт управление, выполняя jump на точку входа этого кода. На этом этапе прошивка завершает свою роль — дальше работает загрузчик, о котором пойдёт речь в следующей статье.
Важный нюанс: в режиме Legacy BIOS процессор в момент передачи управления загрузчику находится в 16-битном реальном режиме — том же режиме, в котором работал оригинальный Intel 8086. Загрузчику предстоит выполнить серию переключений процессора в защищённый, а затем в длинный режим, прежде чем можно будет запустить 64-битное ядро Linux. В UEFI этот переход уже частично выполнен прошивкой, что упрощает жизнь загрузчику.