Nei tempi antichi, il kernel era codificato per conoscere il numero maggiore / minore del dispositivo dei root fs e montava quel dispositivo dopo aver inizializzato tutti i driver di dispositivo, che erano integrati nel kernel. L' rdevutilità potrebbe essere utilizzata per modificare il numero del dispositivo radice nell'immagine del kernel senza doverlo ricompilare.
Alla fine è arrivato il boot loader e potrebbe passare una riga di comando al kernel. Se l' root=argomento è stato passato, ciò indicava al kernel dove si trovava la radice fs anziché il valore incorporato. I driver dovevano accedere a quelli che dovevano ancora essere integrati nel kernel. Mentre l'argomento sembra un normale nodo del dispositivo nella /devdirectory, ovviamente non esiste alcuna /devdirectory prima che il root fs sia montato, quindi il kernel non può cercare un nodo dev lì. Invece, alcuni nomi di dispositivi ben noti sono codificati nel kernel in modo che la stringa possa essere tradotta nel numero di dispositivo. Per questo motivo, il kernel può riconoscere cose come /dev/sda1, ma non cose più esotiche /dev/mapper/vg0-rooto un UUID di volume.
Più tardi, è initrdentrato in scena. Insieme al kernel, il boot loader caricava l' initrdimmagine, che era una specie di immagine del filesystem compresso (immagine ext2 gzipped, immagine rom rom gzipped, gli squashfs alla fine diventavano dominanti). Il kernel decomprimerebbe questa immagine in un ramdisk e monterebbe il ramdisk come root fs. Questa immagine conteneva alcuni driver aggiuntivi e script di avvio invece che reali init. Questi script di avvio hanno eseguito varie attività per riconoscere l'hardware, attivare elementi come array di raid e LVM, rilevare UUID e analizzare la riga di comando del kernel per trovare la radice reale, che ora potrebbe essere specificata da UUID, etichetta del volume e altre cose avanzate. Quindi ha montato il vero root fs /initrd, quindi ha eseguito la pivot_rootchiamata di sistema per far scambiare il kernel /e/initrd, quindi esegui /sbin/initsulla radice reale, che smonterebbe /initrde libererebbe il ramdisk.
Finalmente, oggi abbiamo il initramfs. Questo è simile al initrd, ma invece di essere un'immagine di filesystem compresso che viene caricata in un ramdisk, è un archivio compresso cpio. Un tmpfs viene montato come root e l'archivio viene estratto lì. Invece di usare pivot_root, che era considerato un trucco sporco, gli initramfsscript di avvio montano la radice reale dentro /root, eliminano tutti i file nella radice tmpfs, quindi chrootin /root, ed exec /sbin/init.