W czasach starożytnych jądro było mocno zakodowane, aby znać główną / mniejszą liczbę root fs i montowało to urządzenie po zainicjowaniu wszystkich sterowników urządzeń wbudowanych w jądro. rdev
Narzędzie może być wykorzystywane do zmiany numeru urządzenia głównego w jądrze bez konieczności ponownej kompilacji.
W końcu pojawiły się programy ładujące i mogły przekazać wiersz poleceń do jądra. Jeśli root=
argument został przekazany, informowało to jądro, gdzie znajduje się root fs zamiast wbudowanej wartości. Sterowniki wymagały dostępu, które wciąż musiały być wbudowane w jądro. Podczas gdy argument wygląda jak normalny węzeł urządzenia w /dev
katalogu, oczywiście nie ma /dev
katalogu przed zamontowaniem root fs, więc jądro nie może tam znaleźć węzła dev. Zamiast tego niektóre dobrze znane nazwy urządzeń są zakodowane na stałe w jądrze, aby ciąg mógł zostać przetłumaczony na numer urządzenia. Z tego powodu jądro może rozpoznać takie rzeczy jak /dev/sda1
, ale nie bardziej egzotyczne rzeczy takie jak /dev/mapper/vg0-root
UUID woluminu.
Później initrd
pojawił się na zdjęciu. Wraz z jądrem moduł ładujący initrd
ładowałby obraz, który był pewnego rodzaju skompresowanym obrazem systemu plików (obraz gzipped ext2, obraz romfów gzip, wreszcie squashfs stał się dominujący). Jądro rozpakuje ten obraz na ramdysk i zamontuje go jako root fs. Ten obraz zawierał kilka dodatkowych sterowników i skryptów rozruchowych zamiast prawdziwego init
. Te skrypty rozruchowe wykonały różne zadania w celu rozpoznania sprzętu, aktywacji takich rzeczy, jak tablice RAID i LVM, wykrycia UUID i parsowania wiersza poleceń jądra w celu znalezienia prawdziwego katalogu głównego, który może być teraz określony przez UUID, etykietę woluminu i inne zaawansowane rzeczy. Następnie zamontował prawdziwy root fs /initrd
, a następnie wykonał pivot_root
wywołanie systemowe w celu wymiany jądra /
i/initrd
, a następnie uruchom /sbin/init
na prawdziwym katalogu głównym, który następnie odmontuje /initrd
i uwolni ramdysk.
Wreszcie, dzisiaj mamy initramfs
. Jest to podobne do tego initrd
, ale zamiast być skompresowanym obrazem systemu plików ładowanym do ramdysku, jest to skompresowane archiwum CPIO. Tmpfs jest montowany jako root, a archiwum jest tam rozpakowywane. Zamiast używać pivot_root
, co uważano za brudny hack, initramfs
skrypty rozruchowe montują prawdziwy root /root
, usuwają wszystkie pliki z root tmpfs, a następnie chroot
do /root
i wykonują /sbin/init
.