← Назад к вопросам

Как происходит процесс загрузки Linux

1.0 Junior🔥 92 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Процесс загрузки Linux: от питания до пользовательского пространства

Процесс загрузки Linux — это многоэтапная последовательность, которая превращает "мёртвое железо" в полностью функционирующую операционную систему. Его можно разделить на несколько ключевых фаз, каждая из которых выполняется определённым компонентом.

Этап 1: Аппаратная инициализация (POST)

После нажатия кнопки питания прошивка материнской платы (обычно BIOS или UEFI) берет на себя управление:

  • Выполняется Power-On Self-Test (POST) — проверка работоспособности процессора, памяти, дисков и других устройств.
  • BIOS (устаревший) ищет загрузочное устройство по жестко заданному порядку (например, HDD → USB → сеть). Он считывает первый сектор диска (MBR, Master Boot Record, 512 байт), где находятся первичный загрузчик (446 байт) и таблица разделов.
  • UEFI (современный стандарт) использует EFI System Partition (ESP) — специальный FAT32-раздел, где хранятся файлы загрузчиков (например, grubx64.efi). Он более быстрый и функциональный.

Этап 2: Загрузчик (Bootloader)

Его задача — найти и загрузить ядро Linux (vmlinuz) и initramfs в память, передав им управление. Самый распространенный загрузчик — GRUB2.

# Пример расположения файлов GRUB2 в UEFI-системе
/boot/efi/EFI/ubuntu/grubx64.efi  # Исполняемый файл загрузчика UEFI
/boot/grub/grub.cfg               # Основной конфигурационный файл (генерируется автоматически)

Этапы работы загрузчика:

  1. GRUB Stage 1 (в MBR) загружает Stage 1.5, который понимает файловые системы.
  2. GRUB Stage 2 загружает свое ядро, парсит grub.cfg, отображает меню выбора ОС/ядра.
  3. После выбора загрузчик:
    * Загружает **ядро** (`vmlinuz-xxx`) и **initramfs** (initial RAM filesystem) в оперативную память.
    * Передает ядру параметры командной строки (`root=`, `ro`, `quiet splash` и др.).
    * Передает управление точке входа ядра.

Этап 3: Инициализация ядра (Kernel Initialization)

Ядро распаковывается в памяти и начинает работу:

  1. Декомпрессия и настройка — инициализация подсистем: управления памятью, планировщика задач, прерываний.
  2. Монтирование initramfs — временная корневая файловая система в памяти. Она содержит минимальный набор инструментов и модулей ядра (*.ko), необходимых для монтирования реального корневого раздела (например, драйверы для LVM или шифрования).
# Просмотр содержимого initramfs (пример)
lsinitramfs /boot/initrd.img-$(uname -r) | head -20
  1. Запуск init-процесса из initramfs — обычно это скрипт /init, который определяет настоящее корневое устройство (/dev/sda2, UUID=...), загружает нужные модули и переключает корень (pivot_root или switch_root) на реальную файловую систему.

Этап 4: Запуск пространства пользователя (Userspace)

Управление передается init-процессу в настоящем корневом разделе. Исторически это был /sbin/init (SysVinit), но сегодня доминируют:

  • systemd (наиболее распространен): Первым запускается процесс systemd (PID 1). Он параллельно запускает целевые юниты (targets), соответствующие уровню загрузки.
# Пример просмотра целей systemd и времени загрузки
systemctl list-units --type=target
systemd-analyze time
  • Другие варианты: Upstart (устарел), OpenRC (в Gentoo, Alpine).

Процесс инициализации пространства пользователя:

  1. Монтирование файловых систем/proc, /sys, /dev, /run (tmpfs), а также /, /home и другие, согласно fstab.
  2. Запуск системных служб — сетевой менеджер, демон журналирования (rsyslogd/ journald), cron, SSH и т.д.
  3. Запуск уровня multi-user или graphical.target — подготовка текстовых консолей (getty) или дисплейного менеджера (GDM, LightDM) для входа пользователя.

Этап 5: Завершение загрузки

  • При достижении graphical.target запускается дисплейный менеджер, который предоставляет экран входа.
  • После успешной аутентификации запускается сессия пользователя (оконный менеджер, DE — GNOME, KDE).
  • systemd может создать user slice для управления ресурсами сессии.

Ключевые особенности современной загрузки:

  • Параллелизм — systemd запускает многие службы одновременно, сокращая время загрузки.
  • Ранний userspace (initramfs) — критичен для сложных конфигураций хранения.
  • Событийная модель (systemd) против пошаговой (SysVinit runlevels).
  • UEFI + Secure Boot — добавляют проверку цифровой подписи загрузчика и ядра для защиты от руткитов.

Понимание этого процесса критично для DevOps-инженера: оно позволяет эффективно диагностировать сбои загрузки (например, используя загрузочную флешку и chroot), настраивать параметры ядра через grub.cfg, работать с dracut или mkinitcpio для регенерации initramfs, а также глубоко понимать, как взаимодействуют компоненты системы.