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
← Ядро Linux