Vào thời cổ đại, hạt nhân được mã hóa cứng để biết số chính / phụ của thiết bị gốc và gắn thiết bị đó sau khi khởi chạy tất cả các trình điều khiển thiết bị được tích hợp vào kernel. Các rdev
tiện ích có thể được sử dụng để thay đổi số lượng thiết bị gốc trong hình ảnh hạt nhân mà không cần phải biên dịch lại nó.
Cuối cùng, bộ tải khởi động đã xuất hiện và có thể truyền một dòng lệnh đến kernel. Nếu root=
đối số được thông qua, điều đó đã nói với kernel nơi fs gốc thay vì giá trị tích hợp. Các trình điều khiển cần thiết để truy cập vẫn phải được tích hợp vào kernel. Mặc dù đối số trông giống như một nút thiết bị bình thường trong /dev
thư mục, rõ ràng không có /dev
thư mục nào trước khi fs gốc được gắn kết, vì vậy kernel không thể tìm kiếm một nút dev ở đó. Thay vào đó, một số tên thiết bị nổi tiếng nhất định được mã hóa cứng vào kernel để chuỗi có thể được dịch sang số thiết bị. Bởi vì điều này, hạt nhân có thể nhận ra những thứ như /dev/sda1
, nhưng không phải những thứ kỳ lạ hơn như /dev/mapper/vg0-root
hoặc một khối lượng UUID.
Sau đó, initrd
đi vào hình ảnh. Cùng với kernel, trình tải khởi động sẽ tải initrd
hình ảnh, đó là một loại hình ảnh hệ thống tập tin nén (hình ảnh extzip, hình ảnh romfs được nén, squashfs cuối cùng đã trở thành ưu thế). Kernel sẽ giải nén hình ảnh này thành một ramdisk và gắn ramdisk làm fs gốc. Hình ảnh này chứa một số trình điều khiển bổ sung và tập lệnh khởi động thay vì thực init
. Các tập lệnh khởi động này đã thực hiện các tác vụ khác nhau để nhận ra phần cứng, kích hoạt những thứ như mảng đột kích và LVM, phát hiện UUID và phân tích dòng lệnh kernel để tìm root thực, giờ đây có thể được chỉ định bởi UUID, nhãn âm lượng và các thứ nâng cao khác. Sau đó, nó gắn fs gốc thực vào /initrd
, sau đó thực hiện lệnh pivot_root
gọi hệ thống để có trao đổi kernel /
và/initrd
, sau đó /sbin/init
thực thi trên root thực sự, sau đó sẽ ngắt kết nối /initrd
và giải phóng ramdisk.
Cuối cùng, hôm nay chúng ta có initramfs
. Điều này tương tự như initrd
, nhưng thay vì là một hình ảnh hệ thống tập tin nén được tải vào một ramdisk, nó là một kho lưu trữ cpio nén. Một tmpfs được gắn kết như là root, và kho lưu trữ được trích xuất ở đó. Thay vì sử dụng pivot_root
, được coi là một hack bẩn, các initramfs
kịch bản khởi động gắn root thực sự vào /root
, xóa tất cả các tệp trong root tmpfs, sau đó chroot
vào /root
và thực thi /sbin/init
.