initrd(4) Device Drivers Manual initrd(4) NAZWA initrd - dysk RAM inicjowany przez program rozruchowy KONFIGURACJA /dev/initrd jest urzadzeniem blokowym tylko do odczytu, z przypisanym numerem glownym 1 i numerem pobocznym 250. Zwykle /dev/initrd jest wlasnoscia root:disk z trybem 0400 (dostep do odczytu tylko przez roota). Jesli system Linux nie posiada utworzonego /dev/initrd, mozna to uczynic nastepujacymi poleceniami: mknod -m 400 /dev/initrd b 1 250 chown root:disk /dev/initrd Aby korzystac z /dev/initrd, konieczne jest wkompilowanie bezposrednio w jadro Linux obslugi ,,RAM disk" oraz ,,Initial RAM disk" (tj. CONFIG_BLK_DEV_RAM=y i CONFIG_BLK_DEV_INITRD=y). Gdy korzysta sie z /dev/initrd, sterownik dysku RAM nie moze byc zaladowany jako modul. OPIS Specjalny plik /dev/initrd jest urzadzeniem blokowym tylko do odczytu. Urzadzenie jest dyskiem RAM, ktore jest inicjowane (np. ladowane) przez program rozruchowy przed uruchomieniem jadra. Jadro moze nastepnie uzyc zawartosci /dev/initrd, w trakcie uruchamiania systemu, skladajacego sie z dwoch faz. W pierwszej fazie rozruchu, jadro uruchamia i montuje pierwotny glowny system plikow z zawartosci /dev/initrd (np. dysku RAM zainicjowanego przez program rozruchowy). W drugiej fazie dodatkowe sterowniki i inne moduly sa ladowane z zawartosci urzadzenia pierwotnego urzadzenia glownego. Po zaladowaniu dodatkowych modulow, montowany jest nowy glowny system plikow (tj. zwykly korzen systemu plikow) z innego urzadzenia. Dzialania rozruchowe Jesli rozruch nastepuje z uzyciem initrd, wyglada to nastepujaco: (1) Program rozruchowy laduje do pamieci program jadra i zawartosc /dev/initrd. (2) Przy uruchomieniu jadra, jadro rozpakowuje i kopiuje zawartosc urzadzenia /dev/initrd do urzadzenia /dev/ram0, a nastepnie zwalnia pamiec uzyta przez /dev/initrd. (3) Jadro montuje nastepnie do odczytu i zapisu urzadzenie /dev/ram0 jako pierwotny glowny system plikow. (4) Jesli wskazany zwykly korzen systemu plikow jest rowniez pierwotnym glownym systemem plikow (np. /dev/ram0) to jadro pomija ostatni krok zwyklej sekwencji rozruchowej. (5) Jesli w pierwotnym glownym systemie plikow obecny jest plik wykonywalny /linuxrc, to /linuxrc jest wykonywany z identyfikatorem uzytkownika rownym 0 (plik /linuxrc musi miec ustawione uprawnienie do wykonania; plik /linuxrc moze byc dowolnym prawidlowym plikiem wykonywalnym, w tym skryptem powloki). (6) Jesli /linuxrc nie jest wykonywany lub gdy /linuxrc sie zakonczy, montowany jest zwykly korzen systemu plikow (jesli /linuxrc wyjdzie z jakimkolwiek systemem plikow zamontowanym w pierwotnym glownym systemie plikow, to zachowanie jadra jest NIEZDEFINIOWANE; zob rozdzial UWAGI, aby zapoznac sie z biezacym zachowaniem jadra). (7) Jesli zwykly korzen systemu plikow posiada katalog /initrd, to urzadzenie /dev/ram0 jest przemieszczane z / do /initrd. W innym przypadku, jesli katalog /initrd nie istnieje, urzadzenie /dev/ram0 jest odmontowywane (przy przemieszczaniu z / do /initrd, /dev/ram0 nie jest odmontowywane, zatem moga pozostac procesy dzialajace z /dev/ram0; jesli katalog /initrd nie istnieje na zwyklym korzeniu systemu plikow i pozostana jakies procesy dzialajace z /dev/ram0, gdy /linuxrc wyjdzie, zachowanie jadra jest NIEZDEFINIOWANE; zob rozdzial UWAGI, aby zapoznac sie z biezacym zachowaniem jadra). (8) Na zwyklym korzeniu systemu plikow dokonywana jest zwykla sekwencja rozruchowa (np. wywolanie /sbin/init). Opcje Gdy korzysta sie z initrd, wplyw na dzialanie w trakcie uruchomienia jadra, maja nastepujace opcje z programu rozruchowego: initrd=nazwa-pliku Okresla plik, z ktorego zaladowana zostanie zawartosc /dev/initrd. W przypadku LOADLIN jest to opcja wiersza polecen. W LILO konieczne jest uzycie tego polecenia w pliku konfiguracyjnym LILO /etc/lilo.config. Nazwa pliku podana w tej opcji bedzie zwykle skompresowanym za pomoca gzip obrazem systemu plikow. noinitrd Opcja rozruchowa wylacza rozruch skladajacy sie z dwoch faz. Jadro wykonuje zwykla sekwencje rozruchowa, jak gdyby /dev/initrd nie byl zainicjowany. Dzieki tej opcji, zawartosc /dev/initrd zaladowana do pamieci przez program rozruchowy jest zachowywana. Opcja pozwala, aby zawartoscia /dev/initrd byly dowolne dane, niekonieczne obraz systemu plikow. Jednak urzadzenie /dev/initrd jest tylko do odczytu i moze byc odczytane jedynie jednokrotnie po uruchomieniu systemu. root=nazwa-urzadzenia Okresla urzadzenie, ktore bedzie sluzylo jako zwykly glowny system plikow. W przypadku LOADLIN jest to opcja wiersza polecen. W LILO konieczne jest uzycie tego polecenia w pliku konfiguracyjnym LILO /etc/lilo.config. Urzadzenie podane w tej opcji musi byc urzadzeniem do zamontowania, posiadajacym odpowiedni glowny system plikow. Zmienianie zwyklego glownego systemu plikow Domyslnie, w przypadku zwyklych glownych systemow plikow, uzywane sa ustawienia jadra (np. ustawione w pliku jadra za pomoca rdev(8) lub wkompilowane w plik jadra) lub opcje programu rozruchowego. W przypadku zwyklego glownego systemu plikow montowanego jako NFS, konieczne jest uzycie opcji rozruchowych nfs_root_name i nfs_root_addrs, aby przekazac ustawienia NFS. Wiecej informacji o glownym systemie plikow jako NFS znajduje sie w pliku dokumentacji jadra Documentation/filesystems/nfs/nfsroot.txt (lub Documentation/filesystems/nfsroot.txt przed Linuksem 2.6.33). Wiecej informacji o ustawieniach glownego systemu plikow znajduje sie tez w dokumentacji LILO i LOADLIN. Mozliwe jest rowniez, aby plik wykonywalny /linuxrc zmienil zwykle urzadzenie glowne. Aby /linuxrc mogl zmienic zwykle urzadzenie glowne, musi byc zamontowany /proc. Po zamontowaniu /proc, /linuxrc zmienia zwykle urzadzenie glowne zapisujac do plikow proc: /proc/sys/kernel/real-root-dev, /proc/sys/kernel/nfs-root-name oraz /proc/sys/kernel/nfs-root-addrs. W przypadku fizycznego urzadzenia glownego, urzadzenie glowne jest zmieniane, przez zapisanie przez /linuxrc numeru urzadzenia nowego korzenia systemu plikow do pliku /proc/sys/kernel/real-root-dev. W przypadku glownego systemu plikow na NFS, urzadzenie glowne jest zmieniane przez zapisanie przez /linuxrc ustawien NFS do plikow /proc/sys/kernel/nfs-root-name oraz /proc/sys/kernel/nfs-root-addrs, a nastepnie zapisanie 0xff (np. numeru pseudourzadzenia NFS) do pliku /proc/sys/kernel/real-root-dev. Przykladowo, ponizszy wiersz polecenia powloki zmienilby zwykle urzadzenie glowne na /dev/hdb1: echo 0x365 >/proc/sys/kernel/real-root-dev W przykladzie dla NFS, ponizsze wiersze polecen powloki zmienilyby zwykle urzadzenie glowne na katalog NFS /var/nfsroot na serwerze NFS sieci lokalnej, o numerze IP 193.8.232.7, dla systemu o numerze IP 193.8.232.2, o nazwie ,,idefix": echo /var/nfsroot >/proc/sys/kernel/nfs-root-name echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \ >/proc/sys/kernel/nfs-root-addrs echo 255 >/proc/sys/kernel/real-root-dev Uwaga: Korzystanie z /proc/sys/kernel/real-root-dev do zmiany glownego systemu plikow jest przestarzale. Plik Documentation/admin-guide/initrd.rst (lub Documentation/initrd.txt przed Linuksem 4.10) w zrodlach jadra Linux oraz podreczniki pivot_root(2) i pivot_root(8) opisuja wspolczesne metody zmieniania glownego systemu plikow. Uzycie Glowna motywacja implementacji initrd bylo umozliwienie, aby konfiguracja jadra byla modularna przy instalacji systemu. Oto mozliwy scenariusz instalacji systemu: (1) Program rozruchowy jest uruchamiany z dyskietki lub innego nosnika z minimalnym jadrem (np. z obsluga /dev/ram, /dev/initrd oraz systemu plikow ext2) i laduje /dev/initrd ze spakowana gzip wersja pierwotnego systemu plikow. (2) Plik wykonywalny /linuxrc okresla, co jest wymagane do (1) zamontowania zwyklego glownego systemu plikow (tj. typ urzadzenia, sterowniki urzadzenia, system plikow) oraz (2) nosnika instalacyjny (np. plyta, siec, tasma, ...). Moze tego dokonac pytajac uzytkownika, sprawdzajac samemu lub laczac te dwa podejscia. (3) Plik wykonywalny /linuxrc laduje wymagane moduly dla poczatkowego glownego systemu plikow. (4) Plik wykonywalny /linuxrc tworzy i wypelnia glowny system plikow (na tym etapie zwykly glowny system plikow nie musi byc jeszcze kompletny). (5) Plik wykonywalny /linuxrc ustawia /proc/sys/kernel/real-root-dev, odmontowuje /proc, zwykly glowny system plikow i inne zamontowane przez niego systemy plikow, a nastepnie konczy dzialanie. (6) Nastepnie jadro montuje zwykly glowny system plikow. (7) System plikow jest teraz dostepny i kompletny, zatem mozna zainstalowac program rozruchowy. (8) Program rozruchowy jest konfigurowany do zaladowania do /dev/initrd systemu plikow, ktory ma zbior modulow, ktorych uzyto do uruchomienia systemu (np. urzadzenie /dev/ram0 moze byc zmodyfikowane, nastepnie odmontowane, a na koncu obraz jest zapisywany z /dev/ram0 do pliku). (9) System jest teraz gotowy do rozruchu i moga nastapic dodatkowe zadania instalacyjne. Kluczowa rola /dev/initrd w powyzszym opisie jest korzystanie z danych konfiguracyjnych ze zwyklego dzialania systemu, bez koniecznosci: poczatkowego wyboru jadra, korzystania z przeladowanego jadra uniwersalnego lub rekompilacji jadra. Drugi scenariusz wystepuje w przypadku instalacji, gdy Linux dziala na systemach z roznymi konfiguracjami sprzetowymi, w jednolicie administrowanej sieci. W takich przypadkach, moze byc pozadane, aby korzystac z niewielkiego zbioru jader (a najlepiej jednego) i minimalizowac wielkosc informacji konfiguracyjnych danego systemu. Wowczas odmienny moze byc tylko plik /linuxrc albo plik przez /linuxrc wykonywany. Trzeci scenariusz to poreczniejsze dyski odzyskiwania. Poniewaz informacje takie jak polozenie partycji glownego systemu plikow nie sa wymagane w czasie rozruchu, system zaladowany z /dev/initrd moze wyswietlic pytanie i/lub skorzystac z autowykrywania, ewentualnie sprawdzajac je nastepnie. W koncu, co nie mniej istotne, dystrybucje Linuksa na plytach moga korzystac z initrd w celu latwej instalacji z tego nosnika. Dystrybucja moze uzyc LOADLIN, aby bezposrednio zaladowac /dev/initrd z plyty, bez koniecznosci korzystania z dyskietek. Dystrybucja moze tez korzystac z dyskietki rozruchowej LILO, a nastepnie zaladowac (poprzez bootstrap) wiekszy dysk RAM za pomoca /dev/initrd z plyty. PLIKI /dev/initrd /dev/ram0 /linuxrc /initrd UWAGI o W biezacym jadrze, wszelkie systemy plikow, ktore pozostana zamontowane przy przeniesieniu /dev/ram0 z / do /initrd beda wciaz dostepne. Wpisy /proc/mounts nie sa jednak aktualizowane. o W biezacym jadrze, jesli katalog /initrd nie istnieje, to /dev/ram0 nie zostanie w pelni odmontowane, jesli /dev/ram0 jest uzywany przez jakikolwiek proces lub zamontowano w nim system plikow. Jesli /dev/ram0 nie jest w pelni odmontowane, to /dev/ram0 pozostanie w pamieci. o Uzytkownicy /dev/initrd nie powinni polegac na zachowaniu opisanym w powyzszych uwagach. Moze sie ono zmienic w kolejnych wersjach jadra Linux. ZOBACZ TAKZE chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8) Documentation/admin-guide/initrd.rst (lub Documentation/initrd.txt przed Linuksem 4.10) w drzewie zrodel jadra Linux, dokumentacja LILO, dokumentacja LOADLIN, dokumentacja SYSLINUX TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. initrd(4)