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.
1 2 3 4 5 6 7 8 |
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=vg00/swap vconsole.font=latarcyrheb-sun16 crashker nel=auto vconsole.keymap=us rd.lvm.lv=vg00/root rhgb quiet" GRUB_DISABLE_RECOVERY="true" |
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:
1 2 |
# grub2-mkconfig –o /boot/grub2/grub.cfg # grub2-mkconfig –o /boot/efi/EFI/redhat/grub.cfg<code> |
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.
1 |
</code># ll /etc/grub.d <span style="color: #808080;">razem 72</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 8702 11-22 16:51 00_header</span> <span style="color: #808080;">-rwxr-xr-x. 1 root root 992 2016-06-16 00_tuned</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 232 11-22 16:51 01_users</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 10781 11-22 16:51 10_linux</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 10275 11-22 16:51 20_linux_xen</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 2559 11-22 16:51 20_ppc_terminfo</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 11169 11-22 16:51 30_os-prober</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 214 11-22 16:51 40_custom</span> <span style="color: #808080;">-rwxr-xr-x 1 root root 216 11-22 16:51 41_custom</span> <span style="color: #808080;">-rw-r--r-- 1 root root 483 11-22 16:51 README</span> |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span style="color: #808080;"> menuentry 'Red Hat Enterprise Linux Server, with Linux 3.10.0-123.el7.x86_64 ' --class red --class gnu-linux --class gnu --class os</span> <span style="color: #808080;"> --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-964201bb-1e32-4794-a2f2-7a33e2fb591a' {</span> <span style="color: #808080;"> load_video</span> <span style="color: #808080;"> set gfxpayload=keep</span> <span style="color: #808080;"> insmod gzio</span> <span style="color: #808080;"> insmod part_msdos</span> <span style="color: #808080;"> insmod xfs</span> <span style="color: #808080;"> set root='hd0,msdos1'</span> <span style="color: #808080;"> if [ x$feature_platform_search_hint = xy ]; then</span> <span style="color: #808080;"> search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --</span> <span style="color: #808080;"> hint='hd0,msdos1' e6c9c801-e77a-4ce0-ac89-eeb2d3a4774f</span> <span style="color: #808080;"> else</span> <span style="color: #808080;"> search --no-floppy --fs-uuid --set=root e6c9c801-e77a-4ce0-ac89-eeb2d3a4774f</span> <span style="color: #808080;"> fi linux</span> <span style="color: #808080;"> 16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=964201bb-1e32-4794-a2f2-7a33e2fb591a ro rd.lvm.lv=vg00/swap</span> <span style="color: #808080;"> vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rd.lvm.lv=vg00/root rhgb quiet LANG=en_US.UTF-8</span> <span style="color: #808080;"> initrd16 /initramfs-3.10.0-123.el7.x86_64.img</span> <span style="color: #808080;"> }</span> |
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ą:
1 |
# grub2-set-default numer_wpisu_w_menu_GRUB |
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
.
1 |
# grub2-mkconfig -o /boot/grub2/grub.cfg |
Jeżeli chcemy aby menu w ogóle się nie pojawiało to zmienną GRUB_TIMEOUT
ustawiamy na 0
.
1 |
GRUB_TIMEOUT=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 5
. Systemd mapuje je do powiązanych plików runlevelX.target
.
Po wprowadzeniu modyfikacji klikamy Ctrl+x, wprowadzamy hasło roota i rebootujemy system wpisując:
1 |
# systemctl reboot |
Ć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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
menuentry 'Red Hat Enterprise Linux Server, with Linux 3.10.0-123.el7.x86_64 ' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-964201bb-1e32-4794-a2f2-7a33e2fb591a' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 -- hint='hd0,msdos1' e6c9c801-e77a-4ce0-ac89-eeb2d3a4774f else search --no-floppy --fs-uuid --set=root e6c9c801-e77a-4ce0-ac89-eeb2d3a4774f fi linux 16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=964201bb-1e32-4794-a2f2-7a33e2fb591a ro rd.lvm.lv=vg00/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rd.lvm.lv=vg00/root rhgb quiet <span style="color: #ff0000;"><strong>systemd.unit=rescue.unit</strong></span> LANG=en_US.UTF-8 initrd16 /initramfs-3.10.0-123.el7.x86_64.img } |
Teraz wydajemy komendę:
1 |
# grub2-mkconfig -o /boot/grub2/grub.cfg |