Wersje GRand Unified Bootloader GRUB 1 = GRUB version 0.9x = GRUB Legacy GNU GRUBGRUB bootloader - Full tutorial by Dedoimedo GRUB 2GRUB 2 bootloader - Full tutorial by Dedoimedo

Różnice pomiędzy GRUB a GRUB 2 GRUB vs GRUB 2

Ustawienia

Przy instalacji dowolnej dystrybucji Linuksa, instalujemy też zazwyczaj bootloadera, który umożliwia wybór, który system operacyjny chcemy uruchomić. Z reguły domyślnie uruchamianym systemem wtedy będzie nowo zainstalowany system Linux - jednak można ustawić tak, żeby domyślnym był inny (np. Windows).

W przypadku bootloadera GRUB jest to dość proste.

logujemy się jako root (albo administrator, który ma uprawnienia do zapisywania plików w katalogu /boot) wchodzimy do katalogu /boot/grub otwieramy do edycji plik menu.lst (za pomocą dowolnego edytora tekstu, np. mcedit); w pliku tym są zapisane informacje jakie systemy operacyjne są na naszym komputerze zainstalowane, na jakich partycjach, oraz dodatkowe opcje bootloadera

Ewentualnie możemy użyć programu: Grub Customizer Grub customizer StartUp-Manager

Opcja "default" Gdzieś na początku pliku menu.lst powinien się znajdować wpis

default 0

lub podobny. Może go też nie być, ale w większości dystrybucji powinien on wyglądać właśnie tak. Przy tym wpisie jest opis (komentarz - linie zaczynające się od "#"), który objaśnia znaczenie tej opcji (oczywiście po angielsku).

Przykład:

## default num # Set the default entry to the entry number NUM. Numbering starts from 0, and # the entry number 0 is the default if the command is not used. # # You can specify 'saved' instead of a number. In this case, the default entry # is the entry saved with the command 'savedefault'. default 0

Jeżeli nie ma tego wpisu, to można go utworzyć.

Służy on do wyboru domyślnej opcji wyboru. Jak ustawić W dalszej części pliku znajdziesz wpisy typu

title Debian GNU/Linux, kernel 2.4.27-2-686 root (hd0,2) kernel /vmlinuz-2.4.27-2-686 root=/dev/hdc7 ro initrd /initrd.img-2.4.27-2-686 savedefault boot

Policz ile jest takich wpisów (pierwszy wpis ma numer 0, itd.), i sprawdź na którym miejscu jest ten system operacyjny, który ma być uruchamiany domyślnie. Ten numer wstawimy do opcji "default".

UWAGA! Liczą się wszystkie wpisy, także te użyte nie do uruchamiania jakiegoś systemu, tylko do oddzielenia np. systemu Linux od innych systemów. Czyli poniższy wpis także należy policzyć:

title Other operating systems: root

Po wstawieniu odpowiedniej liczby do opcji default, zapisujemy plik /boot/grub/menu.lst, i to już wszystko.

Efekt Zauważ, że kolejność, w jakiej są wyświetlane przy starcie komputera zainstalowane systemy, nie ulega zmianie. Jest tylko taka różnica, że domyślnie zaznaczony nie jest pierwszy na liście, tylko ten który wybraliśmy - i jeżeli jest ustawiona opcja "timeout" (także w pliku /boot/grub/menu.lst), to jeżeli nie naciśniemy żadnego klawisza w określonym czasie, to zostanie uruchomiony system domyślny.

Opcja "timeout" Wspomnieliśmy o opcji "timeout". Po przeczytaniu tego artykułu, na pewno poradzisz sobie z ustawieniem, jak długo GRUB ma czekać na wybór systemu do uruchomienia. Wystarczy znaleźć linijkę

timeout

(zapewne również na początku pliku), i ustawić liczbę sekund. Np. wpis:

timeout 5

mówi bootloaderowi, że ma czekać 5 sekund zanim uruchomi domyślny system operacyjny. Jeżeli w tym czasie naciśniemy dowolny klawisz, to w tym momencie GRUB przestaje odmierzać czas - jeżeli np. naciśniemy strzałkę, ale nie wciśniemy ENTER, to nasz komputer zatrzyma się na tym etapie, i będzie czekał na ręczne wybranie systemu do uruchomienia.

Opcja "savedefault" Jeżeli chcemy, żeby za każdym razem domyślnie uruchamianym systemem był ten, który ostatnio uruchomiliśmy, to zamiast liczby, w linijce "default" wpisujemy:

default saved

Teraz trzeba sprawdzić, czy przy każdym z wpisów uruchamiających jakiś system, jest linijka

savedefault

