Pierwsze kroki z GRUB-em w Linuksie

GRUB czyli Grand Unified Boot loader to jeden z najczęściej wykorzystywanych boot managerów w różnych dystrybucjach Linuksa. Jest to swojego rodzaju proxy pomiędzy POST-em (Power-On Self Test) a jądrem systemu operacyjnego. W większości przypadków nie konfigurujemy go w żaden sposób - po prostu jest. Warto jednak choć trochę orientować się w jego podstawowych możliwościach.

GRUB jest boot managerem nie tylko nadającym się do uruchamiania systemu z dysków twardych, ale również z pamięci przenośnych (np. płyt CD-R, pendrive-ów). Pozwala także wystartować system operacyjny wykorzystując PXE (Preboot eXecution Environment). Ma przy tym budowę modularną - tj. ładowane są tylko te jego elementy, które będą potrzebne, co pozwala zaoszczędzić na zasobach. Sterowanie GRUB-em jest możliwe w dwojaki sposób - albo poprzez plik konfiguracyjny ładowany podczas startu narzędzia, albo za pomocą linii komend.

Instalację samego GRUB-a przeprowadza się sporadycznie i to w zasadzie tylko podczas "stawiania" nietypowej dystrybucji Linuksa - np. Gentoo. Tutaj, podczas końcowego etapu budowania systemu przeprowadzana jest ręczna instalacja tego boot managera. Zacznijmy od sytuacji kiedy nie mamy zainstalowanego GRUB-a. W zależności od systemu można go zainstalować albo ze źródeł, albo z gotowej paczki np. we wspomnianym Gentoo poleceniem

# emerge grub

Sama instalacja paczki to jeszcze nie wszystko. Konieczne jest przygotowanie pliku konfiguracji i umieszczenia boot managera w MBRze. Podczas instalacji GRUB-a powinien zostać utworzony katalog /boot/grub. Wewnątrz znajduje się plik konfiguracyjny grub.conf. Zanim przejdziemy do konfiguracji trzeba zrozumieć, w jaki sposób GRUB wskazuje na dyski i znajdujące się na nich partycje. W uproszczeniu, w Linuksie w zależności od typu dysku (np. IDE, SCSI, SATA) kolejne dyski noszą oznaczenie - dla IDE - hda, hdb, hdc itd; dla SCSI czy SATA - sda, sdb,sdc itd. Podobnie jest z partycjami na dysku np. pierwsza partycja na dysku hda to hda1, druga hda2 itd. GRUB zaczyna liczyć od "0" - zarówno w przypadku dysków, jak i w przypadku partycji. Zatem w jego nomenklaturze pierwszy dysk to "hd0", a pierwsza partycja na pierwszym dysku to (hd0,0). Grub przy tym nie wprowadza rozróżnienia na dyski IDE, SCSI, SATA - wszystkie mają początek "hd". Mając dwa dyski i po trzy partycje na każdym GRUB będzie je widział w następujący sposób:

Bwzwzględnie należy też zwrócić uwagę na sposób notacji przez GRUB-a - nawiasy są konieczne. Teraz możemy przystąpić do właściwej konfiguracji w pliku grub.conf. Także w zależności od dystrybucji do pliku grub.conf podlinkowany jest również plik menu.lst.

Przykładowy plik może wyglądać następująco:

default=0

fallback=1

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title CentOS_ServerCD (2.6.9-42.ELsmp)

root (hd0,0)

kernel /boot/vmlinuz-2.6.9-42.ELsmp ro root=LABEL=/

initrd /boot/initrd-2.6.9-42.ELsmp.img

title CentOS_wersja _druga

root (hd0,0)

kernel /boot/vmlinuz-nowy ro root=LABEL=/

initrd /boot/initrd-nowy.img

"Default" odnosi się do zestawu konfiguracyjnego, który zostanie automatycznie uruchomiony, jeżeli użytkownik nie dokona wyboru w określonym przedziale czasowym. Ten przedział definiuje parametr "timeout" - w naszym przypadku ustawiony na 5 sekund.

Parametr "fallback" jest w działaniu bardzo zbliżony do "default". Jego wywołanie jest uzależnione od tego, czy podczas uruchamiania zestawu określonego w parametrze "default" wystąpią błędy.

