Какие основные этапы загрузки Linux и какие загрузчики используются?

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

Ответ

Процесс загрузки Linux — это цепочка этапов, которые я часто анализирую при диагностике проблем с виртуальными машинами или bare-metal серверами.

Основные этапы:

  1. BIOS/UEFI: Прошивка материнской платы выполняет самотестирование (POST), инициализирует оборудование и загружает код загрузчика с загрузочного носителя.
  2. Загрузчик (Bootloader): Его задача — найти и загрузить ядро Linux и образ initramfs в оперативную память. Популярные загрузчики:
    • GRUB2 — самый распространенный, поддерживает UEFI и BIOS, имеет интерактивное меню.
    • systemd-boot — легковесный загрузчик для UEFI, интегрированный со systemd.
  3. Ядро (Kernel): Ядро распаковывается из сжатого образа, инициализирует процессор, память и драйверы устройств, а затем монтирует корневую файловую систему (/), используя параметр root=.
  4. Initramfs: Это временная корневая ФС в памяти. Она содержит драйверы и утилиты, необходимые для монтирования настоящей корневой ФС, особенно если она на LVM, RAID или зашифрована (LUKS). После монтирования / управление передается процессу init.
  5. Init / Systemd: Первый пользовательский процесс (PID 1). В современных дистрибутивах это systemd. Он монтирует файловые системы из /etc/fstab, запускает таргеты (default.target) и все системные сервисы.

Пример из практики: При автоматизации развертывания (например, с Packer) мы явно настраиваем GRUB, чтобы ядро загружалось с правильными параметрами, например, для AWS EC2:

# В скрипте provisioning добавляем параметр для правильного определения сетевого интерфейса
sudo sed -i 's/GRUB_CMDLINE_LINUX=".*"/GRUB_CMDLINE_LINUX="console=ttyS0 nvme_core.io_timeout=4294967295"/' /etc/default/grub
sudo update-grub