boot(7) Miscellaneous Information Manual boot(7)

boot - proces rozruchu systemu w stylu UNIX System V wydanie 4

Proces rozruchu (lub „sekwencja rozruchowa”) różni się w detalach pomiędzy systemami, ale może być z grubsza podzielony na fazy kontrolowane przez następujące komponenty:

(1)
sprzęt
(2)
program rozruchowy
(3)
jądro
(4)
proces w przestrzeni użytkownika root (init i inittab)
(5)
skrypty rozruchowe

Poniżej opisano bardziej szczegółowo każdy z etapów.

Po uruchomieniu lub sprzętowym resecie, kontrola jest przekazywana programowi przechowywanemu w pamięci tylko do odczytu (zwykle PROM); ze względów historycznych dotyczących komputera osobistego, program ten jest często nazywany „BIOS-em”.

Program zwykle przeprowadza podstawową samokontrolę komputera oraz odczytuje pamięć nieulotną pozyskując dalsze parametry. Pamięć ta w zwykłym komputerze zasilana jest baterią CMOS, dlatego często nazywana jest „CMOS-em”; natomiast poza światem komputerów osobistych zwykle zwie się „NVRAM-em” (ang. „nonvolatile RAM” - nieulotny RAM).

Parametry przechowywane w NVRAM różnią się pomiędzy systemami, ale powinny określać przynajmniej urządzenie, które zawiera program rozruchowy lub choć urządzenie, które powinno być sprawdzone w celu odszukania tego programu; takie urządzenie jest zwane „urządzeniem rozruchowym”. Etap rozruchu sprzętowego ładuje program rozruchowy z ustalonej pozycji na urządzeniu rozruchowym i przekazuje do niego dalszą kontrolę.

Urządzenie z którego można załadować program rozruchowy można dołączyć przez sieć; w takim przypadku dalsze detale rozruchu są określone protokołami takimi jak DHCP, TFTP, PXE, Etherboot, itp.

Głównym zadaniem programu rozruchowego jest odnalezienie jądra na jakimś urządzeniu, załadowanie i uruchomienie go. Większość programów może być interaktywna, aby umożliwić wybranie innego jądra (być może jego kopii zapasowej, jeśli ostatnio skompilowane jądro nie działa) i przekazanie opcjonalnych parametrów do jądra.

W tradycyjnych komputerach program rozruchowy jest położony w pierwszym 512-bajtowym bloku urządzenia rozruchowego, blok ten nazywa się „MBR” (ang. Master Boot Record - główny sektor rozruchowy).

W większości systemów, ze względu na wiele ograniczeń, program rozruchowy jest uproszczony. Nawet w systemach innych niż komputery osobiste istnieją pewne ograniczenia dotyczące jego rozmiaru i złożoności, ale rozmiar MBR na zwykłym komputerze (512 bajtów, uwzględniając w tym tablicę partycji) czyni niemal niemożliwym dodanie większej liczby funkcji.

Z tego względu większość systemów dzieli rolę ładowania systemu operacyjnego pomiędzy pierwotny program rozruchowy i wtórny program rozruchowy, ten drugi może już zajmować większą powierzchnię na trwałym magazynie danych, takim jak partycja dysku.

W Linuksie menedżerem rozruchu jest często grub(8) (alternatywą jest lilo(8)).

Podczas ładowania, jądro dokonuje inicjalizacji wielu części komputera i systemu operacyjnego; każdy fragment oprogramowania odpowiedzialny za takie zadanie jest zwykle uważany za „sterownik” danej części. Jądro uruchamia wymianę pamięci wirtualnej (we współczesnych jądrach Linux dokonuje tego proces jądra zwany „kswapd”) i montuje pewne systemy plików w korzeniu systemu plików /.

Część parametrów, które można przekazać do jądra odnosi się do tych aktywności (na przykład można przesłonić domyślny katalog główny systemu plików); więcej informacji o parametrach jądra znajduje się w podręczniku bootparam(7).

Dopiero wówczas jądro tworzy pierwszy proces w przestrzeni użytkownika, któremu nadawany jest identyfikator procesu (PID) numer 1. Proces ten tradycyjnie wykonuje program /sbin/init, do którego przekazywane są parametry nieobsłużone do tej pory przez jądro.

Poniższy opis dotyczy systemu operacyjnego działącego w oparciu o UNIX System V wydanie 4. Wiele powszechnie używanych systemów przyjęło powiązane, ale fundamentalnie odmienne podejście pod nazwą systemd(1); opis jego procesu rozruchowego opisano w powiązanym z nim podręcznikiem bootup(7).

