GRUB Önyükleyici Yöneticisi (GRand Unified Bootloader)

Hazırlayan : Serdar Aytekin, serdar@eximinter.com

Sürüm : 1.0 (Şubat, 2003)

Bu belgede Grub (GRand Unified Bootloader)' ın kurulumu, ayarları ve komutları hakkında detaylı açıklamalar yer almaktadır.


İÇİNDEKİLER :

1-Giriş :

Belgede yazılanların uygulanıp uygulanmaması tamamen uygulayan kişinin sorumluluğundadır. Belgede bahsedilenlerin uygulanması sonucu ortaya çıkabilecek hertürlü zarardan yazar sorumlu tutulamaz. Belge GNU Özgür Belgeleme Lisansının http://www.gnu.org/copyleft/fdl.html adresinde yer alan lisans içeriğine bağlı kalmak koşulu ile aynen yada kısmen dağıtılabilir, yayınlanabilir. Bu belgenin son sürümüne http://www.serdaraytekin.com/docs/os/grub/ adresinden ulaşabilirsiniz.

Grub Resmi Sitesi : http://www.gnu.org/software/grub/

FTP Adresi : ftp://alpha.gnu.org/pub/gnu/grub/

GRUB (GRand Unified Bootloader) çok güçlü bir önyükleyici yöneticisidir. Sistemin yüklenmesinden ve kontrolun kernel'a devredilmesinden sorumludur.

En önemli özelliği esnek bir yapıya sahip olması ve her türlü işletim sistemini (Windows, Dos, Linux, Gnu Hurd, *BSD , BeOs vb.) desteklemesidir.

Diğer önemli özelliklerinden bazıları :

2-Grub Önyükleyici Yöneticisinin Sisteme Yüklenmesi :

Kaynak koddan kurulum yapmak için ftp://alpha.gnu.org/pub/gnu/grub/ adresinde yer alan en son grub sürümü indirilir.

(Örn : ftp://alpha.gnu.org/pub/gnu/grub/grub-0.93.tar.gz ).

Daha sonra sırası ile aşağıdaki işlemler uygulanır.

# tar -zxvf dosya-ismi.tar.gz ( örn: tar -zxvf grub-0.93.tar.gz )

# cd dosya-ismi ( örn: cd grub-0.93)

# ./configure ("configure --help" komutu ile yardım alabilirsiniz. Kurulması sizin için gerekli olmayan destekleri disable edebilirsiniz veya gereklileri enable edebilirsiniz.)

# make

Kurulum tamamlandıktan sonra "grub" komutu ile grub komut satırına geçerek veya "grub-install" ile grub'un HDD'in MBR'sine yazılmasını sağlayacağız.

Örnek -1 : /dev/hda5 deki grubun MBR'ye yazılmasını sağlamak için.Grub komut satırına geçtikten sonra sırası ile "root (hd0,4)" ve "setup (hd0)" komutlarını veriyoruz.

grub> root (hd0,4)
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 22 sectors are
embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+22 p
(hd0,4)/boot/grub/stage2
/boot/grub/grub.conf"... succeeded
Done.

veya ikinci bir yöntem olan "grub-install" komutu ile daha kolayca yukarıdaki işlemi yapabiliriz.

[root@serdar root]# grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

# this device map was generated by anaconda
(fd0) /dev/fd0
(hd0) /dev/hda

RPM tabanlı dağıtımları kullananlar http://rpmfind.net/linux/rpm2html/search.php?query=grub adresinden kendi sistemleri için uygun olan .rpm'i çekip sistemlerine

rpm -ivh <dosya_ismi> (Örn: rpm -ivh grub-0.92-7.i386.rpm)

Debian kullanıcıları ise;

"apt-get install grub" komutu ile grub'u sistemlerine kurabilirler. Yine kurulumdan sonra "grub-install /dev/hda" şeklindeki bir komut ile grubun MBR' ye yazılmasını sağlamamız gerekli. Debian tarafından /boot/grub/ veya /boot/boot/ içerisinde bir menu.lst oluşturulmasını sağlamak için debiana özgü olan "update-grub" komutunu kullanabilirsiniz.

Yukarıda bahsedilen yöntemlerden herhangi biri ile kurulum tamamlandıktan sonra, bir editör ile /etc/grub.conf dosyasını aşağıdaki bilgiler ışığında oluşturup yine aşağıdaki bilgiler ışığında aktif ederek kullanmaya başlıyabilirler.

Not : Grub konfigürasyon dosyası olarak /boot/grub/grub.conf dosyasını arar. Çoğu sistemde /boot/grub/grub.conf ve /etc/grub.conf dosyaları /boot/grub/menu.lst ' ye bağlanmış durumdadır. Bu dosyada yaptığımız değişikliklerin yine aynı şekilde /boot/grub/ içerisinde yer alan menu.lst dosyasına aktarılması gereklidir. Biz konfigurasyon dosyalarının /etc/ altında bulunmasına alışık olduğumuz için /boot/grub/grub.conf dosyasını /etc/grub.conf dosyasına link ile bağlayabiliriz.Yine aynı şekilde /boot/grub/grub.conf dosyasınında /boot/grub/menu.lst 'e bağlanması gerekli. Kısaca sistemde /boot/grub/grub.conf, /boot/grub/menu.lst ve /etc/grub.conf dosyalarının birbirleri ile bağlı olması gereklidir.

# ln -s /boot/grub/grub.conf /boot/grub/menu.lst
# ln -s /boot/grub/grub.conf /etc/grub.conf

/boot/grub/grub.conf, /boot/grub/menu.lst ve /et/grub.conf dosyalarının aynı içeriğe sahip olacağına ve /etc/grub.conf da yapılacak değişikliğin /boot/grub/ içerisindeki grub.conf ve menu.lst'ye link yoluyla aktarılacağına dikkat ediniz.

3-Grub Önyükleme İşlemi İçin Kullanılan Yöntemler:

Grub önyükleme işlemi için iki farklı yöntem kullanılır.

1.Kernelin doğrudan yüklenmesi. (Linux, *BSD vb. İşletim sistemleri için)
2.Chain-Loading yöntemi ile önyükleme işleminin diğer önyükleme yükleyicine verilmesi. (Windows, OS/2 vb. İşletim sistemleri için)

Yukarıda bahsedilen önyükleme işlemlerini detaylı olarak izah edelim.

3.1-Kernelin doğrudan yüklenmesi (directly boot with grub) :

Genellikle çoklu-önyükleme özelliğine sahip işletim sistemleri (Linux, *BSD vb.) grub tarafından bu yöntem ile boot edilirler. Bununla ilgili /etc/grub.conf içerisinde yer alabilecek örnek tanımlamalar aşağıdaki gibidir.

title Red Hat Linux
root (hd0,4)
kernel /boot/vmlinuz-2.4.18-14 ro root=/dev/hda5
initrd /boot/initrd-2.4.18-14.img

veya,

title Debian
root (hd0,6)
kernel /boot/vmlinuz-2.2.20-idepci ro root=/dev/hda7

Bu tanımlamalarda yer alan title, root, kernel ve initrd komutlarını ilerleyen kısımda detaylıca izah edeceğiz.


3.2-Chain-Loading yöntemi ile, direk destek verilmeyen işletim sistemlerinin yüklenmesi :

Bu yöntem ile Windows vb. İşletim sistemlerinin boot edilmesi sağlanır. Grub bu yöntemde belirtilen işletim sistemlerini mount etmez bunun yerine önyükleme işlemini söz konusu işletim sisteminin önyükleme yöneticisine devreder.

Yine bu yöntem ile grub.conf da yer alabilecek örnek aşağıdaki gibidir:

title WinXP
rootnoverify (hd0,0)
chainloader +1

Bu yöntemde yer alan rootnoverify ve chainloader komutlarına ilişkin detaylı bilgilere az sonra değineceğiz.

4-Grub İmage'leri :

Grub birtakım image'ler içerir.Temel olarak iki tane image dosyası vardır ki bunların birisi "stage1" diğeri ise "stage2" dir. Opsiyonel olarak kullanılan diğer image'ler ise;

"stage1.5" , "nbgrub" ile pxegrub" dur.

stage 1 :

MBR 'ye veya diskin boot sektörüne yerleştirilen boot image'dir. Boyutu 512 byte'dır.

Stage 1, stage 2 yi veya stage 1.5 'i yükler.

stage 1.5 :

Stage 1 ile stage 2 arasındaki geçişi sağlar. Aşağıdaki image dosyaları stage 1.5 dosyalarıdır.

e2fs_stage1_5, fat_stage1_5, ffs_stage1_5, jfs_stage1_5, minix_stage1_5, reiserfs_stage1_5, vstafs_stage1_5, xfs_stage1_5

stage 2 :

Geri kalan işlemlerin devredildiği stage'dir.

nbgrub ve pxegrub :

Network üzerinden boot edilebilmeyi sağlayan boot imageleridir.

5-Grub Komutları :

Boot menüsünde "c" tuşuna basıp komut satırına geçtiğimizde yada işletim sistemi içerisinde "grub" yazıp entere bastığımızda karşımıza gelen grub komut satırında "help" yazarak grub içerisinde yer alan komutların listesini görebiliriz.

[root@serdar root]# grub
Probing devices to guess BIOS drives. This may take a long time.

GRUB version 0.92 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> help
blocklist FILE boot cat FILE chainloader [--force] FILE
color NORMAL [HIGHLIGHT] configfile FILE
device DRIVE DEVICE displayapm
displaymem find FILENAME geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm]
help [--all] [PATTERN ...] hide PARTITION
initrd FILE [ARG ...] kernel [--no-mem-option] [--type=TYPE]
makeactive map TO_DRIVE FROM_DRIVE
md5crypt module FILE [ARG ...]
modulenounzip FILE [ARG ...] pager [FLAG]
partnew PART TYPE START LEN parttype PART TYPE
quit reboot
root [DEVICE [HDBIAS]] rootnoverify [DEVICE [HDBIAS]]
serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY]
setup [--prefix=DIR] [--stage2=STAGE2_ terminal [--dumb] [--timeout=SECS] [--testvbe MODE unhide PARTITION uppermem KBYTES vbeprobe [MODE]

Yukarıda listesi görünen komutlardan en çok ihtiyaç duyulanları izah etmeye çalışalım.

cat :

Kullanımı : cat <dosya_ismi> (örn : cat (hd0,1)/etc/fstab)

İstenilen dosya içeriğini görüntüler.

grub> cat (hd0,4)/etc/fstab
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda8 swap swap defaults 0 0
/dev/hda6 swap swap defaults 0 0

chainloader :

Kullanımı : chainloader -force <dosya_ismi>

rootnoverify ile belirtilen disk bölümünde boot image'inin hangi sektörde bulunduğunu işaret eder. "chainloader +1" kullanımı rootnoverify ile belirtilen bölümün ilk sektöründen boot etmesini belirtir. Aksi bir durum söz konusu ise "chainloader -force <dosya_ismi> ile yer belirtilebilir.

color :

Kullanımı : color <normal> <highlight> (örn : color light-gray/blue black/light-gray)

Menü rengini değiştirmek için kullanılır. İlk kısımda belirtilen parametre menünün normal halinin rengini ifade eder. İkinci kısımda belirtilen parametre ise kursorun belirtilen title'ın üzerine geldiğinde oluşacak rengi ifade eder. Yine her iki kısımdaki parametrelerde kullanım şekli önplan-rengi/geriplan-rengi (FG/BG) şeklindedir.

Yani "color light-gray/blue black/light-gray" ifadesi ile menünün rengi önplan,
light-gray arkada plan, blue olacak şekilde belirtilmiş. Kursorun title'lar üzerindeki durumunda ise önplan rengi, black geriplan rengi ise light-gray olarak seçilmiş.

Kullanılabilecek renkler :

black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, white.

Bu renklerden sadece ilk sekiz tanesi geriplan (background) rengi olarak kullanılabilir.

configfile :

Kullanımı : configfile <dosya_ismi>

Belirtilen yerdeki dosyayı konfigurasyon dosyası olarak yükler.
Örnek :

grub> configfile (hd0,4)/boot/grub/menu.lst

grub.conf içerisinde düzenlenen yapının boot ekranında gelecek olan halidir.

default :

Kullanımı : default <numara> (örn: default 1)

grub.conf içerisinde yer alan OS bilgilerinden kaçıncı sıradakinin default olarak açılacağını belirtir.

default 1
title Red Hat Linux
root (hd0,4)
kernel /boot/vmlinuz-2.4.18-14 ro root=/dev/hda5
initrd /boot/initrd-2.4.18-14.img

title Debian
root (hd0,6)
kernel /boot/vmlinuz-2.2.20-idepci ro root=/dev/hda7

title WinXP
rootnoverify (hd0,0)
chainloader +1

Şekilde girilen bir yapıda "default 1" değeri ile boot işlemi sırasında herhangi bir mudahale olmazsa default olarak "Debian" ile ilgili kısmı işleme sok anlamındadır. Yani

default 0 -> 1. kısım (Redhat)
default 1 -> 2. kısım (Debian)
default 2 -> 3. kısım (WinXP) gibi.

fallback :

Kullanımı : fallback <numara> (örn : fallback 0)

Default olarak belirtilen kayıdın boot işlemi sırasında herhangi bir hata olursa fallback ile belirtilen kayıt devreye sokulur.

default 0
fallback 1

şeklinde bir yapı belirlemiş olduğumuzu varsayarsak yukarıda yer alan grub.conf içeriğimize göre ilk önce "Red Hat" boot edilmek istenecek. Şayet boot işleminde bir hata oluşursa "timeout" ile belirtilen zaman kadar bekleyip otomatik olarak "Debian" kısmını işletecek.

find :

Kullanımı : find <dosya_ismi> (örn : find /etc/fstab)

Belirtilen dosyayı tüm harddisk alanlarında arar.

grub> find /etc/fstab
(hd0,4)
(hd0,6)

/etc/ altındaki fstab dosyasını yer aldığı harddisk bölümlerini listeler ( (hd0,4) ve (hd0,6) ).

hide :

Kullanımı : hide <hdd bölümü> ( Örn : hide (hd0,1) )

Belirtilen disk bölümünü gizlemeye yarar. Harddiskinizin birinci bölümünde DOS aynı hardiskin ikinci bölümünde Windows kurulu olduğunu farzedelim (ker ikiside primary olarak işaretlenmiş olsun). Siz sadece Dos kısmında boot edilmesini sağlamak istiyorsanız.

grub> unhide (hd0,0)
grub> hide (hd0,1)
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> makeactive
grub> boot

Şeklinde birinci harddiskdeki birinci bölümü öne çıkarıp ikinci bölümü gizleyebilirsiniz.

initrd :

Kullanımı : initrd <dosya ismi> (Örn : initrd /boot/initrd-2.4.18-14.img)

Ram disk image'i kullananlar için image'in yüklenmesini sağlar.

kernel :

Kullanımı : kernel [`--type=tip'] [`--no-mem-option'] dosya ...

Sisteme yüklenecek boot image'inin yerini belirtir.

kernel /boot/vmlinuz-2.2.20-idepci ro root=/dev/hda7 (/dev/hda7 de /boot dizininde yer alan "vmlinuz-2.2.20-idepci" isimli image'i yüklemesini sağlar.)

makeactive :

Disk bölümünnün aktif edilmesini sağlar. Windows vb. işletim sistemleri buna ihtiyaç duyar.

# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
root (hd0,0)
makeactive
chainloader +1

map :

Kullanımı : map <map edilecek sürücü ismi> <map edilen sürücü> (Örn : map (hd0) (hd1))

Şayet dos veya windows'u birinci diskinize harddiskinize yüklememişseniz vede diğer diskten boot edemiyorsanız. "map" komutu ile dos veya windows'un olduğu diski birinci disk ile yer değiştirebilirsiniz. Yani o diski birinci disk gibi gösterebilirsiniz. Aşağıda birinci disk ile ikinci diskin nasıl yer değiştirilebileceğine dair bir örnek.

grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

md5crypt :

Kullanımı : md5crypt

password komutu ile birlikte kullanılmak üzere encrypt edilmiş şifre üretir. Örnek verecek olursak:

grub> md5crypt

Password: *****
Encrypted: $1$M.P8g/$CwPjmlPRCZLo7wL5rMJyD1

password :

Kullanımı : password [`--md5'] <şifre> (örn : password --md5 $1$M.P8g/$CwPjmlPRCZLo7wL5rMJyD1)

grub.conf içerisinde istenilen işletim sisteminin boot edilmesi işleminde şifre sorulmasını veya "single mod" ile sistem açılmak istenildiginde şifre sorulması işlemi için kullanılır. İster md5crypt fonksiyonu ile ürettiğimiz md5 yapısındaki şifreyi kullanabiliriz, istersek düz metin olarakda ("password sifrem" şeklinde) şifremizi belirtebiliriz.

root :

Kullanımı : root (<sürücü>,<bölüm_ismi>,<dilim_ismi>)

Belirtilen sürücü üzerindeki disk bölümünde bulunan kısmı mount eder.

Örnekler :

Linux'e ait kullanım örnekleri :

root (hd0,1) : Birinci diskin 2. bölümünde (/dev/hda2 veya /dev/sda2) yer alan bölümdür.
root (hd1,4) : İkinci diskin 5. bölümünde (/dev/hdb5 veya /dev/sdb5) yer alan bölümdür.

grub> root (hd0,4)
Filesystem type is ext2fs, partition type 0x83

*BSD ve vb işletim sistemelerine ait kullanım örnekleri :

root (hd0,1,a) : Birinci diskin 2. bölümünün "a" (/dev/ad1s2a) dilimini işaret eder.
root (hd1,2,d) : İkinci diskin 3. bölümünün "d" (/dev/ad2s3d) dilimini işaret eder.

rootnoverify :

Kullanımı : rootnoverify (<sürücü>,<bölüm_ismi>,<dilim_ismi>)

Gruba chain-loading metodu ile işletim sistemi ekleneceği zaman (windows, dos, winxp vb.) belirtilen kısmın mount edilmeyeceğini belirtir.

Örnek :

title WinXP
rootnoverify (hd0,0)
chainloader +1

setup :

Kullanımı : setup [`--force-lba'] [`--stage2=os_stage2_dosyası] [`--prefix=dir'] yüklenecek_sürücü [image_sürücü]

Karmaşık kullanımı olan "install" komutunu kullarak grub'un MBR' ye yüklenmesini sağlar. Genellikle root komutu ile birlikte kullanılır.

grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 22 sectors are
embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+22 p
(hd0,4)/boot/grub/stage2
/boot/grub/grub.conf"... succeeded
Done.

timeout :

Kullanımı : timeout <saniye> (örn : timeout 10)

Default yada fallback komutlarında belirtilen kısmı işleme sokmadan önce olası bir kullanıcı müdahalesine karşın belirtilen saniye kadar bekler.

title :

Kullanımı : title <isim> (örn : title GNU/Debian)

Boot işleminde belirtilen kısımların isimlendirilmesini sağlar.

unhide :

Kullanımı : unhide <disk bölümü> ( Örn : unhide (hd0,0) )

"hide" komutunun yaptığı işin tam tersi olarak disk bölümünü aktif eder. Aynı diskte birden fazla primary alan olduğu zaman istenilen birinin iptal edilip diğerinin aktif edilmesi amacı ile kullanılır.

6-Splashimage Kullanımı ve Splashimage Yapımı :

Boot menüsünde cok daha güzel, hoş görüntüler elde edebilmek için splashimage'lerinden faydalanabilirsiniz. Bu desteğin verilmesi için "vga-16" yamasına ihtiyaç vardır. Redhat tarafından hazırlanmış son rpm'ler bu yama ile birlikte çıkmıştır, yani bu desteğe sahiptirler.

Kaynak koddan kurulum yapanlar için yamaların bulunabileceği bir adres: http://people.redhat.com/~katzj/grub/patches/

Debian kullananlar (unstable) source.list'e aşağıdaki adresleri girdikten sonra "apt-get update" daha sonra "apt-get install grub" ile vga desteğine sahip grub önyükleyici yöneticisini kurabilirler.

deb http://people.debian.org/~ingo/grub/unstable/ ./
deb-src http://people.debian.org/~ingo/grub/unstable/ ./

Splashimage'ler 640 x 480, 14 renk olarak yapılmış resim dosyalarıdır. Sizde kendinize ögzün resim dosyaları yapmak için

#convert -geometry 640x480 -colors 14 image.jpg image.xpm

#gzip image.xpm

ile image.xpm.gz dosyasını elde edersiniz. daha sonra bunu /boot/grub/ altina yerleştirip, grub.conf içerisinde

splashimage (hd0,1)/boot/grub/image.xpm.gz

veya

splashimage /boot/grub/image.xpm.gz

şeklindeki bir tanımlama ile kullanmanız mümkün.

Splashimage örneklerine buradan ulaşabilirsiniz

7-Boot Menüsüne Ait Kısayollar ve İşlemler :

İlk açılışta karşımıza gelen boot menüsüne ait kısa yol tuşları ve onlara ait işlemler şu şekildedir.

"c" : Grub komut satırına geçmemizi sağlar.

"e" : Kursorun üzerinde bulunduğu satıra ait bilgilerin edit edilebilmesini sağlar.

"b" : Edit kısmında kursorun üzerinde bulunduğu kısmın boot etmesini sağlar.

"o" : Edit kısmında kursorun bulunduğu satırın sonrasına yeni boş bir satır açar.

"O" : Yine edit kısmında kursorun bulunduğu satırın önüne yeni boş bir satır açar.

"d" : Kursorun üzerinde bulunduğu satırı siler.

8-Örnek Konfigürasyon Dosyaları :

1.

default=1
timeout=10


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


title Red Hat Linux (2.4.18-14)
root (hd0,4)
kernel /boot/vmlinuz-2.4.18-14 ro root=/dev/hda5
initrd /boot/initrd-2.4.18-14.img


title Debian
root (hd0,6)
kernel /boot/vmlinuz-2.2.20-idepci ro root=/dev/hda7

title WinXP
rootnoverify (hd0,0)
chainloader +1

2.

timeout 5
color black/yellow yellow/black
default 0
password freeos

title Red Hat Linux
root (hd0,2)
kernel /vmlinuz-2.4.18-3 ro root=/dev/hda5 hdc=ide-scsi idebus=50
initrd /initrd-2.4.18-3.img


title WinXP
root (hd0,1)
makeactive
chainloader +1


Grub hakkında daha detaylı bilgi edinmek için;

1. http://www.gnu.org/manual/grub/index.html

2. http://www.fifi.org/doc/grub-doc/html/grub_toc.html