// 05 из 08
initramfs
5.1 Зачем нужен initramfs
ПРОБЛЕМА (замкнутый круг): Ядро не знает, как читать /dev/sda1 до загрузки драйверов. Но драйверы хранятся на /dev/sda1. РЕШЕНИЕ: initramfs содержит минимальный набор драйверов и утилит прямо в оперативной памяти. Формат: cpio архив, сжатый gzip/lz4/zstd Размер: обычно 40-80 МБ
5.2 Состав initramfs
RAM ┌─────────────────────────────────────────┐ │ initramfs │ │ │ │ /bin/busybox ← 100+ утилит в одном │ │ /sbin/init ← скрипт инициализации│ │ /sbin/modprobe ← загрузка модулей │ │ /lib/modules/ ← драйверы ядра (.ko) │ │ /lib/udev/ ← udev для устройств │ │ /etc/mdadm.conf ← RAID конфигурация │ │ /etc/lvm/ ← LVM конфигурация │ │ /scripts/ ← скрипты загрузки │ └─────────────────────────────────────────┘
5.3 Пошаговый процесс
1. Ядро монтирует initramfs как /
│
2. Запускается /init
│
3. Монтирование /proc и /sys
mount -t proc proc /proc
mount -t sysfs sysfs /sys
│
4. Запуск udev
udevd --daemon
• Определяет устройства
• Создаёт /dev/sda, /dev/nvme0n1...
• Загружает нужные модули
│
5. Загрузка драйверов
modprobe ext4
modprobe ahci (SATA)
modprobe nvme (NVMe)
│
6. Если шифрование (LUKS):
cryptsetup luksOpen /dev/sda2
[запрос пароля у пользователя]
│
7. Если LVM:
vgchange -a y
[активация логических томов]
│
8. Монтирование корневого раздела
mount /dev/sda1 /root
│
9. switch_root /root /sbin/init
initramfs выгружается из памяти
Управление переходит к systemd
5.4 Переключение корня (switch_root)
ДО switch_root: ПОСЛЕ switch_root:
RAM: RAM:
┌──────────────┐ ┌──────────────┐
│ initramfs │ ← / │ освобождено │
│ /bin │ └──────────────┘
│ /lib │
│ /dev │ Диск /dev/sda1:
└──────────────┘ ┌──────────────┐
│ / (root) │ ← /
Диск /dev/sda1: │ /bin │
┌──────────────┐ │ /etc │
│ реальный / │ ← /root │ /home │
└──────────────┘ └──────────────┘
5.5 Полезные команды
# Просмотр содержимого initramfs lsinitramfs /boot/initramfs-$(uname -r).img # Размер initramfs ls -lh /boot/initramfs-$(uname -r).img