Głównym narzędziem służącym do uruchomienia systemu jest jądro. Jednak musi ono zostać załadowane przez program rozruchowy, który wcześniej jest ładowany przez BIOS lub UEFI. W wymienionych systemach znajdują się szczegółowe informacje dotyczące naszego sprzętu, które są przekazywane do bootloadera (programu rozruchowego). Następnie wspomniany bootloader przekazuje otrzymane informacje do jądra systemowego, które identyfikuje nasz sprzęt. Na końcu uruchamia system.

 

Zapis na newsletter!

Zanim jednak rozwinę temat dalej to jedna informacja na początek. Prowadzę regularny, cotygodniowy newsletter z poradami związanymi z Zabbixem, monitoringiem oraz dobrymi praktykami w IT. Jeżeli nie chcesz przegapić kolejnych części oraz zaproszeń na nasze darmowe szkolenia to zapraszam do zapisu. Wystarczy pobrać mój poradnik. Monitoring IT – Dobre Praktyki. Wystarczy wejść klikając na obrazek:

__________________________________________

 

Czym różni się BIOS od UEFI

Choć oba systemy spełniają tą samą funkcje, to jednak znacznie różnią się od siebie. Ich proces ładowania programu rozruchowego jest inny, dlatego warto zapoznać się z informacjami, które odróżniają je od siebie. Czym się różni BIOS od UEFI?

Bios

Basic Input/Output System jest to system lub też program, którego dane przechowuje się w specjalnym chipie znajdującym się na płycie głównej. Wspomniany system inaczej nazywany oprogramowaniem układowym. Uruchamia się przy każdym włączeniu komputera, niezależnie od dalszych czynności jakie powinien wykonać. Ważną informację jest to, że dane przechowywane przez BIOS są oddzielone od innych urządzeń magazynujących.

BIOS w urządzeniu magazynującym jest rozpoznawanym jako pierwszy. Zajmuje, początkowe 440 bajty pamięci dla programu rozruchowego. Natomiast, ogólnie te 512 pierwszych bajtów jest określane jako MBR ( Master Boot Record ). Wykorzystuje się w niej jest schemat partycji DOS, gdzie umieszczana jest tablica. Jeżeli MBR posiada błędne informacje, to system się nie uruchomi. Chyba, że wystąpi jakaś alternatywna opcja, po wybraniu której uruchomienie może wystąpić.

Czynności jakie muszą wystąpić, by system się uruchomił, gdy wykorzystujemy BIOS to:

  1. POST – identyfikuje proste awarie sprzętu;
  2. BIOS – ładuje podstawowe komponenty jak na przykład klawiatura, wideo czy też inne nośniki;
  3. BIOS – ładowany jest pierwszy etap bootloadera czyli pierwsze 440 bajtów;
  4. Po pierwszym etapie – ładowany jest drugi w którym wskazywane są opcje startowe i ładowanie jądra systemowego.

UEFI

Unified Extensible Firmware Interfejs pomimo, że służy do tych samych celów co BIOS, to jednak różni się od niego w kilku kluczowych aspektach. Jest oprogramowaniem układowym, tak jak jego poprzednik. Może identyfikować partycje i odczytywać wiele różnych systemów plików znajdujących się na nich. UEFI nie korzysta z MBR. Jedynie z pamięci NVRAM dołączonej do płyty głównej. Informacje zawarte wskazują miejsce gdzie znajdują się aplikacje EFI. Umożliwiają one uruchomienie systemu z danej partycji, dysku. Mogą również uruchomić narzędzia diagnostyczne i naprawcze. Jednak, aby mogło to wystąpić, oprogramowanie musi znajdować się na partycji z obsługiwanym systemem plików. Do kompatybilnych systemów plików możemy zaliczyć FAT12, FAT16 i FAT32. Takie podejście umożliwia znacznie więcej niż pozwalał na to BIOS.

Partycja, która zawiera aplikacje EFI nazywa się EFI System Partition lub skrótowo ESP. Nie jest ona współdzielona z innymi systemami plików. W katalogu znajdują się aplikacje zapisane w pamięci NVRAM.

Czynności jakie muszą wystąpić, by system został uruchomiony, gdy wykorzystujemy UEFI to:

  1. POST – identyfikuje proste awarie sprzętu, identycznie jak w przypadku BIOS;
  2. UEFI – ładuje podstawowe komponenty jak na przykład klawiatura, wideo czy też inne nośniki;
  3. UEFI – odczytuje definicje aplikacji przechowywanych w pamięci NVRAM. Następnie wykonuje identyfikacji na partycji ESP. Najczęściej definiowaną aplikacją jest program rozruchowy;
  4. Jeżeli aplikacja EFI jest programem rozruchowym, ładuje jądro i rozpoczyna uruchamianie systemu;

