Przeczytałem ten popularny dokument IBM (widzę, że jest to często używane w Internecie), wyjaśniając funkcję początkowego dysku RAM.
Uderzyłem w ścianę, wyobrażając sobie, jak to działa.
W dokumencie jest napisane
Program ładujący, taki jak GRUB, identyfikuje jądro, które ma zostać załadowane, i kopiuje ten obraz jądra i wszelkie powiązane initrd do pamięci
Jestem już zdezorientowany: czy kopiuje całe jądro do pamięci czy tylko jego część? Jeśli całe jądro jest w pamięci, dlaczego potrzebujemy nawet początkowego dysku RAM?
Myślałem, że celem initrd jest mieć mały ogólny obraz jądra i initrd zainstaluje w nim odpowiednie moduły przed załadowaniem obrazu jądra. Ale jeśli całe jądro jest już w pamięci, dlaczego potrzebujemy initrd?
Przywołuje to również inną sprawę, która mnie dezorientuje - gdzie znajdują się moduły ładowane do jądra? Czy wszystkie moduły jądra są przechowywane w initrd?
udev
zwykle i tak automatycznie.Odpowiedzi:
Całe jądro jest ładowane do pamięci podczas rozruchu, zwykle razem z
initramfs
obecnie. (Nadal możliwe jest skonfigurowanie systemu do uruchamiania bez,initramfs
ale jest to niezwykłe na komputerach stacjonarnych i serwerach).initramfs
„S zadaniem jest zapewnienie funkcjonalności potrzebne do montażu«prawdziwego»systemu plików i kontynuowanie uruchamiania systemu. Dotyczy to modułów jądra, a także różnych plików binarnych: potrzebujesz przynajmniejudev
sieci, ikmod
który ładuje moduły.Moduły można załadować do jądra później niż po prostu uruchomić, więc nie ma specjalnego przygotowania jądra przez
initramfs
. Mogą one być przechowywane w dowolnym miejscu: theinitramfs
,/lib/modules
na rzeczywistym systemie plików, w drzewie rozwoju jeśli opracowanie modułu ... Theinitramfs
tylko musi zawierać moduły, które są niezbędne do zamontowania głównego systemu plików (który zawiera resztę).źródło
Całe jądro (ale nie jego moduły) zostanie załadowane do pamięci. Jeśli istnieją moduły, których jądro będzie potrzebowało, zanim jakiekolwiek systemy plików będą dostępne (zazwyczaj oznacza to sterowniki systemów plików i ich urządzeń), wówczas moduły te będą w initramfs (w pamięci), a jądro załaduje je stamtąd. Inne moduły można załadować później z systemu plików.
źródło
Jądro we współczesnych konfiguracjach Linuksa jest w dużej mierze oparte na modułach, tj. Właściwe jądro (ładowane podczas rozruchu do pamięci RAM) zawiera jedynie minimalną funkcjonalność, a cała reszta jest kompilowana jako moduły (ładowane w czasie wykonywania). Aby działało to nawet wtedy, gdy np. Urządzeniami lub systemami plików wymaganymi do rozruchu są moduły, a
initramfs
ładowane jest jądro (jak sama nazwa wskazuje, jest to obszar pamięci RAM z prostym systemem plików, montowanym podczas rozruchu). Tymczasowy system plików jest zamontowany/
i zawiera programy startowe oraz wymagane moduły. Po zakończeniu uruchamianiainitramfs
Linux wykonuje polecenie apivot_root(8)
, przeszukując rzeczywistość/
i podrzucającinitramfs
zawartość.Istotą tej złożoności jest to, że np. Dystrybucja może skompilować jedno jądro (minimalne jądro i pełny zestaw modułów), a po instalacji jądra stworzyć
initramfs
dostosowany do sprzętu i konfiguracji komputera docelowego. Wszystko to jest wymagane ze względu na ogromną różnorodność urządzeń i konfiguracji „komputerów osobistych”.źródło
pivot_root
.