Pada zaman dahulu, kernel diberi kode keras untuk mengetahui perangkat utama / minor dari root fs dan memasang perangkat itu setelah menginisialisasi semua driver perangkat, yang dibangun ke dalam kernel. The rdev
utilitas dapat digunakan untuk mengubah jumlah perangkat root pada gambar kernel tanpa harus mengkompilasi ulang itu.
Akhirnya boot loader datang dan dapat melewati baris perintah ke kernel. Jika root=
argumen itu disahkan, itu memberitahu kernel di mana root fs bukan nilai bawaan. Driver diperlukan untuk mengakses yang masih harus dibangun ke dalam kernel. Sementara argumennya terlihat seperti simpul perangkat normal dalam /dev
direktori, jelas tidak ada /dev
direktori sebelum root fs di-mount, jadi kernel tidak dapat mencari node dev di sana. Sebaliknya, nama-nama perangkat tertentu yang terkenal sulit dikodekan ke dalam kernel sehingga string dapat diterjemahkan ke nomor perangkat. Karena itu, kernel dapat mengenali hal-hal seperti /dev/sda1
, tetapi tidak hal-hal yang lebih eksotis seperti /dev/mapper/vg0-root
atau volume UUID.
Kemudian, initrd
gambar itu muncul. Bersamaan dengan kernel, boot loader akan memuat initrd
gambar, yang merupakan semacam gambar sistem file terkompresi (gzipped ext2 image, gzipped image romfs, squashfs akhirnya menjadi dominan). Kernel akan mendekompres gambar ini ke dalam ramdisk dan me-mount ramdisk sebagai root fs. Gambar ini berisi beberapa driver tambahan dan skrip boot bukan yang asli init
. Skrip boot ini melakukan berbagai tugas untuk mengenali perangkat keras, mengaktifkan hal-hal seperti raid arrays dan LVM, mendeteksi UUID, dan mengurai baris perintah kernel untuk menemukan root yang sebenarnya, yang sekarang dapat ditentukan oleh UUID, label volume dan hal-hal canggih lainnya. Kemudian me-mount root nyata fs di /initrd
, kemudian mengeksekusi pivot_root
panggilan sistem untuk memiliki swap kernel /
dan/initrd
, kemudian exec /sbin/init
pada root sebenarnya, yang kemudian akan meng /initrd
- unmount dan membebaskan ramdisk.
Akhirnya, hari ini kita punya initramfs
. Ini mirip dengan initrd
, tetapi alih-alih menjadi image sistem file terkompresi yang dimuat ke dalam ramdisk, ini adalah arsip cpio terkompresi. Tmpfs dipasang sebagai root, dan arsip diekstraksi di sana. Alih-alih menggunakan pivot_root
, yang dianggap sebagai hack kotor, initramfs
skrip boot me-mount root asli /root
, menghapus semua file di root tmpfs, lalu chroot
ke /root
, dan exec /sbin/init
.