GRUB

Menu GRUB wyświetla listę bootowalnych kerneli do wyboru. Zmieniać jądra można strzałkami góra i dół. Wciskając klawisz “e” można wejść do edycji danego jądra, do linii komend GRUB można wejść wciskając klawisz “c”. W trybie edycji GRUB wczytuje wybraną pozycję z pliku /boot/grub2/grub.cfg. Po wprowadzeniu zmian w trybie edycji można nacisnąć Ctrl+x aby uruchomić system, Ctrl+c aby przełączyć się do linii komend grub> lub ESC aby anulować wprowadzone zmiany i przenieść się z powrotem do głównego menu. Będąc w linii komend grub> można nacisnąć TAB aby wyświetlić listę dostępnych komend.

 

Plik konfiguracyjny /etc/default/grub.

Zawartość tego pliku jest wykorzystywana do generowania pliku /boot/grub2/grub.cfg, który kontroluje zachowanie GRUBa w czasie bootowania systemu. Jakiekolwiek zmiany w pliku /etc/default/grub będą skouteczne po uruchomieniu narzędzia grub2-mkconfig. Domyślna zawartość pliku /etc/default/grub znajduje się poniżej.

Dyrektywa Opis
GRUB_TIMEOUT Czas wyświetlania menu, po którym rozpocznie się ładowanie domyślnego kernela.
GRUB_DISTRIBUTOR Nazwa dystrybucji Linuxa.
GRUB_DEFAULT Bootuje kernel wybrany podczas poprzedniego uruchamiania systemu.
GRUB_DISABLE_SUBMENU Włącza/wyłącza wyświetlanie się menu GRUB.
GRUB_TERMINAL_OUTPUT Ustawia domyślny terminal.
GRUB_CMDLINE_LINUX Określa opcje jakie mają być dodane do kernela przy starcie systemu.
GRUB_DISABLE_RECOVERY Wyłącza wyświetlanie pozycji w menu dotyczącej odzyskiwania systemu.

 

Plik /boot/grub2/grub.cfg.

Główny plik konfiguracyjny GRUB, dla systemów opartych o BIOS plik znajduje się w katalogu /boot/grub2, dla systemów opartych o UEFI plik znajduje się w katalogu /boot/efi/EFI/redhat. Plik generowany jest manualnie narzędziem grub2-mkconfig lub automatycznie podczas instalacji kernela. W czasie tego procesu wszystkie ręczne zmiany dokonywane w tym pliku są tracone.

Generowanie pliku grub.cfg w systemach opartych o BIOS i UEFI:

Narzędzie korzysta z ustawień w pliku /etc/default/grub i skryptów pomocniczych zawartych w katalogu /etc/grub.d. Lista tych skryptów znajduje się poniżej.

Pierwszy skrypt 00_header ustawia środowisko GRUB. Skrypt 10_linux szuka wszystkich zainstalowanych kerneli na tej samej partycji. 30_os-prober szuka obecności innych systemów operacyjnnych. Skrypty 40_custom i 41_custom są dla nas do wprowadzania modyfikacji do pliku konfiguracyjnego GRUB.

Plik grub.cfg zawiera bloki menuentry dla każdego zainstalowanego jądra. Każdy blok zaczyna się tytułem, który zawiera nazwę kernela i pliku obrazu RAM dysku. Blok zawiera położenie kernela w katalogu /boot oraz wiele opcji i modułów do wczytania. Nazwy tych bloków wyświetlane są przez GRUB w czasie startu systemu i można wybrać któryś z nich do załadowania. Przykładowy blok menuentry dla jądra 3.10.0-123.el7.x6_64 przedstawiony jest poniżej.

Jeżeli do systemu dodawane  jest nowe jądro, wpisy dotyczące starego pozostają nadal i mogą być wybrane w czasie wyświetlania menu GRUBa podczas startu systemu.

 

Ustawianie domyślnego jądra do załadowania.

Domyślne jądro, które ma być ładowane w czasie startu systemu można zmienić komendą:

Numeracja wpisów zaczyna się od zera.

 

Zmiana czasu wyświetlanie menu grub.

Edytujemy zmienną GRUB_TIMEOUT w pliku /etc/default/grub i generujemy nowy plik konfiguracyjny /boot/grub2/grub.cfg .

Jeżeli chcemy aby menu w ogóle się nie pojawiało to zmienną GRUB_TIMEOUT ustawiamy na 0.

 

Uruchamianie systemu w określonych trybach (targetach, run levelach).

Domyślnie RHEL uruchamiany jest w trybie graficznym ale może być uruchamiany w innych trybach. Możliwe jest także uruchomienie systemu w trybie awaryjnym (emergency) i w trybie ratunkowym (rescue). Te określone targety mogą być wybrane dzięki interfejsowi GRUB, wybierając określoną pozycję w menu, klikając “e” i w trybie edycji wskazując pożądany target dyrektywą systemd.init. Na przykład aby załadować system do targetu awaryjnego dodajemy pozycję systemd.unit=emergency.target (lub po prostu ‘emergency‘) w linii z domyślnym kernelem jak na zdjęciu poniżej.

Zamiast  systemd.unit=emergency.target  możemy wpisać systemd.unit=emergency.rescue (lub 1, s lub single). Parametry SysVinit nadal mogą być używane: s, S, single, 1, 2, 3 lub 5Systemd mapuje je do powiązanych plików runlevelX.target.

Po wprowadzeniu modyfikacji klikamy Ctrl+x, wprowadzamy hasło roota i rebootujemy system wpisując:

 

Ćwiczenie 1. Odzyskiwanie hasła.

Po wyświetleniu się menu GRUB wybieramy pierwszą pozycję i wchodzimy do trybu edycji naciskając klawisz „e”.

I sposób
1. W trybie edycji przechodzimy kursorem na dół i zamieniamy wpis
rhgb quiet” na init=/bin/sh

2. Wciskamy Ctrl+x i bootujemy system do wybranego wcześniej targetu (init=bin/sh).

3. Montujemy ponownie system plików / (root) w trybie do odczytu i zapisu:
sh-4.2# mount -o remount,rw /
4. Sprawdzamy czy system plików / (root) został zamontowany w trybie rw:
sh-4.2# mount | grep -w „/”
5. Teraz możemy zmienić hasło root:
sh-4.2# passwd root
6. Wprowadzamy zmiany w kontekście SELinux dla całego systemu plików:
sh-4.2# touch /.autorelabel
7. Uruchamiamy system:
sh-4.2# exec /sbin/init

 

II sposób
W trybie edycji przesuwamy się kursorem na sam dół ekrany aż wyłoni się obraz jądra (linux16 /boot/vmlinuz…..).
Wpisujemy  rd.break  po LANG=pl_PL.UTF8  i wpisujemy Ctrl+X.

Teraz:
switch_root:/# mount -o remount,rw /sysroot/
switch_root:/# chroor /sysroot/
sh-4.2# passwd root

Jeżeli korzystamy z SELinux:
sh-4.2# touch /.autorelabel
sh-4.2# exit
sh-4.2# reboot

 

Ćwiczenie 2. Dodanie nowej pozycji do menu GRUB.

Z pliku /boot/grub2/grub.cfg kopiujemy pierwszy wpis menuentry i wklejamy go do pliku /etc/grub/40_custom. Po wpisie rhgb quiet dodajemy target w którym chcemy aby system został uruchomiony np. dla targetu rescue dodajemy wpis systemd.unit=rescue.unit.

Teraz wydajemy komendę:

 

Leave a Reply

Your email address will not be published. Required fields are marked *