Ramdysku (initrd) jest zazwyczaj wersja głównego systemu plików zawierających tylko to, co jest potrzebne do zamontowania rzeczywistego głównego systemu plików i rękę od startu do niego okrojoną.
Initrd istnieje, ponieważ we współczesnych systemach moduł ładujący nie może być wystarczająco inteligentny, aby niezawodnie znaleźć główny system plików. Jest tak wiele możliwości dla tak małego programu, jak program ładujący. Zastanów się nad rootem NFS, niestandardowymi kartami RAID itp. Moduł ładujący musi wykonywać swoją pracę tylko przy użyciu systemu BIOS plus dowolny kod, który można wcisnąć w sektor rozruchowy.
Initrd dostaje przechowywane gdzieś boot loader można znaleźć, i to na tyle mała, że dodatkowy kawałek przestrzeni, którą zajmuje z reguły nie przeszkadzają nikomu. (W małych systemach osadzonych zwykle nie ma „prawdziwego” katalogu głównego, tylko initrd.)
Initrd jest cenny: jego zawartość musi być zachowana w każdych warunkach, ponieważ jeśli initrd się zepsuje, system nie będzie mógł się uruchomić. Jednym z rozwiązań projektowych dokonanych przez jego projektantów w celu zapewnienia, że moduł ładujący załaduje initrd tylko do odczytu. Istnieją również inne zasady, które działają w tym kierunku, takie jak w przypadku małych systemów, w których nie ma „prawdziwego” katalogu głównego, nadal montujesz osobno /tmp
, /var/cache
i takie do przechowywania rzeczy. Zmiana initrd jest wykonywana rzadko, a następnie powinna być wykonywana bardzo ostrożnie.
Wracając do zwykłego przypadku, gdy nie jest to prawdziwy główny system plików, to najpierw jest montowany tylko do odczytu, ponieważ initrd było. Następnie jest przechowywany tylko do odczytu tak długo, jak to możliwe, z tych samych powodów. Wszelkie zapisywanie w prawdziwym katalogu głównym, które należy wykonać, jest odkładane do momentu uruchomienia systemu, zgodnie z preferencjami, lub przynajmniej do późnej fazy uruchamiania, gdy preferencje te nie mogą być spełnione.
Najważniejszą rzeczą, która dzieje się w tej fazie tylko do odczytu, jest sprawdzenie, czy główny system plików jest sprawdzony, czy został odmontowany w sposób czysty. Jest to coś, co program ładujący mógłby zrobić zamiast pozostawić to initrd, ale co się stanie, jeśli główny system plików nie zostanie odmontowany w sposób czysty? Następnie musi zadzwonić, fsck
aby sprawdzić i ewentualnie to naprawić. Więc, gdzie initrd
dostać fsck
, jeśli był odpowiedzialny za tego kroku, zamiast czekać do przełączenia do „prawdziwego” root? Można powiedzieć, że musisz skopiować fsck
do initrd
budynku, ale teraz jest większy. A co więcej, co fsck
skopiujesz? Systemy Linux regularnie używają kilkunastu różnych systemów plików. Czy kopiujesz tylko ten, który jest potrzebny dla prawdziwego roota w momencieinitrd
jest tworzone? Czy przeskalujesz rozmiar initrd
, kopiując do niego wszystkie dostępne fsck.foo
programy, na wypadek, gdyby główny system plików został później migrowany do innego typu systemu plików i ktoś zapomniał przebudować initrd?
Architekci systemu rozruchowego Linux mądrze postanowili nie obciążać initrd tymi problemami. Delegowali sprawdzanie prawdziwego głównego systemu plików do prawdziwego głównego systemu plików, ponieważ jest on w lepszej sytuacji, aby to zrobić niż initrd.
Gdy proces rozruchu przebiegnie na tyle daleko, że można to zrobić bezpiecznie, initrd zostaje zamieniony spod prawdziwego katalogu głównego za pomocą pivot_root(8)
, a system plików jest ponownie zamontowany w trybie odczytu-zapisu.
Ponieważ podczas uruchamiania główny system plików jest zawsze początkowo montowany tylko do odczytu. Po zakończeniu różnych autotestów ponownie instaluje główny system plików jako odczyt / zapis i rozpoczyna montowanie innych systemów plików.
źródło
Jednym z powodów, o których mogę myśleć, jest zapobieganie jakiejś korupcji. Na przykład, możesz zamontować system plików ext4 jako ext2 (lub odwrotnie) i jest to bezpieczne w trybie ro, ale może powodować niezgodne zmiany formatu, jeśli zamontujesz rw z initram.
Aha, i jest jeszcze jeden powód: initramfs prawdopodobnie nie ma fsck, ale może być konieczne sprawdzenie systemu plików przed zamontowaniem go rw.
źródło