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  | 
					


