| initrd(4) | Device Drivers Manual | initrd(4) |
initrd - dysk RAM inicjowany przez program rozruchowy
/dev/initrd jest urządzeniem blokowym tylko do odczytu, z przypisanym numerem głównym 1 i numerem pobocznym 250. Zwykle /dev/initrd jest własnością root:disk z trybem 0400 (dostęp do odczytu tylko przez roota). Jeśli system Linux nie posiada utworzonego /dev/initrd, można to uczynić następującymi poleceniami:
mknod -m 400 /dev/initrd b 1 250 chown root:disk /dev/initrd
Aby korzystać z /dev/initrd, konieczne jest wkompilowanie bezpośrednio w jądro Linux obsługi „RAM disk” oraz „Initial RAM disk” (tj. CONFIG_BLK_DEV_RAM=y i CONFIG_BLK_DEV_INITRD=y). Gdy korzysta się z /dev/initrd, sterownik dysku RAM nie może być załadowany jako moduł.
Specjalny plik /dev/initrd jest urządzeniem blokowym tylko do odczytu. Urządzenie jest dyskiem RAM, które jest inicjowane (np. ładowane) przez program rozruchowy przed uruchomieniem jądra. Jądro może następnie użyć zawartości /dev/initrd, w trakcie uruchamiania systemu, składającego się z dwóch faz.
W pierwszej fazie rozruchu, jądro uruchamia i montuje pierwotny główny system plików z zawartości /dev/initrd (np. dysku RAM zainicjowanego przez program rozruchowy). W drugiej fazie dodatkowe sterowniki i inne moduły są ładowane z zawartości urządzenia pierwotnego urządzenia głównego. Po załadowaniu dodatkowych modułów, montowany jest nowy główny system plików (tj. zwykły korzeń systemu plików) z innego urządzenia.
Jeśli rozruch następuje z użyciem initrd, wygląda to następująco:
Gdy korzysta się z initrd, wpływ na działanie w trakcie uruchomienia jądra, mają następujące opcje z programu rozruchowego:
Domyślnie, w przypadku zwykłych głównych systemów plików, używane są ustawienia jądra (np. ustawione w pliku jądra za pomocą rdev(8) lub wkompilowane w plik jądra) lub opcje programu rozruchowego. W przypadku zwykłego głównego systemu plików montowanego jako NFS, konieczne jest użycie opcji rozruchowych nfs_root_name i nfs_root_addrs, aby przekazać ustawienia NFS. Więcej informacji o głównym systemie plików jako NFS znajduje się w pliku dokumentacji jądra Documentation/filesystems/nfs/nfsroot.txt (lub Documentation/filesystems/nfsroot.txt przed Linuksem 2.6.33). Więcej informacji o ustawieniach głównego systemu plików znajduje się też w dokumentacji LILO i LOADLIN.
Możliwe jest również, aby plik wykonywalny /linuxrc zmienił zwykłe urządzenie główne. Aby /linuxrc mógł zmienić zwykłe urządzenie główne, musi być zamontowany /proc. Po zamontowaniu /proc, /linuxrc zmienia zwykłe urządzenie główne zapisując do plików proc: /proc/sys/kernel/real-root-dev, /proc/sys/kernel/nfs-root-name oraz /proc/sys/kernel/nfs-root-addrs. W przypadku fizycznego urządzenia głównego, urządzenie główne jest zmieniane, przez zapisanie przez /linuxrc numeru urządzenia nowego korzenia systemu plików do pliku /proc/sys/kernel/real-root-dev. W przypadku głównego systemu plików na NFS, urządzenie główne jest zmieniane przez zapisanie przez /linuxrc ustawień NFS do plików /proc/sys/kernel/nfs-root-name oraz /proc/sys/kernel/nfs-root-addrs, a następnie zapisanie 0xff (np. numeru pseudourządzenia NFS) do pliku /proc/sys/kernel/real-root-dev. Przykładowo, poniższy wiersz polecenia powłoki zmieniłby zwykłe urządzenie główne na /dev/hdb1:
echo 0x365 >/proc/sys/kernel/real-root-dev
W przykładzie dla NFS, poniższe wiersze poleceń powłoki zmieniłyby zwykłe urządzenie główne 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 głównego systemu plików jest przestarzałe. Plik Documentation/admin-guide/initrd.rst (lub Documentation/initrd.txt przed Linuksem 4.10) w źródłach jądra Linux oraz podręczniki pivot_root(2) i pivot_root(8) opisują współczesne metody zmieniania głównego systemu plików.
Główną motywacją implementacji initrd było umożliwienie, aby konfiguracja jądra była modularna przy instalacji systemu.
Oto możliwy scenariusz instalacji systemu:
Kluczową rolą /dev/initrd w powyższym opisie jest korzystanie z danych konfiguracyjnych ze zwykłego działania systemu, bez konieczności: początkowego wyboru jądra, korzystania z przeładowanego jądra uniwersalnego lub rekompilacji jądra.
Drugi scenariusz występuje w przypadku instalacji, gdy Linux działa na systemach z różnymi konfiguracjami sprzętowymi, w jednolicie administrowanej sieci. W takich przypadkach, może być pożądane, aby korzystać z niewielkiego zbioru jąder (a najlepiej jednego) i minimalizować wielkość informacji konfiguracyjnych danego systemu. Wówczas odmienny może być tylko plik /linuxrc albo plik przez /linuxrc wykonywany.
Trzeci scenariusz to poręczniejsze dyski odzyskiwania. Ponieważ informacje takie jak położenie partycji głównego systemu plików nie są wymagane w czasie rozruchu, system załadowany z /dev/initrd może wyświetlić pytanie i/lub skorzystać z autowykrywania, ewentualnie sprawdzając je następnie.
W końcu, co nie mniej istotne, dystrybucje Linuksa na płytach mogą korzystać z initrd w celu łatwej instalacji z tego nośnika. Dystrybucja może użyć LOADLIN, aby bezpośrednio załadować /dev/initrd z płyty, bez konieczności korzystania z dyskietek. Dystrybucja może też korzystać z dyskietki rozruchowej LILO, a następnie załadować (poprzez bootstrap) większy dysk RAM za pomocą /dev/initrd z płyty.
/dev/initrd
/dev/ram0
/linuxrc
/initrd
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 źródeł jądra Linux, dokumentacja LILO, dokumentacja LOADLIN, dokumentacja SYSLINUX
Tłumaczenie niniejszej strony podręcznika: 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.
| 15 czerwca 2024 r. | Linux man-pages 6.9.1 |