Liệu initramfs có sử dụng / etc / fstab không?


20

Theo cách tôi hiểu, initramfs chịu trách nhiệm tải hệ thống tập tin gốc "thực".

Bây giờ, có hai nơi chúng ta xác định gốc đó. Đầu tiên chúng tôi đặt một mục trong /etc/fstab. Thứ hai, chúng tôi đặt thiết bị vào các lệnh khởi động kernel, vd root=/dev/sda1.

Cái nào mà initramfs sử dụng để xác định hệ thống tập tin gốc ở đâu? Nếu nó sử dụng tham số kernel root, tại sao chúng ta có một mục trong /etc/fstab? Tùy chọn thứ hai, (nó đọc /etc/fstab), khá phi logic vì /etc/fstabtệp nằm trên thiết bị gốc mà initramfs đang cố gắn ở vị trí đầu tiên.

Những thứ rất khó hiểu.

Câu trả lời:


14

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/fstabcư 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/initkhở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.


Vì vậy, bạn đang nói rằng / sbin / init bên trong hệ thống tập tin gốc thực sự sẽ nhắc lại root bằng cách sử dụng các tùy chọn trong / etc / fstab?
Ahmed Ghonim

3
Đúng. Thông thường thông qua một đơn giản mount -o remount,rw /. Nó sẽ không thay đổi thiết bị được gắn, nhưng nó sẽ thay đổi các tùy chọn trên giá treo. Từ trang người đàn ông:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick

Làm thế nào để chúng ta truyền một tham số vào các đối số khởi động kernel nếu chúng ta đang sử dụng dòng lệnh grub2? Hệ thống của tôi không hiển thị menu grub vì một số lý do.
trực giác

@intuited Bạn nên hỏi một câu hỏi mới. Nhận xét không phải là nơi dành cho Hỏi & Đáp
Patrick

lsinitramfs /boot/initrd* | fgrep fstabvà thật bất ngờ, initramfs có chứa tệp fstab, ít nhất là đối với tôi.
youfu

2

Nó có thể hoặc không. Vì initramfs có thể được xây dựng theo nhiều cách khác nhau (kernel chỉ cần tải nó và chạy /initbất cứ thứ gì). Tuy nhiên, việc sử dụng một tham số là phổ biến hơn, vì nó cho phép linh hoạt hơn - tức là nếu có gì đó thay đổi, bạn chỉ cần chỉnh sửa mục khởi động và mọi thứ tiếp tục hoạt động. Với một gốc được mã hóa dựng sẵn, điều này không nhất thiết là có thể.

Mục nhập fstab vẫn có thể được yêu cầu theo cách nào đó vì nó cũng xác định những thứ khác, chẳng hạn như tùy chọn gắn kết (một số có thể thay đổi khi đang di chuyển) và fsckđặt hàng. Ngoài ra, ngay cả khi nó hoàn toàn không cần thiết (và nếu initramfs xử lý nó, nó có thể hoạt động mà không có), tôi vẫn giữ mục nhập trong đó chỉ đơn giản là vì lợi ích hoàn toàn.


1

Bạn có thể coi / etc / fstab là gắn kết tĩnh, đó chỉ là một cách để thực hiện một tác vụ như vậy, nhưng thực tế không phải là duy nhất, chạy lệnh mount và bạn thấy rất nhiều hệ thống tệp bị thiếu trong fstab. Dịch vụ như một udev và udisk quản lý phần lớn "autoounting" bỏ qua tệp / etc / fstab ...

Vì vậy, nếu một cái gì đó được gắn kết hoặc không thường xuyên, nó không có gì để làm với / etc / fstab.

initramfs chỉ là một rootfs tạm thời được sử dụng trong quá trình khởi động cho đến khi rootfs "true" được gắn kết, vậy tại sao initramfs phải được bật / etc / fstab?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.