У стародавні часи ядро було важко закодовано, щоб знати основну / меншу кількість кореневих файлів і встановити цей пристрій після ініціалізації всіх драйверів пристроїв, вбудованих у ядро. rdev
Утиліта може бути використана для зміни кількості кореневого пристрою в образі ядра без необхідності перекомпілювати його.
Врешті-решт завантажувачі завантажуються і можуть передати командний рядок до ядра. Якщо root=
аргумент був переданий, він повідомив ядро, де знаходиться корінь fs замість вбудованого значення. Для доступу до драйверів, які ще мали бути вбудовані в ядро, потрібні були драйвери. Хоча аргумент виглядає як звичайний вузол пристрою в /dev
каталозі, очевидно, що /dev
до монтажу кореня fs немає каталогу, тому ядро не може шукати там вузол dev. Натомість деякі відомі імена пристроїв важко кодуються в ядро, тому рядок може бути переведений на номер пристрою. Через це ядро може розпізнавати такі речі /dev/sda1
, але не більш екзотичні речі, такі /dev/mapper/vg0-root
як UUID.
Пізніше initrd
прийшов у світ картину. Поряд з ядром завантажувач завантажував initrd
зображення, яке було якось стислим зображенням файлової системи (gzipped зображення ext2, зображення gzipped romfs, нарешті стали домінуючими). Ядро декомпресує це зображення на рамковий диск і монтує ramdisk як root fs. Це зображення містило деякі додаткові драйвери та сценарії завантаження замість реального init
. Ці сценарії завантаження виконували різні завдання з розпізнавання апаратного забезпечення, активації таких речей, як рейдові масиви та LVM, виявлення UUID та розбору командного рядка ядра, щоб знайти справжній корінь, який тепер може бути визначений UUID, міткою тома та іншими розширеними речами. Потім він встановив справжній root fs /initrd
, а потім виконав pivot_root
системний виклик, щоб ядро змінилось /
і/initrd
, то виконайте виконання /sbin/init
справжнього кореня, який потім відключить /initrd
та звільнить рамбіск.
Нарешті, сьогодні у нас є initramfs
. Це схоже на initrd
файл, але замість того, щоб бути стислим зображенням файлової системи, завантаженим у рамковий диск, це стислий архів cpio. Tmpfs змонтовано як корінь, і там архів витягується. Замість використання pivot_root
, яке розцінювалося як брудний хак, initramfs
завантажувальні скрипти монтують справжній корінь /root
, видаляють усі файли в корені tmpfs, потім chroot
у /root
, і exec /sbin/init
.