1. Ядро
Ядро Linux - это фундаментальный компонент операционной системы, который:
- Управляет аппаратными ресурсами (CPU, память, устройства)
- Обеспечивает безопасность и разграничение доступа
- Реализует системные вызовы для приложений
- Управляет процессами и файловыми системами
Основные функции:
- Драйверы устройств
- Управление памятью (виртуальная память, swap)
- Планировщик процессов
- Сетевой стек
- Механизмы безопасности (SELinux, capabilities)
# Проверить версию ядра:
uname -r
5.15.0-78-generic
Где находится:
Обычно /boot/vmlinuz-<версия>
(сжатый образ ядра)
2. Initramfs
Initramfs - это временная корневая файловая система в памяти, которая:
- Загружается до монтирования реального rootfs
- Содержит минимальный набор утилит и драйверов
- Решает задачи:
- Загрузка критических драйверов (например, для 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. Загрузчик
Загрузчик - это программа, которая:
- Загружается BIOS/UEFI
- Находит и загружает ядро
- Передает параметры ядру
- Обеспечивает меню выбора ОС/ядер
Основные загрузчики в Linux:
-
GRUB2 (Grand Unified Bootloader) - самый распространенный
- Поддержка BIOS и UEFI
- Скрипты на языке Grub
- Модульная архитектура
-
SYSLINUX (для простых случаев)
-
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
- BIOS/UEFI загружает загрузчик с диска
- Загрузчик:
- Показывает меню (если настроено)
- Загружает ядро и initramfs в память
- Передает параметры ядру (root=, ro, rd.luks.uuid и т.д.)
- Ядро:
- Декомпрессируется
- Инициализирует аппаратуру
- Монтирует initramfs как временный root
- Initramfs:
- Загружает необходимые модули
- Находит и подготавливает реальный root
- Переключается на реальный rootfs
- Система инициализации (systemd/sysvinit) продолжает загрузку
Практические аспекты для DevOps
-
Проблемы с загрузкой:
- Добавить
init=/bin/bash
в параметры ядра для emergency shell
- Использовать livecd для chroot и восстановления
-
Кастомные ядра:
- Собрать ядро с нужными модулями
- Обновить initramfs (
update-initramfs -u
)
-
Оптимизация:
- Уменьшить initramfs (убрать ненужные модули)
- Ускорить загрузку (параллельная инициализация)
-
Безопасность:
- Защита GRUB паролем
- Подписанные ядра для Secure Boot
- Шифрование initramfs
# Пример добавления параметра ядра:
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& quiet splash/' /etc/default/grub
sudo update-grub
Резюмируем
- Ядро - основа ОС, управляющая ресурсами и обеспечивающая работу системы
- Initramfs - временная FS для подготовки окружения перед монтированием root
- Загрузчик - мост между firmware и ОС, отвечающий за загрузку ядра
Для DevOps критически важно:
- Понимать последовательность загрузки для troubleshooting
- Уметь настраивать параметры ядра под конкретные задачи
- Оптимизировать initramfs для ускорения загрузки
- Управлять конфигурацией загрузчика в масштабируемых инфраструктурах
- Обеспечивать безопасность на всех этапах загрузки
Эти знания особенно важны при:
- Разработке кастомных образов ОС
- Оптимизации времени загрузки
- Решении проблем с драйверами устройств
- Реализации безопасных конфигураций