Omawiany system układowy zawiera również funkcję noszącą nazwę Secure Boot. Mogłeś się z nią spotkać, gdy konwertowałeś system Windows 10 do Windowsa 11, który wymaga włączonej tej opcji. Jest ona o tyle ważna, że ładuje jedynie aplikacje EFI autoryzowane przez producenta sprzętu. Ma swój minus ponieważ w niektórych przypadkach może zablokować możliwość instalacji niektórych systemów operacyjnych.

Program rozruchowy

Następnym w kolejności jest program rozruchowy. W wielu przypadkach możesz spotkać się z jego angielskojęzyczną nazwą czyli bootloader. Natomiast jednym z najczęściej używanych w systemach Linux jest GRUB ( Grand Unified Bootloader ). Wyświetla on listę zainstalowanych systemów operacyjnych, które możesz uruchomić. Oczywiście systemy muszą na danej liście w trakcie instalacji lub po późniejszej konfiguracji GRUBA. W przypadku jeżeli lista nie uruchamia się możesz ją wywołać przy pomocy odpowiedniego klawisza. W urządzeniu z BIOS jest to SHIFT. Natomiast w przypadku UEFI jest to klawisz ESC.

GRUB

Program rozruchowy GRUB daje możliwość wybrania zainstalowanego jądra oraz przekazania do niego parametrów. Istnieje ogólny wzorzec przekazywania takich wartości, a wygląda on jak przypisanie w programowaniu tj. opcja=wartość. W miejscu wartość możemy wprowadzić takie parametry jak:

  • acpi – czyli zaawansowany interfejs do zarządzania energią. Wprowadzając wartość acpi=off wyłączamy tę funkcję;
  • init – uruchomi sesję systemową na taką jaką ustawimy. Aby po uruchomieniu od razu wyświetliła się powłoka bash wystarczy wpisać init=/bin/bash;
  • systemd.unit – ustawiamy różny tryb uruchomienia. Opcja przyjmuje wartości zarówno liczbowe od 1 do 6 jak i określone wartości słowne jak graphical.target, emenrgency.target;
  • mem – ustawiamy określoną dostępną ilością pamięci RAM z jaką ma się uruchomić system, mem=512;
  • maxcpus – ustawiamy maksymalną ilość rdzeni procesorów z jaką system ma się uruchomić. Jeżeli wprowadzisz wartość 0 to wyłączysz obsługę multi procesorów;
  • quiet – wyłącza wszystkie powiadomienia podczas uruchamiania systemu;
  • vga – umożliwia wybór trybu wideo. Listę dostępnych wyświetlisz przy pomocy vga=ask;
  • root – ustawiamy partycję główną;
  • rootflags – opcje montowania głównego systemu plików;
  • ro –  montuje główny system plików tylko do odczytu;
  • rw – pozwala na zapis w głównym systemie plików podczas montowania.

Zmiana parametrów podczas uruchomienia systemu nie jest trwała. Po ponownym uruchomieniu wszystkie parametry powrócą do swoich standardowych wartości. Trwale jesteśmy w stanie to ustawić z pozycji systemu wprowadzając zmiany do pliku /etc/default/grub. Dokładniej w miejscu, gdzie we wskazanym pliku znajduje się dyrektywa GRUB_CMDLINE_LINUX. Wprowadzanie takich zmian jest czymś bardzo rzadkim. Jednak może okazać się bardzo pomocne w przypadku awarii. Program rozruchowy ładuje się zawsze w trakcie uruchamiania systemu. Wywołuje się go przy pomocy polecenia grub-mkconfig -o /boot/grub/grub.cfg. Natomiast parametry jakie ładują się przy bieżącej sesji znajdziesz w pliku /proc/cmdline.

Ustawienie parametrów początkowych systemu

Nie tylko przy pomocy jądra systemu określamy parametry. Niektóre komponenty składowe systemu ładują się podczas jego uruchamiania. Są to różnego rodzaju skrypty, po bardziej złożone oprogramowanie. Najczęściej skrypty służą do wykonania prostych zadań i kończą swoje działanie w trakcie tak zwanej inicjalizacji. Natomiast usługi mogą pozostać aktywne cały czas, gdy uruchomiony jest system. Powodem tego jest to że najczęściej takie usługi są odpowiedzialne za stałe funkcjonowanie systemu operacyjnego lub innego programu.

