GRUB (GNU GRand Unified Boot loader)

Loading

新的 GRUB2 請參考 https://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 修改成你剛剛產生的檔名即可.

Step 3: 開機以及核心信息轉向 console redirection

1. 安裝完你的作業系統
2. 修改你的 BIOS(如果你的有支援 ) BIOS Redirection Port to [Serial 1 or Serial 2] 3. 修改你的 /boot/grub/grub.conf

[root@benjr ~]# vi /boot/grub/grub.conf
default=0
timeout=10

# 這三行和 GRUB 輸出有關
# splashimage=(hd0,1)/boot/grub/splash.xpm.gz
# 因為文字模式下無法顯示任何圖片,所以要將這一行刪除或者註記(#)

serial --unit=0 --speed=115200

#–unit 決定你的資料要從哪一個 comport 出去,unit=0 (/dev/ttyS0), unit=1(/dev/ttyS1)
#–speed 決定了傳輸速度
#下面還有其他的參數可使用
#–word=8 傳輸字元可以為7或8 bits
#–parity =no 需要同位元檢查的就選 yes
#–stop=1 需要停止位元就選 1

terminal –timeout=10 serial console
title RedHat Enterprise Linux AS (2.4.21-9.ELsmp)
root (hd0, 0)

#接下來這一行就會將 kernel 的訊息輸出至 comport

kernel /vmlinuz-2.4.21-9.ELsmp ro root=LABEL=/ console=ttyS0,115200,vt100
initrd /initrd-2.4.21-9.EL.img

4. 系統預設不能使用 comport 來登入系統 ,所以要修改一下 /etc/inittab

[root@benjr ~]# vi /etc/inittab
# Run gettys in standard runlevels
co:2345:respawn:/sbin/agetty ttyS0 115200 vt100
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

5. 由於 PAM 的限制所以 root 無法使用 comport 登入系統 ,所以還是要修改一下 /etc/securetty:

['root@benjr ~]# vi /etc/securetty
ttyS0

/etc/sysconfig/kudzu

[root@benjr ~]# vi /etc/sysconfig/kudzu
SAFE=yes

6. 接下來要將 Null Modem 接在兩方的電腦, Linux 重新開機就可以不需要螢幕.所有的資料都將透過 comport 來傳送.

Step 4: Rescue mode

1.當安裝完OS重開機時有時只會看到GRUB的提示字元就停住了,這有可能是不小心把grub裝錯硬碟,這時只能使用原光碟片來進行修復
boot: linux rescue
rescue
2.如果還能進到 GRUB 本身提供bash like的操作介面,我們可以先手動將OS開起來再修改相關的設定
bootmenu04
GRUB開機有4個步驟

I.指定磁碟機及分割區

#root (hd0,0)

II.指定開機核心及root file system

#kernel &lt;/VMLINUZ-X.X.X-X ro&gt;root=LABEL=/

III.載入initrd

#initrd &lt;/INITRD-IMAGE&gt;

IV.執行開機

#boot

開機以後再修改grub相關設定

由於GRUB提供bash like的介面,當你在選擇kernel 及initrd-image檔名時可以試著按下tab鍵就可以自動幫你找出檔名

note:
對GRUB來說,GRUB上的磁碟機為第一顆硬碟為hd0,然後以此類推比如說系統上有hda sda sdb sdc,Grub如果在hda上面,對grub來說hda=hd0 sda=hd1 sdb=hd2 sdc=hd3假如我的系統是在sda上,/boot 在第一個分割區上那指定磁碟機的時候就是#roo (hd1,0)

更多的 GRUB 的使用請參考下面的網站.
http://www.gnu.org/software/grub/manual/

新的作業系統採用 GRUB2 請參考 https://benjr.tw/95009

沒有解決問題,試試搜尋本站其他內容

4 thoughts on “GRUB (GNU GRand Unified Boot loader)

  1. 自動引用通知: Linux – GRUB2 – Benjr.tw
  2. 自動引用通知: OS 安裝 | Benjr.tw
  3. 自動引用通知: Linux 開機流程 | Benjr.tw
  4. 自動引用通知: Linux – 系統開機 | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料