Ответ
Процесс загрузки Linux — это цепочка этапов, которые я часто анализирую при диагностике проблем с виртуальными машинами или bare-metal серверами.
Основные этапы:
- BIOS/UEFI: Прошивка материнской платы выполняет самотестирование (POST), инициализирует оборудование и загружает код загрузчика с загрузочного носителя.
- Загрузчик (Bootloader): Его задача — найти и загрузить ядро Linux и образ initramfs в оперативную память. Популярные загрузчики:
- GRUB2 — самый распространенный, поддерживает UEFI и BIOS, имеет интерактивное меню.
- systemd-boot — легковесный загрузчик для UEFI, интегрированный со systemd.
- Ядро (Kernel): Ядро распаковывается из сжатого образа, инициализирует процессор, память и драйверы устройств, а затем монтирует корневую файловую систему (
/), используя параметрroot=. - Initramfs: Это временная корневая ФС в памяти. Она содержит драйверы и утилиты, необходимые для монтирования настоящей корневой ФС, особенно если она на LVM, RAID или зашифрована (LUKS). После монтирования
/управление передается процессуinit. - 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