С чего начинается загрузка ОС
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Секвенирование загрузки операционной системы
Загрузка ОС — это многоэтапный процесс инициализации аппаратного и программного обеспечения, который начинается с включения питания и завершается готовностью к выполнению пользовательских задач. Он представляет собой строгую цепочку событий, где каждый следующий этап загружается и контролируется предыдущим. Для современных компьютеров с BIOS/UEFI и использованием GRUB в качестве загрузчика процесс выглядит следующим образом.
Этап 0: Аппаратная инициализация (POST)
При подаче питания центральный процессор (CPU) переходит в заданное начальное состояние и выполняет код из микропрограммы (firmware), записанной в ROM (Read-Only Memory) или UEFI NVRAM. Этот этап включает:
- POST (Power-On Self-Test): Базовая диагностика критических компонентов (процессор, память, накопители).
- Инициализация оборудования: Настройка чипсета, видеокарты, обнаружение периферии.
- Поиск загрузочного устройства: Согласно порядку загрузки, заданному в прошивке, происходит поиск загрузочной записи на устройствах (HDD, SSD, USB, сеть).
Этап 1: Загрузчик уровня 1 (Bootloader Stage 1)
После обнаружения загрузочного диска BIOS или UEFI загружает в оперативную память и передает управление первому сектору этого диска.
- На диске с MBR (Master Boot Record) это первый физический сектор (512 байт), который содержит:
* **Первичный загрузчик (первого этапа)** — небольшая программа (до 446 байт).
* **Таблицу разделов (Partition Table)**.
* **Сигнатуру (0x55AA)** в конце сектора.
- На диске с GPT (GUID Partition Table) в контексте UEFI этот этап часто пропускается, так как UEFI напрямую загружает исполняемый файл загрузчика из ESP (EFI System Partition).
Код первого этапа крайне ограничен в размере, и его единственная задача — найти и загрузить более сложный загрузчик второго этапа, расположенный где-либо еще на диске.
Этап 2: Загрузчик уровня 2 (Bootloader Stage 2)
Управление переходит к более функциональному загрузчику, например GRUB 2 (GRand Unified Bootloader). Он уже может:
- Читать файловые системы (например,
ext4,fat32для ESP). - Отображать меню выбора ядра и дополнительных параметров.
- Загружать выбранное ядро ОС (vmlinuz) и initial RAM-диск (initramfs/initrd) в память.
Initramfs — это временная корневая файловая система в памяти, содержащая драйверы и утилиты, необходимые для монтирования реального корневого раздела (например, драйверы для RAID, LVM, зашифрованных разделов).
Примерная структура файлов GRUB 2 в /boot/grub/:
/boot/grub/
├── grub.cfg # Основной конфигурационный файл (генерируется автоматически)
├── fonts/ # Шрифты для отображения меню
└── i386-pc/ # Модули для загрузки (например, для чтения файловых систем)
Этап 3: Загрузка ядра ОС (Kernel Boot)
Загрузчик инициирует переход в защищенный режим (для x86) и передает управление ядру Linux, предварительно распакованному в память. Ядро выполняет:
- Инициализацию оборудования: Детектирует процессоры, настраивает менеджер памяти, инициализирует драйверы устройств из initramfs.
- Монтирование корневой файловой системы (rootfs): После загрузки необходимых драйверов ядро перемонтирует (
pivot_root) с временного initramfs на настоящий корневой раздел, указанный в параметре ядраroot=. - Запуск процесса init/systemd: Ядро запускает первый пользовательский процесс с PID 1. В современных системах это, как правило, systemd.
Этап 4: Инициализация пространства пользователя (Userland)
Теперь управление переходит к systemd (или другому init). Его задачи:
- Параллельный запуск служб (
units): Монтирование файловых систем (local-fs.target), запуск сетевых служб (network.target), демонов (sshd.serviceи др.). - Запуск целевых уровней (
targets): Достижение состоянияmulti-user.target(многопользовательский режим без графики) илиgraphical.target(с графической оболочкой). - Запуск
getty: Активация виртуальных терминалов (tty1-tty6), которые выводят приглашение к логину.
Итоговая последовательность
Таким образом, каноническая цепочка загрузки выглядит так:
- POST и инициализация аппаратуры (CPU, чипсет, память).
- BIOS/UEFI → Поиск и выполнение кода из MBR или
.efi-файла в ESP. - Загрузчик 1-й стадии (MBR) → Загрузка загрузчика 2-й стадии (опционально для UEFI+GPT).
- Загрузчик 2-й стадии (GRUB2) → Загрузка
vmlinuzиinitramfsв RAM, передача управления ядру. - Ядро Linux → Инициализация аппаратуры, монтирование корневого раздела via initramfs.
- Systemd (PID 1) → Параллельный запуск всех системных сервисов и целевых уровней.
- Экран входа в систему (login prompt) → Готовность к аутентификации пользователя.
Понимание этой последовательности критически важно для DevOps-инженера, так как позволяет эффективно диагностировать сбои на любом этапе (например, ошибки GRUB rescue, проблемы с монтированием rootfs, падения служб systemd) и настраивать параметры загрузки для конкретных инфраструктурных задач.