Như bạn đã nói, mục đích của initramfs là để hệ thống tập tin gốc "thực sự" được gắn kết (nó cũng có thể làm những việc khác, nhưng đây là nhiệm vụ chung).
Nếu không có initramfs, kernel thường sẽ gắn phân vùng lên dưới dạng chỉ đọc và sau đó chuyển quyền điều khiển sang /sbin/init
. Một initramfs chỉ đảm nhận nhiệm vụ này từ kernel, thông thường khi hệ thống tập tin gốc không phải là một phân vùng bình thường (mdared, lvm, được mã hóa, v.v.).
Bây giờ, ngoài nền tảng trên initramfs, bạn /etc/fstab
cư trú trên hệ thống tập tin gốc của bạn. Như vậy, khi initramfs được khởi chạy, hệ thống tập tin gốc không có ở đó và vì vậy nó không thể truy cập vào fstab (vấn đề về gà và trứng).
Thay vào đó, chúng ta phải truyền một tham số vào các đối số khởi động kernel cho initramfs để sử dụng. Thông thường đây là một cái gì đó như root=/dev/sdX
. Tuy nhiên, nó cũng có thể làm một cái gì đó để tự động tìm ra thiết bị gốc của bạn ở đâu, và vì vậy không có tham số nào cả. Vì nó chỉ là phần mềm (nói chung là một tập lệnh), nên nó thực sự có thể làm bất cứ điều gì nó muốn để gắn thiết bị gốc.
Bây giờ, như đã nêu trước đó, kernel sẽ gắn kết root thực sự dưới dạng chỉ đọc. Các initramfs nên làm chính xác điều này. Khi initramfs được thực hiện, hệ thống tiến hành khởi động chính xác như thể không có initramfs nào cả, và /sbin/init
khởi động. Sau đó, init này bắt đầu tất cả các tập lệnh khởi động bình thường của bạn và đó là công việc của một trong những tập lệnh này để đọc /etc/fstab
, chuyển root sang đọc-ghi và gắn kết tất cả các hệ thống tập tin khác của bạn.