Apakah initramfs menggunakan / etc / fstab?

20

Cara saya memahaminya, initramfs bertanggung jawab untuk memuat sistem file root "asli".

Sekarang, ada dua tempat di mana kita mendefinisikan root itu. Pertama kita memasukkan entri /etc/fstab. Kedua, kami menempatkan perangkat pada perintah boot kernel misalnya root=/dev/sda1.

Initramfs mana yang digunakan untuk menentukan di mana root filesystem? Jika menggunakan parameter kernel root, mengapa kita memiliki entri /etc/fstab? Opsi kedua, (berbunyi /etc/fstab), cukup tidak masuk akal karena /etc/fstabfile tersebut ada di perangkat root yang initramfs coba untuk me-mount di tempat pertama.

Hal yang sangat membingungkan.

Ahmed Ghonim
sumber

Jawaban:

14

Seperti yang Anda nyatakan, tujuan initramfs adalah untuk mendapatkan filesystem root yang "asli" terpasang (ia dapat melakukan hal-hal lain juga, tetapi ini adalah tugas umum).

Tanpa initramfs, kernel biasanya akan me-mount sebuah partisi sebagai hanya-baca dan kemudian meneruskan kontrol ke /sbin/init. Initramfs hanya mengambil alih tugas ini dari kernel, biasanya ketika sistem file root bukan partisi normal (mdraid, lvm, terenkripsi, dll).

Sekarang, selain dari latar belakang initramfs, Anda /etc/fstabberada di sistem file root Anda. Dengan demikian, ketika initramfs diluncurkan, sistem file root itu tidak ada, sehingga tidak bisa sampai ke fstab (masalah ayam dan telur).
Sebagai gantinya kita harus melewatkan parameter ke argumen boot kernel agar initramfs dapat digunakan. Biasanya ini seperti sesuatu root=/dev/sdX. Namun mungkin juga melakukan sesuatu untuk mengetahui secara otomatis di mana perangkat root Anda, dan jadi tidak ada parameter sama sekali. Karena ini hanya perangkat lunak (umumnya skrip), ia benar-benar dapat melakukan apa pun yang diinginkan untuk memasang perangkat root.

Sekarang, seperti yang dinyatakan sebelumnya, kernel akan me-mount root sebenarnya sebagai read-only. Initramfs seharusnya melakukan ini dengan tepat. Setelah initramf selesai, sistem melanjutkan proses booting seolah-olah tidak ada initram sama sekali, dan /sbin/initdimulai. Init ini kemudian memulai semua skrip boot normal Anda, dan merupakan tugas salah satu skrip ini untuk membaca /etc/fstab, beralih root menjadi read-write, dan mount semua sistem file Anda yang lain.

Patrick
sumber
Jadi, Anda mengatakan bahwa / sbin / init di dalam filesystem root sebenarnya akan memount kembali root menggunakan opsi di / etc / fstab?
Ahmed Ghonim
3
Iya. Biasanya via sederhana mount -o remount,rw /. Itu tidak akan mengubah perangkat yang dipasang, tetapi itu akan mengubah opsi pada mount. Dari halaman manual:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick
Bagaimana kita melewatkan parameter ke argumen boot kernel jika kita menggunakan baris perintah grub2? Sistem saya tidak menampilkan menu grub karena alasan tertentu.
intuited
@intuited Anda harus mengajukan pertanyaan baru. Komentar bukanlah tempat untuk tanya jawab
Patrick
lsinitramfs /boot/initrd* | fgrep fstabdan mengejutkan, initramfs memang mengandung file fstab, setidaknya untuk saya.
youfu
2

Mungkin atau mungkin tidak. Karena Initramfs dapat dibangun dengan berbagai cara (kernel hanya memuat dan menjalankan /inityang melakukan apa saja). Namun, menggunakan parameter lebih umum, karena memungkinkan lebih banyak fleksibilitas - yaitu jika sesuatu berubah Anda hanya dapat mengedit entri boot dan hal-hal tetap bekerja. Dengan root hardcod bawaan, ini tidak selalu mungkin.

Entri fstab mungkin masih diperlukan dengan cara apa pun karena juga menentukan hal-hal lain, seperti opsi mount (beberapa di antaranya dapat diubah saat bepergian) dan fsckmemesan. Juga bahkan jika itu sepenuhnya berlebihan (dan jika Initramfs menanganinya, itu mungkin berhasil tanpa), saya masih menyimpan entri di sana hanya demi kelengkapan.

frostschutz
sumber
1

Anda dapat menganggap / etc / fstab sebagai pemasangan statis, ini hanya cara melakukan tugas seperti itu, tetapi bukan satu-satunya, pada kenyataannya, jalankan perintah mount, dan Anda melihat banyak sistem file yang hilang di fstab. Servis udev dan udisk seperti itu mengatur banyak "automounting" dengan mengabaikan file / etc / fstab ...

Jadi, jika sesuatu sudah di-mount atau tidak sering tidak ada hubungannya dengan / etc / fstab.

initramfs itu hanya rootf sementara yang digunakan selama proses boot sampai rootfs "true" dipasang, jadi mengapa initramfs harus berada di / etc / fstab?

sebelk
sumber