Kolejny parametr "splashimage" określa temat graficzny, w jaki zostanie "wyposażony" interfejs GRUB-a np.:

Już podczas wskazywania lokalizacji tematu po raz pierwszy konieczne będzie posłużenie się składnią GRUB-a w odniesieniu do miejsca, w którym znajdzie się nasz temat. W przykładzie temat znajduje się na dysku pierwszym, jego pierwszej partycji. Każdy nowy temat dla przejrzystości administracji powinien być umieszczany w katalogu /boot/grub/. Tematy dla GRUB-a można tworzyć samodzielnie (to osobna historia) lub można je pobrać z licznych serwisów internetowych np.http://schragehome.de/splash/, http://www.kde-look.org/,http://www.gnome-look.org/.

"Hiddenmenu" sprawia, że menu (lista zestawów konfiguracyjnych) nie będzie wyświetlana. Dopiero naciśnięcie dowolnego klawisza spowoduje wyświetlenie menu.

"Title" rozpoczyna sekcję ustawień - zestaw konfiguracyjny. Sama nazwa ma jedynie znaczenie opisowe - taki tytuł będzie widniał na ekranie startowym GRUB-a. Pozostałe komendy w zestawie konfiguracyjnym dotyczą sposobu wystartowania systemu. W ramach zestawu pierwszym z kluczowych parametrów jest "root". Wskazuje on na dysk i partycję, gdzie znajduje się sam GRUB oraz jądro systemu.

Dalej wskazujemy położenie oraz sam plik jądra, z którego wystartuje system operacyjny- poprzez dodanie atrybutów do polecenia "kernel". W naszym przykładzie jądro znajduje się w pliku "vmlinuz-2.6.9-42.ELsmp" w katalogu /boot. Zatrzymajmy się na chwilę przy tym, co jeszcze możemy przekazać w linii "kernel". Po wskazaniu samego pliku jądra możemy określić, że będzie ono dostępne tylko w trybie "tylko do odczytu" - stąd "ro". Dalej sprawa nieco się komplikuje.

Polecenie "root" służy do określenia lokalizacji partycji root naszego systemu. Trzeba koniecznie pamiętać o tym, że określając ją musimy posługiwać nazewnictwem systemowym, a nie GRUB-owym (czyli zamiast (hd0,0) wpisujemy /dev/hda1). W zależności też o dystrybucji systemu różnie będzie wyglądała wartość tego parametru. W naszym przykładzie widać, że mamy do czynienia z systemem z rodziny Red Hata (np. Fedora, CentOS). Tutaj preferowanym sposobie wskazywania dysków jest posługiwanie się nazwami (labels) partycji. Stąd wartość "LABEL=/" - pod taką nazwą ("/") widnieje partycja w systemie (z poziomu samego OS-a można to sprawdzić narzędziem e2label - UWAGA! - zmieniając nazwy poprzez e2label musimy również odpowiednio zmodyfikować plik fstab):

Najlepszym jednak sposobem określania root-a jest posługiwanie się standardowymi nazwami systemowymi (np. /dev/hda1).

Po przekazaniu podstawowych informacji w polu "kernel" czas na "initrd". Polecenie to służy do wskazania RAM dysku.

Poniżej widać drugą sekcję konfiguracyjną, która może być wykorzystana np. do uruchomienia systemu przy użyciu innej wersji kernela (jak w przykładzie).

Mając przygotowane podstawowe parametry konfiguracyjne możemy przystąpić do instalacji GRUB-a w MBR (Master Boot Record). Najprościej zrobić to przy pomocy skryptu, który dołączany jest do paczki GRUB-a - grub -install. Jeżeli mamy tylko jedną partycję systemową, na której zainstalowany jest również GRUB (+ swap) to w zupełności wystarczy wywołanie:

# grub-install /dev/hda

Można również posłużyć się nomenklaturą GRUB-a i jako cel instalacji wskazać (hd0). Jeżeli jednak mamy osobną partycję, z której startuje system wówczas trzeba ją również wskazać za pomocą parametru --root-directory np. w ten sposób:

# grub-install --root-directory=/boot /dev/hda

To powinno wystarczyć żeby rozpocząć zabawę z GRUB-em. Nie można jednak zapomnieć, że są jeszcze dziesiątki innych, bardziej zaawansowanych funkcji, które ten może pełnić.


TOP 200