Powinna ona się znajdować po linijkach "title" i "root", ale przed bootowaniem systemu.

Jak rozpoznać, które linijki oznaczają bootowanie systemu:

jeżeli wpis dotyczy Linuksa, lub podobnego systemu operacyjnego (UNIX, BSD), to będzie to linijka

boot

jeśli jest to Windows 95/98, to będzie to:

makeactive chainloader +1

w przypadku Windowsa NT wpis będzie zapewne podobny (lub identyczny) jak dla Win 98

Dlaczego to ważne? GRUB może zapisać, który system został wybrany, tylko przed zabootowaniem dowolnego systemu, ponieważ bootowanie systemu oznacza zakończenie pracy GRUBa, i załadowanie w jego miejsce kodu uruchamiającego dany system, który w tym momencie przejmuje całą kontrolę nad sprzętem.

Wyświetlane linijki tekstu Wcześniej wspomnieliśmy o wpisach

title Debian GNU/Linux, kernel 2.4.27-2-686 root (hd0,2) kernel /vmlinuz-2.4.27-2-686 root=/dev/hdc7 ro initrd /initrd.img-2.4.27-2-686 savedefault boot

oraz

title Other operating systems: root

Linijka title określa, jaki tekst będzie w danej linijce wyświetlany. Np. dla wpisu oddzielającego system Linux od innych systemów, w naszym przykładzie wyświetlane będzie:

Other operating systems:

Możesz to zmienić, np. na:

title Inne systemy operacyjne: root

wtedy pierwszy ekran będzie wyglądał znacznie bardziej przyjaźnie.

Łącze szeregowe

Ciekawą możliwością jest używanie GRUBa na systemach pozbawionych dostępu do klawiatury / monitora (czy wręcz karty graficznej) a wyposażonych w port szeregowy.

Aby GRUB wyświetlał menu poprzez port szeregowy należy umieścić w pliku konfiguracyjnym wpisy:

serial --unit=0 --speed=115200 terminal --timeout=5 console serial

GRUB musi w tym celu być skompilowany z obsługą linii szeregowej. Parametr speed definiuje szybkość łącza (można ustawić także inne parametry, takie jak kontrola parzystości, bity stopu, etc.) natomiast unit wskazuje numer portu szeregowego (porty numerowane są od zera). Terminal definiuje konsolę i łącze szeregowe, wykrycie aktywności w ciągu 5 sekund spowoduje wybranie danego terminala i wyświetlenie menu.

Warto skonfigurować także system operacyjny, aby wysyłał komunikaty diagnostyczne na ten sam port, dla linuksa:

kernel [ścieżka do jadra] root=[urzadzenie z glownym systemem plikow lub initrd] console=tty0 console=ttyS0,115200 [pozostale opcje...]

Bezpieczeństwo

Choć fizyczny dostęp do komputera zwykle oznacza, że potencjalny atakujący prędzej czy później znajdzie sposób aby się do niego włamać (jedynym realnym zabezpieczeniem jest silne szyfrowanie sprzętowe danych na dysku połączone z autoryzacją biometryczną) to jednak warto spróbować nieco poprawić zabezpieczenia systemu przed niepowołanym dostępem, zwłaszcza, że GRUB posiada ogromne możliwości i osoba z dostępem do jego shella może dokonać poważnych zniszczeń (z usunięciem/uszkodzeniem partycji włącznie). Możliwe jest zabezpieczenie wybranych wpisów w menu oraz trybu shell za pomocą hasła:

password --md5 [tu wstawiamy hash md5 hasła uzyskany za pomocą polecenia grub-md5-crypt]

Jeśli do wpisu w menu dodamy polecenie lock, wówczas wykonanie odpowiadającej mu sekwencji poleceń będzie wymagać podania hasła.

Przykładowe wpisy Najlepsze efekty w nauce daje często analiza przykładów, więc niżej podanych jest parę przykładów wpisów w konfiguracji GRUB-a dla typowych systemów operacyjnych

GNU/Linux title GNU/Linux root (hd0,2) kernel /vmlinuz-2.4.27-2-686 root=/dev/hdc7 ro initrd /initrd.img-2.4.27-2-686 savedefault boot

Windows title Windows rootnoverify (hd0,0) makeactive chainloader +1

Windows XP - na drugim dysku title Windows map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd0,0) makeactive chainloader +1

Windows 7 - na drugim dysku title Windows 7 rootnoverify (hd1,0) makeactive chainloader +1

FreeBSD title FreeBSD root (hd0,3,a) kernel /boot/loader boot

Należy zwrócić uwagę na dodanie ,a do numeru partycji. Jest to spowodowane specyficzną organizacją partycji (slices) FreeBSD. Źródła