14.11.20223 min

Redakcja Bulldogjob

Jak uruchamia się Linux?

Linux to być może najważniejszy kawałek kodu na świecie. Dowiedz się, jak działa.

Jak uruchamia się Linux?

Niniejszy artykuł pochodzi z książki pt. Jak działa Linux. Podręcznik administratora. Wydanie III” Briana Warda (Helion 2022)


5.2. Inicjowanie jądra i opcje rozruchu

Podczas rozruchu jądro Linuksa inicjuje się w następującej kolejności.

  1. Sprawdzenie procesora.
  2. Sprawdzenie pamięci.
  3. Rozpoznawanie magistrali urządzeń.
  4. Rozpoznawanie urządzeń.
  5. Konfigurowanie uzupełniających podsystemów jądra (sieć i tym podobne).
  6. Montowanie podstawowego systemu plików.
  7. Uruchamianie przestrzeni użytkownika.

Pierwsze dwa kroki nie są szczególnie spektakularne, ale gdy jądro dotrze do rozpoznawania urządzeń, pojawia się pytanie o zależności między nimi. Przykładowo sterowniki urządzenia dyskowego mogą zależeć od funkcji obsługi magistrali oraz obsługi podsystemu SCSI. Na dalszym etapie procesu inicjacji jądro musi zamontować podstawowy system plików, żeby później uruchomić program init.

Zwykle nie musimy się przejmować tymi zależnościami. Wyjątek może stanowić sytuacja, kiedy niektóre niezbędne komponenty nie są częścią samego jądra, ale dostępne są jako zewnętrzne moduły. Na niektórych komputerach konieczne może być załadowanie tych modułów jeszcze przed zamontowaniem samego systemu plików (…)

Jądro generuje określone typy komunikatów w związku z przygotowaniami do uruchomienia pierwszego procesu przestrzeni użytkownika:

Freeing unused kernel memory: 2408K
Write protecting the kernel read-only data: 20480k
Freeing unused kernel memory: 2008K
Freeing unused kernel memory: 1892K


W tym przypadku jądro nie tylko oczyszcza część nieużywanej pamięci, ale też chroni swoje własne dane. Jeśli zatem korzystasz z wystarczającego nowego jądra, zauważysz, że uruchamia ono pierwszy proces przestrzeni użytkownika jako proces init:

Run /init as init process
     with arguments:
--ciach--


Dalej powinno być widoczne, że podłączany jest główny system plików oraz uruchamiany demon systemd, który kieruje do dziennika jądra kilka własnych komunikatów:

EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA
+APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4
+SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
systemd[1]: Detected architecture x86-64.
systemd[1]: Set hostname to <duplex>.


Na tym etapie zdecydowanie wiadomo, że przestrzeń użytkownika została zainicjowana.


5.3. Parametry jądra

Podczas uruchamiania jądro systemu Linux otrzymuje zestaw tekstowych parametrów jądra zawierających kilka dodatkowych szczegółów dotyczących systemu. Parametry te definiują wiele różnych typów zachowań, takich jak ilość komunikatów diagnostycznych wypisywanych przez jądro, albo podają opcje właściwe dla różnych sterowników.

Parametry przekazane działającemu jądru systemu możesz przejrzeć w pliku /proc/cmdline:

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.15.0-43-generic root=UUID=17f12d53-c3d7-4ab3-943e
-a0a72366c9fa ro quiet splash vt.handoff=1


Parametrami mogą być znaczniki składające się z pojedynczego słowa, takie jak ro lub quiet, ale mogą być nimi również pary klucz=wartość, takie jak vt.handoff=1. Wiele parametrów nie ma większego znaczenia, na przykład parametr splash pozwalający wyświetlić ekran startowy, ale jeden z nich jest absolutnie niezbędny — root. Definiuje on lokalizację podstawowego systemu plików. Bez niego jądro nie będzie mogło poprawnie uruchomić przestrzeni użytkownika.

Podstawowy system plików możesz zdefiniować za pomocą pliku urządzenia, tak jak w poniższym przykładzie:

root=/dev/sda1


W przypadku najnowszych systemów częściej używane są dwie alternatywy. Przede wszystkim możesz spotkać się z następującym woluminem logicznym:

root=/dev/mapper/my-system-root


Możesz również ujrzeć identyfikator UUID:

root=UUID=17f12d53-c3d7-4ab3-943e-a0a72366c9fa


Obie alternatywy są preferowane, gdyż nie są zależne od konkretnego mapowania urządzeń jądra.

Parametr ro nakazuje, aby jądro zamontowało podstawowy system plików w trybie tylko do odczytu w momencie uruchamiania przestrzeni użytkownika. Jest to normalne zachowanie. Tryb tylko do odczytu sprawia, że program fsck może bezpiecznie skontrolować system plików przed podjęciem próby wykonania jakiejkolwiek poważnej operacji. Po zakończeniu takiej kontroli proces uruchamiania systemu może ponownie zamontować podstawowy system plików w trybie pełnego dostępu.

Jeżeli jądro Linuksa natknie się na parametr, którego nie rozumie, mimo wszystko go zapamiętuje, a następnie przekazuje jako parametr programu init podczas uruchamiania przestrzeni użytkownika. Jeśli na przykład wśród parametrów jądra znajdzie się wartość -s, jądro przekaże ją do programu init, w wyniku czego ten uruchomi się w trybie pojedynczego użytkownika.

Artykuł stanowi fragment książki pt. „Jak działa Linux. Podręcznik administratora. Wydanie III” Briana Warda (Helion 2022)

<p>Loading...</p>