Gdy uruchamia się /sbin/init, odczytuje plik /etc/inittab w celu uzyskania dalszych instrukcji. Plik określa to, co powinno być uruchomione gdy program /sbin/init ma wejść w dany poziom pracy, dając administratorowi możliwość łatwego określenia środowisk do różnych zastosowań; każdy poziom pracy jest związany z zestawem usług (np. poziom pracy S jest trybem pojedynczego użytkownika, a poziom pracy 2 oznacza uruchomienie większości usług sieciowych).

Administrator może zmienić aktualny poziom pracy za pomocą init(1) oraz sprawdzić bieżący poziom pracy poleceniem runlevel(8).

Jednak ze względu na to, że zarządzanie pojedynczymi usługami za pomocą tego pliku jest niewygodne, /etc/inittab uruchamia jedynie zestaw skryptów które uruchamiają/zatrzymują poszczególne usługi.

Poniższy opis dotyczy systemu operacyjnego działającego w oparciu o UNIX System V wydanie 4, jednak wiele popularnych systemów operacyjnych (Slackware Linux, FreeBSD, OpenBSD) używa skryptów rozruchowych w jakimś stopniu odmiennych.

Każda zarządzana usługa (poczta elektroniczna, serwer nfs, cron itp.) posiada pojedynczy skrypt uruchomieniowy w określonym katalogu (w większości wersji Linuksa jest to /etc/init.d). Każdy z tych skryptów akceptuje jako pojedynczy argument słowo „start” (uruchamiające usługę) lub słowo „stop” (zatrzymujące usługę). Dla „wygody” skrypt może opcjonalnie akceptować inne parametry (np. „restart” do zatrzymania i ponownego uruchomienia, „status” do wyświetlenia statusu usługi itp.). Uruchomienie skryptu bez argumentów wyświetla dopuszczalne argumenty.

Aby określone skrypty uruchamiały się na określonych poziomach pracy i w określonej kolejności, występują katalogi sekwencyjne, zwykle w postaci /etc/rc[0-6S].d. W każdym z tych katalogów istnieją dowiązania (zwykle symboliczne) do skryptów w katalogu /etc/init.d.

Główny skrypt (zwykle /etc/rc) jest wywoływany z inittab(5); wywołuje on następnie skrypt każdej usługi za pomocą dowiązania w odpowiednim katalogu sekwencyjnym. Każde dowiązanie, którego nazwa zaczyna się literą „S” jest wywoływane z argumentem „start” (uruchamiając usługę). Każde dowiązanie, którego nazwa zaczyna się literą „K” jest uruchamiane z argumentem „stop” (zatrzymując usługę).

Do zdefiniowania kolejności uruchamiania i zatrzymywania usług na tym samym poziomie pracy, używa się numeru kolejności w nazwie dowiązania. Aby zachować przejrzystość, nazwa dowiązania zwykle kończy się nazwą usługi do której odsyła dowiązanie. Przykładowo dowiązanie /etc/rc2.d/S80sendmail uruchamia usługę sendmail(8) na poziomie pracy 2. Dzieje się to po uruchomieniu /etc/rc2.d/S12syslog, ale przed uruchomieniem /etc/rc2.d/S90xfs.

Zarządzenie opisanymi dowiązaniami oznacza zatem zarządzenie kolejnością rozruchu i poziomami pracy, w wielu systemach istnieją pomocne narzędzia służące do tego celu (np. chkconfig(8)).

Program udostępniający usługę jest często nazywany „demonem”. Demon może zwykle otrzymać różne opcje i parametry wiersza poleceń. W celu umożliwienia ich zmiany przez administratora systemu bez potrzeby edytowania całego skryptu rozruchowego, istnieje jakiś odrębny plik konfiguracyjny, położony w określonym katalogu, w którym może odnaleźć go skrypt rozruchowy (w starszych systemach Red Hat jest to /etc/sysconfig).

W starszych systemach UNIX, taki plik zawierał faktyczne opcje wiersza poleceń do demona, ale we współczesnych systemach Linux (oraz HP-UX), zawiera jedynie zmienne powłoki. Skrypt rozruchowy w /etc/init.d odczytuje i włącza swój plik konfiguracyjny (wykonuje „source” na swoim pliku konfiguracyjnym), a następnie używa wartości zmiennych.

/etc/init.d/, /etc/rc[S0-6].d/, /etc/sysconfig/

init(1), systemd(1), inittab(5), bootparam(7), bootup(7), runlevel(8), shutdown(8)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

2 maja 2024 r. Linux man-pages 6.8