Nie istnieje jeden sposób na uruchomienie wspomnianych skryptów czy też usług. Od zawsze osoby pracujące nad Linuksem zastanawiały się, czy są w stanie to w jakiś sposób ujednolicić. Jednakże z powodu istnienia takiej ilości dystrybucji różniącej się często sposobem konfiguracji nie udało się tego kroku wykonać. Niestety nie udało się odnaleźć jednego programu który temu mógłby służyć. Natomiast to co udało się ustalić to to aby takie oprogramowanie było w stanie uruchomić, zatrzymać i zrestartować usługi systemowe. Tego typu czynności wykonuje często sam system na przykład po aktualizacji. Natomiast zawsze musi zostać wykonane ponowne uruchomienie usługi w przypadku ręcznej modyfikacji plików konfiguracyjnych. Tę ostatnią czynność jest zmuszony wykonać użytkownik lub administrator. Dlatego bardzo istotne jest aby oprogramowanie działające na usługach mogło wykonać wymienione czynności.

Inicjalizacja

Inicjalizacja, czyli ustawienie początkowych parametrów jądra rozpoczyna swoje działanie, gdy program rozruchowy ładuje jądro do pamięci RAM. Następnie jądro otrzymuje kontrolę nad procesorem i rozpoczyna wykrywanie oraz konfigurowanie podstawowych elementów systemowych. Do takich elementów zaliczamy konfigurację sprzętową oraz adresowanie pamięci. Po wykonaniu wymienionych czynności ładuje się initramfs czyli obraz głównego systemu plików, z którego korzystać będzie system podczas jego uruchamiania. Jego zadaniem jest dostarczenie niezbędnych modułów systemowych, aby następnie mógł on uzyskać dostęp do głównego systemu plików.

Jak już główny system plików będzie dostępny, zostaną domontowane pozostałe systemy plików, które zostały umieszczone w /etc/fstab. Po wykonaniu tego zadania uruchomi się narzędzie o nazwie init. Narzędzie to jest odpowiedzialne za uruchomienie wszystkich wspomnianych skryptów oraz usług. Jak już wiesz nie ma jednego narzędzia które do tego służy. Po zakończeniu wszystkich czynności, initramsfs jest usuwany z pamięci RAM.

Zawsze po uruchomieniu, szczególnie pierwszy raz, zainstalowanego systemu warto spojrzeć czy wszystko właściwie się załadowało. Najczęściej pomimo niepowodzenia w załadowaniu jakiegoś modułu system i tak uruchomi się. Aby sprawdzić, co się załadowało wystarczy, że posłużymy się poleceniem:

sudo dmesg

Tak jak pokazałem to w przykładzie, aby móc skorzystać z polecenia musimy uruchomić je jako użytkownik root lub z uprawnieniami administratora. Przykład niezaładowanego modułu wygląda następująco:

[    4.255605] r8169 0000:09:00.0: firmware: failed to load rtl_nic/rtl8168h-2.fw (-2)

[    4.255607] firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware

[    4.255607] r8169 0000:09:00.0: Direct firmware load for rtl_nic/rtl8168h-2.fw failed with error -2

[    4.255609] r8169 0000:09:00.0: Unable to load firmware rtl_nic/rtl8168h-2.fw (-2)

Pomimo braku możliwości załadowaniu modułu system uruchomił się i działa poprawnie.

BIOS, UEFI i program rozruchowy – podsumowanie

Warto poznać sposoby jakie nasze urządzenie musi przejść, nim uruchomi system. Przy dobrym sprzęcie system może uruchomić się w kilka chwil, natomiast wynik z polecenia dmesg pokazuje szczególnie ścieżkę, jaką musi przejść nim to nastąpi. Ty natomiast już wiesz czym jest BIOS, a czym UEFI. Wiesz też czym różnią się od siebie BIOS i UEFI.

Chcesz więcej?

Oczywiście, jeżeli nie chcesz przegapić tego typu materiałów, to zapisz się na mój newsletter i przy okazji odbierz darmowe bonusy, np. e-booka ze zdjęcia poniżej! Prowadzę regularny, cotygodniowy newsletter z poradami związanymi z automatyzacją, monitoringiem oraz dobrymi praktykami w IT.

Zapisy TUTAJ

Zapisz się na Newsletter i odbierz za darmo e-book "Monitoring IT"!

X