4,699 瀏覽數

GRUB

GRUB(GNU GRand Unified Boot loader)
新的 GRUB2 請參考 http://benjr.tw/95009
Step 0: 前言
Step 1: GRUB 設定檔
Step 2:常見問題
Step 3: 開機以及核心信息轉向 console redirection
Step 4: Rescue mode

Step 0: 前言

GRUB 的載入可以分為三個階段 stage1,stage1.5 和 stage2

  1. BIOS 會將硬碟的 MBR( 前512 bytes)讀進記憶體中.這就是第一階段 (stage1) 他將有能力繼續做stage1.5以及stage2.
  2. 第一點五階段 (stage1.5) 會去找尋我的系統上 /boot 磁區.並且讀取 /boot 磁區上一些相關資料.
  3. 第二階段 (stage2) 會顯示 GRUB menu 以及 command 環境.GRUB的使用者介面允許使用者選取作業系統核心或將伊些參數傳給核心(kernel).後面會介紹如何傳參數給 kernel.
  4. 第二階段 (stage2) 會等待使用者選取一個作業系統核心(kernel 和 initrd)並將他讀入記憶體中.接下來就將控制權交由作業系統管理了.

Step 1: GRUB 設定檔

系統安裝好後 GRUB 存放在 /boot/grub/grub.conf. /boot/grub/menu.lst 是他的分身.

