Какие этапы загрузки Linux-сервера?

«Какие этапы загрузки Linux-сервера?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Процесс загрузки современного Linux-сервера с systemd включает следующие ключевые этапы:

  1. BIOS/UEFI

    • Выполняет самотестирование оборудования (POST).
    • Инициализирует аппаратное обеспечение.
    • Находит и загружает загрузчик с загрузочного диска (MBR для BIOS или файл .efi из ESP-раздела для UEFI).
  2. Загрузчик (обычно GRUB2)

    • Предоставляет меню выбора ядра (если настроено).
    • Загружает в память выбранное ядро (vmlinuz) и образ initramfs.
    • Передает управление ядру.
  3. Ядро (Kernel)

    • Распаковывает себя в память.
    • Инициализирует процессор, память и критически важные подсистемы.
    • Распаковывает и монтирует временную корневую файловую систему initramfs.
  4. Initramfs (Initial RAM Filesystem)

    • Временная ФС в оперативной памяти, содержащая драйверы и утилиты, необходимые для монтирования реальной корневой файловой системы.
    • Выполняет скрипты (например, /init) для настройки LVM, RAID, расшифровки LUKS, монтирования реального корневого раздела (/).
    • После монтирования реального корня переключается на него и запускает системный инициализатор (/sbin/init).
  5. Systemd (PID 1)

    • Становится первым пользовательским процессом.
    • Монтирует файловые системы, указанные в /etc/fstab.
    • Запускает сервисы, соответствующие целевому юниту (target), обычно multi-user.target или graphical.target.
    • Активирует сокеты, таймеры, пути.
  6. Целевой уровень (Target)

    • multi-user.target — стандартный уровень для серверов, обеспечивает многопользовательский режим без графического интерфейса, сетевые сервисы и доступ по SSH.

Диагностика:

# Просмотр логов загрузки
journalctl -b
# Анализ времени инициализации сервисов
systemd-analyze blame
systemd-analyze critical-chain
# Просмотр событий загрузки ядра
dmesg | head -50

Особенности в облаке: В облачных образах (AWS EC2, GCP) этап инициализации часто управляется cloud-init для настройки сети, пользователей и установки пакетов.