initramfs

Tymczasowy system plików ładowany do pamięci przy starcie, który pomaga jądru zamontować właściwy główny system plików. Zawiera niezbędne sterowniki i narzędzia.

initramfs (Initial RAM Filesystem) to tymczasowy, miniaturowy system plików, który jądro Linuksa rozpakowuje do pamięci RAM na samym początku bootowania — zanim w ogóle wie, jak dobrać się do twojego prawdziwego dysku. Jego jedyne zadanie: dostarczyć jądru tyle narzędzi i sterowników, żeby umiało zamontować właściwy root filesystem (np. partycję na NVMe schowaną w LVM-ie, RAID-zie albo zaszyfrowaną LUKS-em), a potem grzecznie usunąć się z drogi.

Technicznie initramfs to skompresowane archiwum cpio (dawniej zwykle gzip, dziś często zstd, lz4 albo xz). Bootloader, np. GRUB, ładuje je do pamięci razem z jądrem. Jądro rozpakowuje archiwum do tmpfs i uruchamia z niego skrypt /init. To właśnie ta różnica względem starszego initrd (który był obrazem blokowym montowanym jako urządzenie i odpalał linuxrc) — initramfs jest po prostu zawartością katalogu, więc lżejszy i elastyczniejszy.

Po co to komu w praktyce

Problem jest klasyczny: jajko i kura. Żeby zamontować root, jądro potrzebuje sterownika do kontrolera dysku — ale ten sterownik może leżeć na… tym samym dysku. initramfs przerywa ten zaklęty krąg: ma w środku moduły, narzędzia w stylu busybox i logikę do odblokowania szyfrowania czy złożenia macierzy. Po zamontowaniu właściwego rootu wykonuje switch_root i oddaje stery normalnemu init/systemd.

Obraz znajdziesz w /boot, np. /boot/initramfs-$(uname -r).img (Fedora) albo /boot/initrd.img-* (Debian/Ubuntu). Generują go narzędzia zależne od dystrybucji: dracut (Fedora/RHEL), mkinitcpio (Arch) oraz update-initramfs z paczki initramfs-tools (Debian/Ubuntu). Zajrzeć do środka bez rozbierania całości możesz przez lsinitramfs /boot/initrd.img-$(uname -r) lub lsinitrd.

Na czym się przejedziesz

Najczęstszy zgon to zmiana układu dysków — przejście na LVM, RAID albo LUKS — bez przebudowania initramfs. Stary obraz nie ma odpowiednich sterowników, więc dostajesz Kernel panic — not syncing: VFS: Unable to mount root fs albo lądujesz w awaryjnym shellu z promptem (initramfs). Lekarstwo: po takich zmianach zawsze przebuduj obraz (np. sudo dracut --force lub sudo update-initramfs -u) i sprawdź, że odnosisz się do dysku przez stabilny UUID, a nie ulotne /dev/sda. Drugi mit: że initramfs jest „opcjonalny”. Owszem, da się zbudować jądro bez niego, ale tylko gdy sterowniki roota wkompilujesz na sztywno w kernel.

Pojęcia powiązane: initrd, bootloader (GRUB), kernel, tmpfs, cpio, dracut, mkinitcpio, switch_root, LUKS, LVM, busybox.