[root@benjr ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/hda2
# initrd /boot/initrd-version.img
# boot=/dev/hda
default=0
timeout=10
hiddenmenu
password --md5 $1$0BqX5/$D/MgNxFsg8oOsPsVz8EAN.
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
#for console system from serial port
#serial = 1,9600n8 (ttyS1, 9600 bd, no parity, 8 bits)
title Red Hat Linux (2.4.18-3)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2 #console=ttyS1,9600 #for console system from serial port
initrd /boot/initrd-2.4.18-3.img
title Win2000
rootnoverify (hd0,0)
chainloader +1

說明:

default=0

預設開機選項,每個 title 代表一項開機選單 (而這裡 0 代表 RedHat Linux,1 代表 Win2000 )

timeout=10

開機選單等待時間(10表示10秒)

timeout=-1</strong>

如果是 -1 代表不自動選哪一個OS開機,你也可以直接在前面加上 # 這樣也不會使用預設的選項開機.

hiddenmenu

表示不顯示選單直接由預設的選項開機.

password --md5 $1$0BqX5/$D/MgNxFsg8oOsPsVz8EAN.

GRUB 密碼,詳細設定請看”Step 2:常見問題”說明

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

選單的背景圖示,詳細設定請看”註”說明

title Red Hat Linux (2.4.18-3)

開機選單

root (hd0,1)

設定 H.D 的 root paraition 所在位置.

第一個參數是開機 H.D BIOS setting 中的硬碟開機順序,不管是 IDE 或 SCSI H.D 皆是 hdx (x 是依據 BIOS setting 中的硬碟開機順序,0:第一顆,1:第二顆………..依序下去,這裡是設定成第一顆 H.D).第二個參數就是開機 H.D root 的 partition (0:第一個 partition ,1:第二個 partition ………..依序下去) .這個順序其實是參考了 /boot/grub/device.map 檔案

[root@benjr ~]# cat /boot/grub/device.map
# this device map wasgenerated by anaconda
(fd0) /dev/fd0
(hd0) /dev/hda
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2
initrd /boot/initrd-2.4.18-3.img

kernel,ramdisk 所在位址

title Win2000

其他非 Linux 開機選單

rootnoverify (hd0,0)

不同於 root ,它並不會先驗證檔案系統

chainloader +1

用來載入 Microsoft 的作業系統(如:DOS,Windows…)

將開機以及核心信息轉向至 ComPort 來輸出,詳細設定請看”註”說明

serial = 1,9600n8 (ttyS1, 9600 bd, no parity, 8 bits)

或者

serial --unit=1 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

當然核心這邊也要加入參數才能將信息轉向至 ComPort

kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2 console=ttyS1,9600

kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2 console=ttyS1,9600n8

Step 2:常見問題
1.GRUB 設定檔
GRUB 設定檔是寫入就立即生效,不須像LILO需再回寫至MBR.除非GRUB本來就不存在MBR,此時就要下指令

[root@benjr ~]# grub-install /dev/hda

回寫至MBR,當我們的 H.D 裝置順序有誤錯時.要先修改 /boot/grub/device.map 檔案中硬碟的順序.

[root@benjr ~]# cat /boot/grub/device.map
#this device map wasgenerated by anaconda
(fd0) /dev/fd0
(hd0) /dev/hda

請確定你要安裝的 GRUB 的 H.D 順序在 hd0 ,或者在使用 grub-install 加上參數–recheck

[root@benjr ~]# grub-install --recheck /dev/hda

2.安裝系統後設定GRUB的密碼
GRUB的密碼是經過MD5的加密所以無法在grub.conf直接設定,所以有個指令用來幫我們的將密碼以MD5加密的方式呈現

[root@benjr ~]# grub-md5-crypt

將加過密的密碼寫到/boot/grub/grub.conf檔,類似如下
password –md5 $1$0BqX5/$D/MgNxFsg8oOsPsVz8EAN.
設password對於一般boot選項是不會有差異的,如果你要對 boot 選項加參數,如進入signal user mode 時必須鍵入密碼,才能對 boot 選單加參數.就如同 lilio.conf 設定檔加入 restricted 一樣
3.GRUB 如何進入signal mode
系統預設有 hiddenmenu 你必須按任意鍵才會出現選單我們才能為核心加入參數.

bootmenu00
按下任意鍵之後可以看到兩個選單一是 smp 多核心的 kernel 會是單一核心的 kernel ,選擇你要開機的核心,你可以在選單下面看到有提示要按什麼鍵來進入編輯模式.上下鍵是可以選擇不同的核心.“e” 就是鍵入編輯模式. “a” 是可以直接為核心加入參數. “c” 為進階版的編輯模式,你可以使用 GRUB 提供的 shell 下指令.

bootmenu01
如果再開始選單鍵入 “e” 就會進入編輯模式,你還可以針對 root 磁區,kernel 還是 initrd 輸入參數,要編輯還是按 “e” 如果都加好參數此時就可以按 “b” 直接開機.

bootmenu02
這是當你連續按 2 個 “e” 就可以輸入參數.參數 1 就是要進入 single user mode.

bootmenu03
按 “c” 是 shell 模式,按 help 可以看到所有的指令,不建議使用除非你對於他的指令有所了解.

bootmenu04
在GRUB選單鍵入p打密碼(沒有設定密碼就不需要了),鍵入e 進行編輯,在kernel 選單鍵入e 進行編輯,後面再加 1(signal mode),2,3(level 3for text mode),5(level 5 for Xwindow) 等參數進入不同的runlevel.鍵入b去啟動系統

4.修改GRUB 的背景圖
看過 grub.conf 設定檔的會發現 splashimage=(hd0,1)/boot/grub/splash.xpm.gz 這一段設定,將他解開就是所們所看到的圖示了.所以我們也可以將自己的圖壓縮後覆蓋原先的 /boot/grub/splash.xpm.gz

修改方法如下:
GRUB 的背景圖為 640*480*14 色的 xpm (檔案格式).我們可以使用 Linux 提共的 #gimp 修改成我們需要的圖示.在圖片按右鍵 Image -> Mode -> Indexed 在最上面有一個 Generate Optimum Plalette Max. Number of colors 改成14色.接下來儲存的類型,請選擇 Xpm.還要用 gzip 壓縮 #gzip -9 xxx.xpm 最後會產生 xxx.xpm.gz 將它放在 /boot/grub/xxx.xpm.gz 修改一下 /boot/grub/grub.conf 就可以了.設定檔中的 splashimage=(hd0,1)/boot/grub/xxx.xpm.gz 修改成你剛剛產生的檔名即可.

4 Replies to “GRUB”

  1. 自動參照通知: Linux – GRUB2 – Benjr.tw

  2. 自動參照通知: OS 安裝 | Benjr.tw

  3. 自動參照通知: Linux 開機流程 | Benjr.tw

  4. 自動參照通知: Linux – 系統開機 | Benjr.tw

發表迴響