Saya membaca dokumentasi IBM yang populer ini (saya melihatnya cukup sering di web) menjelaskan fungsi disk RAM awal.
Saya menabrak dinding dalam membuat konsep bagaimana ini bekerja sekalipun.
Dalam dokumen itu tertulis
Boot loader, seperti GRUB, mengidentifikasi kernel yang akan dimuat dan menyalin gambar kernel ini dan initrd terkait ke dalam memori
Saya sudah bingung: Apakah ini menyalin seluruh kernel ke memori atau hanya sebagian saja? Jika seluruh kernel ada di memori maka mengapa kita bahkan membutuhkan disk RAM awal?
Saya pikir tujuan initrd adalah dapat memiliki imej kernel kecil yang digeneralisasi dan initrd akan menginstal modul yang benar di dalamnya sebelum imej kernel dimuat. Tetapi jika seluruh kernel sudah ada di memori mengapa kita perlu initrd?
Itu juga memunculkan hal lain yang membingungkan saya - di mana modul-modul yang dimuat ke kernel berada? Apakah semua modul kernel disimpan di dalam initrd?
udev
biasanya, dan ya, secara otomatis.Jawaban:
Seluruh kernel dimuat ke dalam memori saat boot, biasanya bersamaan dengan
initramfs
saat ini. (Masih dimungkinkan untuk membuat sistem untuk boot tanpa,initramfs
tetapi itu tidak biasa pada desktop dan server.)The
initramfs
's berperan untuk menyediakan fungsi yang dibutuhkan untuk me-mount 'nyata' filesystem dan melanjutkan proses boot. Itu melibatkan modul kernel, dan juga berbagai binari: setidaknya Anda perluudev
, mungkin beberapa jaringan, dankmod
yang memuat modul.Modul dapat dimuat ke dalam kernel lebih dari sekedar boot, jadi tidak ada persiapan khusus oleh kernel
initramfs
. Mereka dapat disimpan di mana saja: yanginitramfs
,/lib/modules
pada filesystem nyata, di pohon pengembangan jika Anda sedang mengembangkan sebuah modul ... Theinitramfs
hanya perlu berisi modul yang diperlukan untuk me-mount filesystem root (yang berisi sisanya).sumber
Seluruh kernel (tetapi bukan modulnya) akan dimuat ke dalam memori. Jika ada modul yang dibutuhkan kernel sebelum filesystem apa pun tersedia (ini biasanya berarti driver untuk filesystem dan perangkatnya), maka modul-modul itu akan ada di initramfs (di memori), dan kernel akan memuatnya dari sana. Modul-modul lain dapat diambil nanti dari sistem file.
sumber
Kernel dalam pengaturan Linux modern berbasis modul, yaitu kernel yang tepat (dimuat saat boot ke RAM) hanya mencakup fungsionalitas minimum, semua sisanya dikompilasi sebagai modul (dapat dimuat saat runtime). Untuk membuat ini bekerja bahkan ketika misalnya perangkat atau sistem file yang diperlukan untuk boot adalah modul, sebuah
initramfs
dimuat dengan kernel (seperti namanya, ini adalah area RAM dengan sistem file sederhana, dipasang pada saat boot). Sistem file sementara ini sudah terpasang/
, dan berisi program startup dan modul yang diperlukan. Setelah startup dinyalakaninitramfs
, Linux mengeksekusi apivot_root(8)
, mem-moun yang asli/
dan melemparkaninitramfs
konten.Inti dari kerumitan ini adalah bahwa misalnya distribusi dapat mengkompilasi satu kernel (kernel minimal dan modul set lengkap), dan pada pemasangan kernel membuat yang
initramfs
disesuaikan dengan perangkat keras dan pengaturan mesin target. Semua ini diperlukan karena beragamnya perangkat dan konfigurasi "Komputer Pribadi".sumber
pivot_root
.