Ответ
Процесс загрузки современного Linux-сервера с systemd включает следующие ключевые этапы:
-
BIOS/UEFI
- Выполняет самотестирование оборудования (POST).
- Инициализирует аппаратное обеспечение.
- Находит и загружает загрузчик с загрузочного диска (MBR для BIOS или файл
.efiиз ESP-раздела для UEFI).
-
Загрузчик (обычно GRUB2)
- Предоставляет меню выбора ядра (если настроено).
- Загружает в память выбранное ядро (
vmlinuz) и образ initramfs. - Передает управление ядру.
-
Ядро (Kernel)
- Распаковывает себя в память.
- Инициализирует процессор, память и критически важные подсистемы.
- Распаковывает и монтирует временную корневую файловую систему
initramfs.
-
Initramfs (Initial RAM Filesystem)
- Временная ФС в оперативной памяти, содержащая драйверы и утилиты, необходимые для монтирования реальной корневой файловой системы.
- Выполняет скрипты (например,
/init) для настройки LVM, RAID, расшифровки LUKS, монтирования реального корневого раздела (/). - После монтирования реального корня переключается на него и запускает системный инициализатор (
/sbin/init).
-
Systemd (PID 1)
- Становится первым пользовательским процессом.
- Монтирует файловые системы, указанные в
/etc/fstab. - Запускает сервисы, соответствующие целевому юниту (target), обычно
multi-user.targetилиgraphical.target. - Активирует сокеты, таймеры, пути.
-
Целевой уровень (Target)
multi-user.target— стандартный уровень для серверов, обеспечивает многопользовательский режим без графического интерфейса, сетевые сервисы и доступ по SSH.
Диагностика:
# Просмотр логов загрузки
journalctl -b
# Анализ времени инициализации сервисов
systemd-analyze blame
systemd-analyze critical-chain
# Просмотр событий загрузки ядра
dmesg | head -50
Особенности в облаке: В облачных образах (AWS EC2, GCP) этап инициализации часто управляется cloud-init для настройки сети, пользователей и установки пакетов.