Firmware и диск: BIOS/UEFI, MBR/GPT
POST, BIOS против UEFI, разметка диска MBR и GPT.
С чего начинается включение
Как только на плату подаётся питание, управление берёт firmware: код, зашитый в чип на материнской плате. Первым делом он гоняет POST (power-on self-test), самопроверку железа: память, процессор, базовые контроллеры. Если что-то критично сломано, дальше загрузка не идёт, и вы слышите серию сигналов или видите код ошибки.
После успешного POST firmware ищет, откуда грузиться, и передаёт управление загрузчику. Дальше цепочка простая:
firmware -> загрузчик -> ядро (kernel) -> initramfs
initramfs — это временный корень файловой системы, который
распаковывается в память (в rootfs на tmpfs, если в ядре включён
CONFIG_TMPFS). Он несёт драйверы, нужные, чтобы смонтировать настоящий
корень с диска.
BIOS против UEFI
Firmware бывает двух поколений. Старый режим — BIOS (basic input/output system). Он не понимает файловых систем: просто читает загрузочный код из первого сектора диска и запускает его.
# BIOS не знает про файлы, он читает сырой сектор
dd if=/dev/sda bs=512 count=1 | xxd | head
Новый режим — UEFI (unified extensible firmware interface). Он умеет
читать файловую систему на отдельном разделе, который называется EFI
System Partition (ESP, обычно FAT32). Там лежат загрузчики как обычные
файлы .efi.
# на UEFI-системе ESP смонтирован сюда
ls /boot/efi/EFI/
# BOOT systemd ubuntu
У UEFI есть приятный бонус. Ядро Linux можно собрать с так называемым EFI stub, встроенным кодом, который firmware запускает напрямую. Тогда отдельный загрузчик не нужен, UEFI грузит ядро само.
# efibootmgr показывает записи загрузки прямо в firmware
efibootmgr -v
# Boot0001* Linux HD(1,GPT,...)/File(\EFI\Linux\vmlinuz.efi)
Ловушка: «UEFI это просто BIOS с новым именем». Нет. UEFI понимает разделы и файлы, ведёт собственный список загрузочных записей и может грузить ядро без промежуточного загрузчика.
MBR: старая разметка
Способ разметки диска связан с режимом firmware. Классический — MBR (master boot record). Это самый первый сектор диска размером 512 байт.
Внутри него первые 446 байт занимает код первичного загрузчика, дальше идёт таблица разделов и сигнатура:
# 446 байт кода + 64 байта таблицы + 2 байта подписи = 512
446 + 64 + 2 = 512
У MBR есть жёсткие ограничения. Он адресует диски до 2 ТБ и хранит не больше четырёх первичных разделов.
fdisk -l /dev/sda
# Disklabel type: dos <- это MBR
GPT: современная разметка
GPT (GUID partition table) снимает ограничения MBR. Разделов можно делать много (обычно до 128 из коробки), диски поддерживаются заметно крупнее 2 ТБ.
Ещё GPT хранит резервную копию таблицы разделов в конце диска. Если основная таблица в начале побьётся, есть шанс восстановиться из копии.
gdisk -l /dev/sda
# Partition table scan:
# MBR: protective
# GPT: present <- разметка GPT, копия таблицы в конце диска
На практике под UEFI размечают диск в GPT: там заводят EFI System Partition, с которой firmware читает загрузчик или ядро. Жёсткой связки тут нет, спецификация UEFI допускает ESP и на MBR-диске, и такие системы встречаются. Но выигрыша это не даёт, поэтому связку «UEFI плюс GPT» и считают нормальной.
Ловушка: «GPT только для больших дисков». Объём тут лишь один из поводов. GPT берут ради числа разделов и ради резервной копии таблицы, даже на диске меньше 2 ТБ.
Разница коротко:
| Свойство | MBR | GPT |
|---|---|---|
| Размер служебной области | 512 байт (сектор 0) | таблица + копия в конце |
| Предел диска | ~2 ТБ | сильно больше |
| Первичных разделов | 4 | обычно до 128 |
| С чем грузится | BIOS | UEFI (нужен ESP) |
Что дальше делает система
Когда ядро распаковало initramfs и смонтировало настоящий корень,
управление получает первый процесс. На большинстве дистрибутивов это
systemd — демон, который управляет остальными демонами по декларативным
unit-файлам. Загрузка при этом сильно параллельна: systemd поднимает
независимые сервисы одновременно.
systemctl get-default
# graphical.target
Цель загрузки описывается через targets, которые зависят друг от друга:
graphical.target -> multi-user.target -> basic.target -> sysinit.target
Стрелки показывают зависимость, а не строгий порядок шаг-за-шагом.
systemd уважает эти зависимости, но всё, что можно, запускает
параллельно.
Что важно запомнить
POST — самопроверка железа при включении, до всякого загрузчика.
BIOS читает сырой код из MBR, UEFI понимает файлы на EFI System Partition и умеет грузить ядро напрямую через EFI stub.
MBR — сектор 512 байт (446 байт под код), до 2 ТБ и 4 первичных раздела.
GPT снимает эти лимиты и держит копию таблицы в конце диска. Под UEFI на практике берут GPT, хотя формально ESP можно завести и на MBR-диске.
В следующем уроке — как загрузчик передаёт ядру параметры и что попадает в командную строку ядра.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс