GRUB bez tajemnic
22 lutego 2006, seaman
GRand Unified Boot loader (GRUB) staje domyślnym programem ładującym system w wielu dystrybucjach Linuksa. Jego zalety powodują, że powoli zdobywa przewagę nad LILO (LInux LOader). Używając go nie musimy pamiętać o wykonywaniu komendy /sbin/lilo w celu zatwierdzenia dokonanych zmian, dzieje się to automatycznie. Ponadto może on funkcjonować jako bootloader nośników wymiennych takich jak dyskietki, CD-ROMy czy dyski USB. Zainstalowany na twardym dysku, w połączeniu z innymi narzędziami, GRUB staje się potężnym, ale też wyrafinowanym, narzędziem pozwalającym na komfortową obsługę komputera domowego lub firmy.
Autor: Jeremy Turner, tłumaczenie: seaman
Tekst oryginalny: GRUB tips and tricks
Wprowadzenie
Zacznijmy od tego czym dokładnie jest GRUB. GRUB jest bootloaderem, programem, który sprawuje kontrolę nad procesami zachodzącymi w trakcie uruchamiania jądra i systemu (Power-On Self Test - POST) naszej dystrybucji Linuksa. Nadzoruje on również ładowanie modułów jądra, tak aby załadowane zostały tylko te, które są mu potrzebne. Nie tylko skraca to czas ładowania systemu, ale również pozwala na zachowanie cennych zasobów komputera podczas uruchamiania systemu z nośników wymiennych. Ładowanie systemu odbywa się automatycznie, zgodnie z ustawieniami zapisanymi w pliku konfiguracyjnym więc nie ma potrzeby ręcznego wpisywania komend. Jakkolwiek opcja taka również jest dostępna na wypadek błędu lub problemu z wczytaniem pliku konfiguracji.
Ogromną zaletą wolnego oprogramowania jest fakt, że mamy szeroki wybór programów służących do tego samego celu. Alternatywą dla GRUB-a jest LILO, syslinux czy isolinux (także GAG - dop. seaman). Dlaczego więc używać akurat tego programu? Jednym z jego walorów jest możliwość współpracy z wieloma różnymi dyskami, które są obsługiwane przez jeden plik konfiguracyjny. Ponadto współpracuje on również z różnymi typami nośników tak, że nasz system możemy uruchomić z płyty CD, dyskietki, dysku (klucza) USB, a nawet przez serwer TFTP posiadający PXE ROM.
Instalacja GRUB na kluczu USB
![]()
Rysunek 1: GRUB można uruchomić
z klucza USB!
Inspiracją do napisania tego artykułu była próba uruchomienia DSLinux (DSL), graficznej dystrybucji Linuksa o wielkości ok. 50MB. Po zapoznaniu się z instrukcją instalacji na kluczu USB tej dystrybucji, zamieszczonej na oficjalnej stronie projektu, stwierdziłem, że mogę do tego użyć mój Lexar 256 MB JumpDrive. Dokumentacja DSL zawiera informacje na temat instalacji za pomocą syslinux oraz sposób konfiguracji dysku, ale nie udało mi się dokonać ani jednej próby uruchomienia tego systemu zakończonej powodzeniem. W końcu zdecydowałem się na użycie GRUB-a i system DSL wystartował za pierwszym razem!
Przygotowanie naszego klucza USB z systemem Linux zacznijmy od stworzenia odpowiedniej struktury katalogów do przechowywania plików niezbędnych do jego uruchamiania tak, aby znajdowały się one w jednym miejscu obdzielone od pozostałych plików, które chcemy przechowywać na naszym kluczu USB. Właściwie powinny zostać stworzone dwie partycje, ale mogą potem pojawić się problemy z ich prawidłowym odczytem w systemie Windows. Na naszym kluczu USB stworzymy katalog /boot, w którym umieścimy wszystkie dane niezbędne do uruchomienia systemu.
![]()
Rysunek 2: Struktura katalogu
/boot klucza USB
W tym katalogu utworzymy podkatalogi /grub dla plików konfiguracyjnych, /images zawierający pliki inicjujące (initrd) i obrazy dysków czy dyskietek (.img) oraz /kernels, w którym umieścimy nasze kernele. Przedstawiono to graficznie na rysunku 2. Oczywiście układ ten jest przykładowy i można dokonać jego modyfikacji w dowolny sposób, ale należy pamiętać, aby te zmiany miały swoje odzwierciedlenie w pliku konfiguracyjnym menu.lst. Przykładowy plik menu.lst zamieszczono poniżej.
default=0
timeout=10
root=(hd0,0)
splashimage=/boot/grub/debsplash.xpm.gz
title DSL 1.2 (2.4.26) 1024x768 (save to RAM)
kernel /boot/kernels/dsl-linux24 \
ramdisk_size=100000 init=/etc/init lang=us \
apm=power-off vga=791 toram nomce noapic \
quiet knoppix_dir=images knoppix_name=dsl
initrd=/boot/images/dsl-minirt24.gz
title Debian Sarge Installer
kernel /boot/kernels/di-vmlinuz \
initrd=/boot/images/di-initrd.gz \
ramdisk_size=10240 root=/dev/rd/0 \
devfs=mount,dall rw
initrd /boot/images/di-initrd.gz
title HP nx5000 F0.d BIOS Upgrade
kernel /boot/kernels/memdisk
initrd /boot/images/hpnx5000f0d.img
title Memtest86+ (1.60)
kernel /boot/kernels/memdisk
initrd /boot/images/memtestp.bin
Następnie musimy skopiować pliki stage (stage1, stage2 i fat_stage1_5) do katalogu /boot/grub na naszym kluczu USB. Pozwoli to na uruchamianie z niego naszej dystrybucji Linuksa, a także innych systemów operacyjnych. Po skopiowaniu niezbędnych plików nadszedł czas na instalację GRUB-a w MBR (Master Boot Record).
Proces instalacji na kluczu USB wygląda tak samo jak na dysku twardym :
# grub grub> find /boot/grub/stage1 (hd0,1) (hd2,0)
W naszym systemie hd0 to urządzenie /dev/hda (pierwszy dysk twardy), natomiast nasz klucz USB to hd2 (/dev/sda). Aby się co do tego upewnić wykonujemy:
grub> find (hd2,0)/boot/im<TAB> grub> find (hd2,0)/boot/images/
Oczywiście chcemy zainstalować nasz program uruchomieniowy na dysku hd2:
grub> root (hd2,0) Filesystem is type fat, partition type 0xb grub> setup (hd2) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/fat_stage1_5" exists... yes Running "embed /boot/grub/fat_stage1_5 (hd2)"... \ 15 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd2) (hd2)1+15 p \ (hd2,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. grub> quit
Po tej operacji mamy zainstalowanego GRUB-a w MBR naszego klucza USB. Następnie musimy umieścić kilka plików w katalogu /boot naszego klucza oraz stworzyć plik konfiguracyjny menu.lst.
GRUB z obrazem dysku
Kolejną z zalet GRUB-a jest fakt, że można go użyć wraz z memdisk do uruchomienia obrazu dysku. Używając kernela memdisk, możemy załadować i uruchomić obraz dysku. Do czego to może być przydatne? Załóżmy, że posiadamy kilka komputerów stacjonarnych i przenośnych. Możemy stworzyć “bootowalny” CD lub klucz USB, na którym umieścimy wszystkie dane potrzebne do dokonania aktualizacji BIOS-u lub testów sprzętu. Zamiast krążyć wśród tych komputerów z pękiem dyskietek lepiej skopiować ich obrazy na płytę CD lub klucz USB. Korzystając z tej metody możemy stworzyć sobie również obraz Memtest86+ na płycie CD lub kluczu USB. Poniżej znajduje się przykład odpowiedniego wpisu w pliku menu.lst dla Memtest86+:
title MemTest86+ Ver 1.60 kernel /boot/kernels/memdisk initrd /boot/images/memtestp.bin
W tym wypadku nie trzeba nawet definiować systemu plików. Należy jedynie sprawdzić nazwy plików i ścieżki do nich.
DSLinux na kluczu USB
Jak uruchomić Linuksa w środowisku graficznym na kluczu USB za pomocą bootloadera GRUB? W pierwszej kolejności należy pobrać obraz .iso dystrybucji DSL i nagrać ją na CD lub zamontować przez loopback:
# mkdir dsl-test # mount -t iso9660 -o loop dsl-image.iso dsl-test
Następnie należy skopiować plik KNOPPIX, kernel i initial ramdisk:
# cp dsl-test/KNOPPIX/KNOPPIX /media/usb/boot/images/dsl # cp dsl-test/boot/isolinux/linux24 \ /media/usb/boot/kernels/dsl-linux24 # cp dsl-test/boot/isolinux/minirt24.gz \ /media/usb/boot/images/dsl-minirt24.gz # sync # umount dsl-test && rmdir dsl-test
![]()
Rysunek 3: Damn Small Linux (DSL) to dystrybucja
Linuksa zawierająca środowisko graficzne
i zajmująca tylko 50 MB!
Zakładamy, że nasz klucz USB jest zamontowany w /media/usb. Trzeba jeszcze sprawdzić czy nasz plik /media/usb/boot/grub/menu.lst zawiera właściwe ścieżki do plików niezbędnych do uruchomienia systemu. Można też zwrócić uwagę czy w linii root określa urządzenie (hd0,0), mimo, że wcześniej używaliśmy (hd2,0). Po uruchomieniu komputera i “bootowaniu” systemu z klucza USB to właśnie on jest traktowany jako hd0, a nie twardy dysk. Jeśli wszystko wygląda OK czas na ponowne uruchomienie systemu, tym razem już z naszego klucza USB. Należy jeszcze upewnić się, że w BIOS-ie komputera jako pierwsze urządzenie rozruchowe jest ustawione USB-HDD, USB-ZIP lub USB-FLOPPY (nie wszystkie wersje BIOS na to pozwalają - seaman). Czasem trzeba trochę poeksperymentować, aby trafić we właściwe urządzenie. Po uruchomieniu GRUB-a wybieramy DSL i startujemy system. Jeśli popełniliśmy jakiś błąd i nie daje się załadować jądra systemu można spróbować go naprawić w linii poleceń. W tym celu naciskamy ‘c’.
GRUB splashimage
Kolejną przydatną funkcją GRUB-a jest możliwość umieszczenia grafiki, która będzie wyświetlana na ekranie monitora podczas wyboru systemu. Domyślnie GRUB jej nie posiada i wyświetlany ekran jest czarno-biały. Nic nie stoi na przeszkodzie, aby zmienić kolory tła i czcionki oraz dodać jakiś obraz. Można go stworzyć samemu pamiętając, aby spełniał określone kryteria. Powinien być w formacie .xpm (X Pics Map - seaman), maksymalna paleta kolorów to 14, a jego rozmiar to 640×480. Stworzenie takiego obrazu za pomocą programu Gimp nie jest specjalnie trudne. Można też użyć do tego celu pakietu ImageMagick. Wystarczy tylko wydać komendy:
$ convert -resize 640x480 -colors 14 mycoolpicture.jpg \ mybootsplash.xpm $ gzip mybootsplash.xpm
i nasz obraz mycoolpicture.jpg zostanie zeskalowany do rozmiaru 640×480, kolory zredukowane do 14 i zapisany w formacie XPM, a następnie skompresowany przy użyciu gzip. (tak naprawdę nie jest to takie proste i znalezienie odpowiedniego obrazu, który będzie dobrze wyglądał w tym formacie nie jest takie łatwe - seaman).
Jeśli nie mamy ochoty na tworzenie własnych obrazów zawsze można pobrać już gotowe. Poniżej znajdują się linki do odpowiednich stron internetowych.
Jeśli mamy już nasz obraz jako plik .xpm lub .xpm.gz musimy dodać odpowiednią linię do pliku menu.lst, aby program mógł go wczytać. Powinna ona wyglądać podobnie do tej:
splashimage=/boot/grub/debsplash.xpm.gz
Jak widać ja używam pliku z grafiką Debiana…
GRUB na dysku CD
Program GRUB, jak było o tym wcześniej wspomniane, można również zainstalować na “bootowalnym” dysku CD. W tym celu, po stworzeniu obrazu ISO, skorzystamy z funkcji jakie posiada mkisofs. W linii poleceń wydajemy komendę:
$ mkdir -p iso/boot/grub $ cp stage2_eltorito iso/boot/grub $ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table -o grub.iso iso
Kluczem do powodzenia tej operacji jest skopiowanie pliku stage2_eltorito do katalogu /boot/grub obrazu CD. Można także również nagrać na CD plik menu.lst, kernel i obraz dysku, a także splashimage. W pliku menu.lst należy użyć (cd) jako urządzenia rozruchowego zamiast (hd0).
Zakończenie
Gratulacje! Jeśli przebrnąłeś przez wszystkie operacje powinieneś posiadać “bootowalny” klucz USB w dystrybucją DSL oraz memtest86+, a także jakiś splashimage. Ponadto powinieneś wiedzieć jak dodać inne obrazy dysków, np. zawierające update BIOS-u.
Przydatne strony internetowe
- Grub Homepage
- Grub Manual
- Memdisk
- Syslinux
- Memtest86+
- GNU GRUB Public Splashimage Archive
- GRUB Splash
Licencja i informacja o autorze
Poniższe informacje zamieszczone zostały po angielsku, ponieważ taka była wola autora oryginalnego tekstu. Dotyczą one licencji na jakiej rozpowszechniany jest tekst oraz zawierają krótką notkę o autorze.
License
(c) 2005 Jeremy Turner
This article is made available under the “Attribution-NonCommercial-NoDerivs” Creative Commons License 2.0 available from http://creativecommons.org/licenses/by-nc-nd/2.0/.
About the author
Jeremy Turner enjoys freelance writing when given the opportunity. He often plays system administrator, hardware technician, programmer, web designer, and all-around nice guy. You contact him by visiting his web site.
Komentarze (RSS) | Trackback (URI)
Liczba komentarzy: 11
W komentarzach możesz używać prostych znaczników HTML. Przykłady:
- Link: <a href="jaklinux.org">Linux dla każdego</a>,
- Wytłuszczenie: <strong>tekst pogrubiony</strong>,
- Kursywa: <em>tekst pochylony</em>,
- Przekreślenie: <strike>
tekst przekreślony</strike>, - Kod: <code>
printf("blok kodu");</code>, - Cytat: <blockquote>cytat</blockquote>




Bardzo fajny artykuł. Wcześniej nie mogłem sobie poradzić z podmianą obrazka w GRUBie a teraz poszło eleganco
takie pytanie:
proszę w paru słowach /z przykładu praktycznego zastosowania też się obrażę się/ wyjaśniś przeznaczenie takich pliczków:
nbgrub
stage2.netboot
pxegrub
Pliki te niezbędne są do “bootowania” systemu poprzez sieć. Dokładnie jest to opisane (w j. ang.) tam –>
http://www.informatik.hu-berlin.de/~draheim/boot/grub-netboot.html
P.S.
Nie wiem o co chodzi z tym obrażaniem…
po doooooooooosyć dlugiej nieobecności, jestem. Dziękuję Seaman-owi, miało być:
… /z przykładu praktycznego zastosowania też się NIE obrażę/…
to taka dziwna “konstrukcja”
Hm, tak sobie myślę czy ta “spóźniona odpowiedź/wypowiedź trafi doadresata.
Pozdrawiam.
A jest jakiś sposób na bootowanie z poziomu GRUB-a (nie BIOS) bootowalnych płyt CD?
I do czego służy iso9660_stage1_5?
W dokumentacji GRUB brak o tym informacji zarówno o jednym jak i drugim,…
GROSZ-ek
Tam coś znajdziesz –>
http://gentoo-wiki.com/TIP_Chainloading_a_bootable_CD-ROM_from_GRUB
Jak to jest ze GRUB ladowalny przeciez z HDD narzuca sposob bootowania mimo wyraznie przelaczonych w biosie boot opcji (wg kolejnosci obok:)na A,C lub CD-rom-, C, A, i wlacza sie jako pierwszy czyli jakby z HDD ktore nie jest ustawione w biosie jako 1 :((((
Moze jakis przyklad dla slaxa tez ludzie maja z nim problemy z instalacja na dysku i pendrivie
http://www.pendrivelinux.com/
strona anglojęzyczna ale każdy powinien sobie poradzić
opis instalacji minidystrybucji na kluczach USB
1. DamnSmallLinux
2. Knoppix
3. Slax
4. MiniMe
5. XUbuntu
niezły opis, miałbym pytanko:
jak na pendrivie skonfigurować gruba by móc odpalić kilka obrazków iso umieszczonych również na penie np. cd Knoppix.iso, WindowsVistaLive.iso,EBCD.iso,UBCD.iso itd. czy inne które nie są z założenia linuxami