Các đĩa RAM ban đầu (initrd) thường là một phiên bản rút gọn của hệ thống tập tin gốc có chứa duy nhất đó là cần thiết để gắn kết hệ thống tập tin gốc thực tế và tay tắt khởi động nó.
Khởi đầu tồn tại bởi vì trong các hệ thống hiện đại, bộ tải khởi động không thể đủ thông minh để tìm hệ thống tập tin gốc một cách đáng tin cậy. Có quá nhiều khả năng cho một chương trình nhỏ như bộ tải khởi động để trang trải. Xem xét root NFS, thẻ RAID không chuẩn, v.v ... Bộ tải khởi động phải thực hiện công việc của mình bằng cách chỉ sử dụng BIOS cộng với bất kỳ mã nào có thể được nhồi nhét vào khu vực khởi động.
Các initrd được lưu trữ ở đâu đó mà bộ tải khởi động có thể tìm thấy và nó đủ nhỏ để có thêm không gian cần thiết thường không làm phiền bất cứ ai. (Trong các hệ thống nhúng nhỏ, thường không có root "thực", chỉ là initrd.)
Các initrd là quý giá: nội dung của nó phải được bảo tồn trong mọi điều kiện, bởi vì nếu initrd bị hỏng, hệ thống không thể khởi động. Một lựa chọn thiết kế mà các nhà thiết kế của nó đưa ra để đảm bảo điều này là làm cho bộ tải khởi động tải chỉ đọc initrd. Có những nguyên tắc khác mà làm việc về phía này, quá, chẳng hạn như trong trường hợp của các hệ thống nhỏ, nơi không có "thực" root, bạn vẫn gắn riêng biệt /tmp
, /var/cache
và như vậy để lưu trữ mọi thứ. Thay đổi initrd chỉ được thực hiện hiếm khi, và sau đó nên được thực hiện rất cẩn thận.
Trở lại với trường hợp bình thường, nơi có là một hệ thống tập tin gốc thực tế, nó là bước đầu gắn read-only vì initrd là. Sau đó, nó được giữ ở chế độ chỉ đọc càng lâu càng tốt vì nhiều lý do tương tự. Bất kỳ ghi vào gốc thực sự cần phải được thực hiện cho đến khi hệ thống được khởi động, theo sở thích hoặc ít nhất là cho đến cuối quá trình khởi động khi không thể thỏa mãn sở thích đó.
Điều quan trọng nhất xảy ra trong giai đoạn chỉ đọc này là hệ thống tập tin gốc được kiểm tra để xem liệu nó có bị xóa sạch không. Đó là điều mà trình tải khởi động chắc chắn có thể làm thay vì để nó vào initrd, nhưng điều gì sẽ xảy ra nếu hệ thống tập tin gốc không được xử lý sạch? Sau đó, nó phải gọi fsck
để kiểm tra và có thể sửa nó. Vì vậy, nơi nào sẽ initrd
nhận được fsck
, nếu nó chịu trách nhiệm cho bước này thay vì chờ đợi cho đến khi bàn giao đến gốc "thực sự"? Bạn có thể nói rằng bạn cần sao chép fsck
vào initrd
khi xây dựng nó, nhưng bây giờ nó lớn hơn. Và trên hết, mà fsck
bạn sẽ sao chép? Các hệ thống Linux thường xuyên sử dụng hàng tá hệ thống tập tin khác nhau. Bạn có chỉ sao chép cái cần thiết cho root thực sự tại thời điểminitrd
được tạo ra? Bạn có tăng kích thước initrd
bằng cách sao chép tất cả fsck.foo
các chương trình có sẵn vào nó, trong trường hợp hệ thống tập tin gốc sau đó được di chuyển sang một số loại hệ thống tập tin khác và ai đó quên xây dựng lại initrd?
Các kiến trúc sư hệ thống khởi động Linux đã khôn ngoan chọn không gây gánh nặng cho các vấn đề này. Họ ủy thác kiểm tra hệ thống tập tin gốc thực sự cho hệ thống tập tin gốc thực sự, vì nó ở vị trí tốt hơn để làm điều đó hơn so với initrd.
Khi quá trình khởi động đã tiến hành đủ xa để đảm bảo an toàn, initrd sẽ được hoán đổi từ bên dưới gốc thực pivot_root(8)
và hệ thống tập tin được hiển thị lại ở chế độ đọc-ghi.