Przejdź do zawartości

Linux/GRUB

Z Wikibooks, biblioteki wolnych podręczników.
(Przekierowano z GNU/Linux:GRUB)
GNU GRUB logo

Wersje

[edytuj]
  • GRand Unified Bootloader
  • GRUB 1 = GRUB version 0.9x = GRUB Legacy [1][2]
  • GRUB 2[3]
GRUB 2 - parytycje

Różnice pomiędzy GRUB a GRUB 2 [4]

Ustawienia

[edytuj]
menu.lst

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.

  1. logujemy się jako root (albo administrator, który ma uprawnienia do zapisywania plików w katalogu /boot)
  2. wchodzimy do katalogu /boot/grub
  3. 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 [5]
  • StartUp-Manager
StartUp-Manager do konfiguracji GRUB'a
Grub Customizer

Opcja "default"

[edytuj]

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ć

[edytuj]

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

[edytuj]

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"

[edytuj]

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"

[edytuj]

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

[edytuj]

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

[edytuj]

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

[edytuj]

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

[edytuj]

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

[edytuj]
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

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

Windows XP - na drugim dysku

[edytuj]
title           Windows
map             (hd0) (hd1)
map             (hd1) (hd0)
rootnoverify    (hd0,0)
makeactive
chainloader     +1

Windows 7 - na drugim dysku

[edytuj]
title          Windows 7
rootnoverify   (hd1,0)
makeactive
chainloader    +1

FreeBSD

[edytuj]
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

[edytuj]
  1. GNU GRUB
  2. GRUB bootloader - Full tutorial by Dedoimedo
  3. GRUB 2 bootloader - Full tutorial by Dedoimedo
  4. GRUB vs GRUB 2
  5. Grub customizer