Что такое ядро, initramfs, загрузчик?devops-6

1. Ядро

Ядро Linux - это фундаментальный компонент операционной системы, который:

  • Управляет аппаратными ресурсами (CPU, память, устройства)
  • Обеспечивает безопасность и разграничение доступа
  • Реализует системные вызовы для приложений
  • Управляет процессами и файловыми системами

Основные функции:

  • Драйверы устройств
  • Управление памятью (виртуальная память, swap)
  • Планировщик процессов
  • Сетевой стек
  • Механизмы безопасности (SELinux, capabilities)
# Проверить версию ядра:
uname -r
5.15.0-78-generic

Где находится:
Обычно /boot/vmlinuz-<версия> (сжатый образ ядра)

2. Initramfs

Initramfs - это временная корневая файловая система в памяти, которая:

  1. Загружается до монтирования реального rootfs
  2. Содержит минимальный набор утилит и драйверов
  3. Решает задачи:
    • Загрузка критических драйверов (например, для RAID/LVM)
    • Разблокировка зашифрованных разделов
    • Монтирование реального корневого раздела
    • Подготовка окружения для перехода к реальному root

Особенности:

  • Создается при установке ядра (mkinitramfs, dracut)
  • Может быть обновлен отдельно от ядра
  • Размер обычно 10-50MB
# Просмотр содержимого initramfs:
lsinitramfs /boot/initrd.img-5.15.0-78-generic | head

Где находится:
/boot/initrd.img-<версия> или /boot/initramfs-<версия>.img

3. Загрузчик

Загрузчик - это программа, которая:

  1. Загружается BIOS/UEFI
  2. Находит и загружает ядро
  3. Передает параметры ядру
  4. Обеспечивает меню выбора ОС/ядер

Основные загрузчики в Linux:

  1. GRUB2 (Grand Unified Bootloader) - самый распространенный

    • Поддержка BIOS и UEFI
    • Скрипты на языке Grub
    • Модульная архитектура
  2. SYSLINUX (для простых случаев)

  3. systemd-boot (минималистичный для UEFI)

# Обновить конфигурацию GRUB:
sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-78-generic
Found initrd image: /boot/initrd.img-5.15.0-78-generic

Где находится конфиг GRUB:
/boot/grub/grub.cfg (генерируется автоматически из /etc/default/grub и скриптов в /etc/grub.d/)

Процесс загрузки Linux

  1. BIOS/UEFI загружает загрузчик с диска
  2. Загрузчик:
    • Показывает меню (если настроено)
    • Загружает ядро и initramfs в память
    • Передает параметры ядру (root=, ro, rd.luks.uuid и т.д.)
  3. Ядро:
    • Декомпрессируется
    • Инициализирует аппаратуру
    • Монтирует initramfs как временный root
  4. Initramfs:
    • Загружает необходимые модули
    • Находит и подготавливает реальный root
    • Переключается на реальный rootfs
  5. Система инициализации (systemd/sysvinit) продолжает загрузку

Практические аспекты для DevOps

  1. Проблемы с загрузкой:

    • Добавить init=/bin/bash в параметры ядра для emergency shell
    • Использовать livecd для chroot и восстановления
  2. Кастомные ядра:

    • Собрать ядро с нужными модулями
    • Обновить initramfs (update-initramfs -u)
  3. Оптимизация:

    • Уменьшить initramfs (убрать ненужные модули)
    • Ускорить загрузку (параллельная инициализация)
  4. Безопасность:

    • Защита GRUB паролем
    • Подписанные ядра для Secure Boot
    • Шифрование initramfs
# Пример добавления параметра ядра:
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& quiet splash/' /etc/default/grub
sudo update-grub

Резюмируем

  1. Ядро - основа ОС, управляющая ресурсами и обеспечивающая работу системы
  2. Initramfs - временная FS для подготовки окружения перед монтированием root
  3. Загрузчик - мост между firmware и ОС, отвечающий за загрузку ядра

Для DevOps критически важно:

  • Понимать последовательность загрузки для troubleshooting
  • Уметь настраивать параметры ядра под конкретные задачи
  • Оптимизировать initramfs для ускорения загрузки
  • Управлять конфигурацией загрузчика в масштабируемых инфраструктурах
  • Обеспечивать безопасность на всех этапах загрузки

Эти знания особенно важны при:

  • Разработке кастомных образов ОС
  • Оптимизации времени загрузки
  • Решении проблем с драйверами устройств
  • Реализации безопасных конфигураций