grub重建

Grub

grub 是較新的 boot loader 程式,他具有相當多的優點,這裡不一一列舉啦!無論如何, lilo 能做的, grub 幾乎都可以做的到,包括選單、密碼、指向等等的功能!不過, grub 比 lilo 要先進的幾點是:

1. 他可以讓您在開機的時候『自行編輯與修改開機設定項目』,有點像是 bash 的指令模式;
2. 他可以自動『動態尋找設定檔』,亦即他可以依據 /boot/grub/menu.lst 的設定而改變其設定!因此,修改設定只要改 /boot/grub/menu.lst 即可,不需要再重新安裝 grub !

很棒吧!不過,在設定底下的工作之前,請先確認您的 grub 這個套件已經安裝上來來!如果還沒有安裝的話,那麼先查閱一下 RPM 的安裝方法再說!底下假設 grub 這個套件已經安裝在您的主機上囉!

* 設定檔 /boot/grub/menu.lst

Grub 的設定檔也很簡單,就是 /boot/grub/menu.lst 這個檔案,請注意,那個 lst 是 L 的小寫呢!如果有興趣的話,可以使用 info grub 好好的去看一下他的所有功能,底下僅列出一些我們常用的功\能與設定而已喔!

o 關於硬碟的代號:

在 grub 裡面,有一點是比較讓人覺得不適應的,那就是他的硬碟代號與 lilo 還有 Linux 傳統的代號不一樣~他的代號主要有點像這樣:

(hd0,0)

hd 指的是 IDE 的硬碟,而裡面的 0,0 代表什麼呢?第一個 0 代表他是第一個 IDE 的 master ,而第二個 0 代表他是第一塊 partition 的代號,所以呢,這個代號就是 hda1 啦!所以,我們可以得到底下這個對應表:

裝置
Lilo

Grub
IDE1 master hda, hda1, hda2 (hd0), (hd0,0), (hd0,1)
IDE1 slave hdb, hdb1, hdb2 (hd1), (hd1,0), (hd1,1)
IDE2 master hdc, hdc1, hdc2 (hd2), (hd2,0), (hd2,1)
IDE2 slave hdd, hdd1, hdd2 (hd3), (hd3,0), (hd3,1)

這裡需要先記憶一下囉!

好了,那麼將我的 menu.lst 列出來一下吧先!
 
[root @test root]# vi /boot/grub/menu.lst
timeout 10 <==多久之後鍵盤沒有動靜,就直接以 default 的設定開機,這裡是秒數!
Color black/cyan yellow/cyan <==設定顏色的參數
i18n (hd0,0)/boot/grub/messages <==設定 i18n 多國語系的訊息提示
keytable (hd0,0)/boot/us.klt <==設定鍵盤形式,通常使用美規的鍵盤即可!
Default 0 <==預設的開機選項,依照底下的排序,第一個為 0 ! title linux <==這是第一個開機設定檔,亦即排序為 0 號!
kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=mount
initrd (hd0,0)/boot/initrd.img
<==上面兩個則是開機設定檔的基本內容,分別是
核心檔案所在地與 Ramdisk 的設定內容!

title failsafe <==這是第二個開機設定檔,亦即排序為 1 號!
kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe
initrd (hd0,0)/boot/initrd.img

title windows
chainloader (hd1,0) +1
 
o default 與 title 的計算方式:

基本的說明已經在上表當中了,這裡需要在說明的是關於 default 開機檔的計算。如果今天我有四個開機設定檔,那麼 default 算的是什麼呢?就是『排序』啦!假如我底下依序出現的設定檔 title 分別是 linux, linux-test, windows, failsafe 的話,那麼開機的時候, grub 的選單就會顯示:
linux
linux-test
windows
failsafe
其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要調整開機時後的選單順序,就在 /boot/grub/menu.lst 修改一下他們的順序即可!但是記得 default 要跟著變,因為他也是依據排序而變的呦!這點請不要忘記了?
o title 內容的設定方式:

基本上,如果是一般的硬碟環境中,我們僅需要兩行就可以設定好 title 的內容了,分別是:
 
root [開機根目錄 / 所在的磁碟代號]
kernel [開機檔案的所在地完整檔名] [root=/dev/硬碟代號]

範例:
root (hd0,0)
kernel /boot/vmlinuz-2.4.19-16mdk root=/dev/hda1

設定上面就是這樣而已!所以,開機完畢之後,請將您的 kernel 檔案名稱(完整檔名)與開機的根目錄所在的磁碟代號記憶一下,那麼下次就可以手動設定開機設定項目呢!但如果是 windows 方面的設定時,那就直接使用 chainloader 這個項目即可,有點像這樣:
chainloader [硬碟代號] +1

範例:
chainloader (hd1,0) +1
  安裝 grub 在系統中
*

要安裝 grub 跟 /boot/grub/menu.lst 並沒有相關性!因為剛剛我們就提過了, grub 為動態去搜尋設定檔的,所以寫入 MBR 或 super block 時,並沒有將 menu.lst 寫入ㄋㄟ?好了,那我們就來安裝看看吧!安裝的方式主要也是分為安裝在 MBR 與 super block 呢!底下我們就來談談這兩種安裝的方式:基本上的動作就是:
 
1. 使用 root [磁碟代號] 選擇開機根目錄 / 所在磁碟代號;
2. 使用 setup [磁碟代號] 選擇 MBR 或 Super block 直接安裝進去!
3. 使用 quit 就可以離開 grub 了!
  
[root @test root]# grub

# 先安裝在 Super Block 底下試看看:
grub> root (hd0,0) <==這裡輸入我要的 root 硬碟磁區!
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0,0) <==實際安裝上來!使用 setup 指令!
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,0)”… failed (this is not fatal)
Running “embed /boot/grub/e2fs_stage1_5 (hd0,0)”… failed (this is not fatal)
Running “install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 p /boot/grub/menu
.lst “… succeeded
Done.

# 再安裝在 MBR 試看看:
grub> root (hd0,0)
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)”… 17 sectors are embedded.
succeeded
Running “install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2
/boot/grub/menu.lst”… succeeded
Done.
grub> quit <==離開 grub 囉!
 
這樣就安裝進去囉!很方便吧!並不難吧!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据