Jak uzyskać dostęp do / etc / fstab przed zamontowaniem roota?

21

Wprowadzałem pewne zmiany /etc/fstab, kiedy przyszło mi do głowy pytanie o kurczaka i jaja - jeśli /etc/fstabzawiera instrukcje dotyczące montowania systemów plików, w tym partycji głównej, to w jaki sposób system operacyjny odczytuje ten plik w pierwszej kolejności?

sashoalm
źródło

Odpowiedzi:

18

Kiedy moduł ładujący wywołuje jądro, przekazuje mu parametr o nazwie root. Więc po zakończeniu inicjalizacji jądro będzie kontynuowało podłączanie danej partycji root do, /a następnie wywoływanie /sbin/init(chyba że zostało to nadpisane przez inne parametry).

Następnie initproces uruchamia resztę systemu, ładując wszystkie usługi zdefiniowane do uruchomienia na domyślnym poziomie działania.

W zależności od konfiguracji i używanego systemu init, może być wiele innych kroków między tymi, o których wspomniałem. Obecnie najpopularniejszymi systemami init w Linuksie są SysVInit (tradycyjny), Upstart i Systemd. Więcej informacji na temat procesu rozruchu można znaleźć w tym artykule na Wikipedii .

Oto uproszczony przykład mojej konfiguracji Grub. Ważną częścią odpowiedzi na twoje pytanie jest od drugiej do ostatniej linii, jest to root=/dev/sda3:

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-40864544-2d0f-471a-ab67-edd7e4754dae' {
    set root='hd0,msdos1'
    echo    'Loading Linux 3.12.6-gentoo-c2 ...'
    linux   /kernel-3.12.6-gentoo-c2 root=/dev/sda3 ro  
}

W wielu konfiguracjach jądro montuje się /w trybie tylko do odczytu, a wszystkie pozostałe opcje są ustawione na wartości domyślne. W /etc/fstabmożna określić parametry systemu plików, które następnie mają być stosowane raz startowych przełączany w tryb go.

powtórna rozgrywka
źródło
2
Jądro partycji root jest początkowo montowane tylko do odczytu. Następnie initproces montuje elementy /etc/fstabzgodnie z tamtejszymi parametrami, co zwykle oznacza ponowne zamontowanie partycji root do odczytu i zapisu.
goldilocks
1
Jądro można również skompilować z zaprogramowanymi na stałe procedurami, które szukają specjalnych plików na aktywnej partycji, która nie została jeszcze zamontowana. Program ładujący FreeBSD działa w ten sposób.
Kondybas
@Kondybas LILO w systemie Linux jest również zakodowany na stałe, aby załadować jądro pod pewnymi stałymi numerami bloków
phuclv
3

Wpis fstabjest potrzebny, jeśli chcesz określić niektóre inne niż domyślne opcje montowania. Jednak w dzisiejszych czasach systemdprawidłowe urządzenie jądra i fstype fstabsą niepotrzebne. Możesz zamienić pozycję root na coś takiego:

#UUID=8f74237d-b689-4beb-9d1f-f60b426c9969 /            ext4        rw,relatime,data=ordered    0 1
dummy /             auto        rw,relatime,data=ordered,debug  0 1

a opcje montowania są nadal honorowane przez systemd.

Możesz użyć dowolnej złej nazwy urządzenia, np /dev/sdz1. Oprócz złego UUID. Przy złym UUID komunikat zostanie wydrukowany podczas rozruchu:, Failed to start Remount Root and Kernel File Systemsale system i tak się uruchamia.

basen
źródło