Czy initramfs używa / etc / fstab?

20

W moim rozumieniu initramfs jest odpowiedzialny za ładowanie „prawdziwego” systemu plików root.

Teraz są dwa miejsca, w których definiujemy ten rdzeń. Najpierw umieszczamy wpis /etc/fstab. Po drugie, umieszczamy urządzenie w komendach rozruchowych jądra, np root=/dev/sda1.

Z którego korzysta initramfs, aby ustalić, gdzie jest główny system plików? Jeśli używa parametru jądra roota, dlaczego mamy wpis /etc/fstab? Druga opcja (czyta /etc/fstab) jest dość nielogiczna, ponieważ /etc/fstabplik znajduje się na głównym urządzeniu, które initramfs próbuje zamontować w pierwszej kolejności.

Bardzo mylące rzeczy.

Ahmed Ghonim
źródło

Odpowiedzi:

15

Jak już wspomniałeś, celem initramfs jest zamontowanie „prawdziwego” głównego systemu plików (może także robić inne rzeczy, ale jest to wspólne zadanie).

Bez initramfs jądro zwykle montuje partycję jako tylko do odczytu, a następnie przekazuje kontrolę nad /sbin/init. Initramfs po prostu przejmuje to zadanie z jądra, zwykle gdy główny system plików nie jest normalną partycją (mdraid, lvm, szyfrowane itp.).

Teraz, oprócz tła na initramfs, /etc/fstabrezydujesz w głównym systemie plików. Jako taki, po uruchomieniu initramfs, ten system plików root nie istnieje, więc nie może dostać się do fstab (problem z kurczakiem i jajami).
Zamiast tego musimy przekazać parametr do argumentów rozruchowych jądra, aby użyć initramfs. Zwykle jest to coś takiego root=/dev/sdX. Jednak może również zrobić coś, aby automatycznie dowiedzieć się, gdzie jest twoje urządzenie root, a więc nie ma żadnego parametru. Ponieważ jest to tylko oprogramowanie (zazwyczaj skrypt), może naprawdę zrobić wszystko, co chce, aby zamontować urządzenie root.

Teraz, jak wspomniano wcześniej, jądro zamontuje prawdziwy root jako tylko do odczytu. Initramfs powinien to zrobić dokładnie. Po zakończeniu initramfs system uruchamia się dokładnie tak, jakby w ogóle nie było initramfs, i /sbin/inituruchamia się. Ten init następnie uruchamia wszystkie normalne skrypty startowe i zadaniem jednego z tych skryptów jest czytanie /etc/fstab, przełączanie roota na odczyt i zapis oraz montowanie wszystkich innych systemów plików.

Patrick
źródło
Mówisz więc, że / sbin / init w prawdziwym systemie plików root ponownie zamontowałby root'a przy użyciu opcji w / etc / fstab?
Ahmed Ghonim,
3
Tak. Zwykle za pomocą prostego mount -o remount,rw /. Nie zmieni urządzenia, które jest zamontowane, ale zmieni opcje montażu. Ze strony podręcznika:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick,
Jak przekazujemy parametr do argumentów rozruchowych jądra, jeśli korzystamy z wiersza poleceń grub2? Mój system z jakiegoś powodu nie wyświetla menu GRUB.
intuicyjnie,
@intuited Powinieneś zadać nowe pytanie. W komentarzach nie ma miejsca na pytania i odpowiedzi
Patrick,
lsinitramfs /boot/initrd* | fgrep fstabi niespodzianka, initramfs do zawiera plik fstab, przynajmniej dla mnie.
youfu
2

Może, ale nie musi. Ponieważ Initramfs można konstruować na różne sposoby (jądro po prostu ładuje je i uruchamia, /initco robi cokolwiek). Jednak użycie parametru jest bardziej powszechne, ponieważ pozwala na większą elastyczność - tzn. Jeśli coś się zmieni, możesz po prostu edytować pozycję rozruchową i wszystko działa. Z wbudowanym rootem nie jest to konieczne.

Wpis fstab może być nadal wymagany w obu kierunkach, ponieważ określa także inne rzeczy, takie jak opcje montowania (niektóre z nich można zmienić w drodze) i fsckkolejność. Nawet jeśli byłby całkowicie zbędny (a jeśli Initramfs sobie z tym poradzi, może działać bez niego), nadal trzymam tam wpis tylko ze względu na kompletność.

frostschutz
źródło
1

Możesz uznać / etc / fstab za montowanie statyczne, to tylko sposób na wykonanie takiego zadania, ale nie jedyne, w rzeczywistości, uruchom polecenie mount, i widzisz wiele systemów plików, których brakuje w fstab. Serwis taki udev i udisk zarządzają dużą ilością „automatycznego montowania” ignorując plik / etc / fstab ...

Tak więc, jeśli coś jest zamontowane lub nie często, nie ma to nic wspólnego z / etc / fstab.

initramfs to tylko tymczasowe rootfy używane podczas procesu rozruchu do momentu zamontowania „prawdziwych” rootfów, więc dlaczego initramfs powinien być na / etc / fstab?

sebelk
źródło