grub詳解(轉)

post0發表於2007-08-11
grub詳解(轉)[@more@]

應櫻家冢、Bluedata以及其他兄弟的要求,這裡談一談自己在配置Grub當中積累的點滴,不存在什麼高深的使用技巧——^_^,我自己也沒有掌握,實際上就是我們常用的功能整理了一下。如有錯誤和疑問,請大家指教!因為時間不夠用,所以才這麼遲的出來,希望兩位兄弟諒解,同時感謝網路上曾經為了linux的事業不停奮鬥而無私貢獻的人們——因為本文參考了他們的經驗!

1、一個GRUB配置檔案

2、解讀grub.conf檔案

3、配置grub

4、GRUB的互動性

5、常見grub除錯方法的思路

1 一個GRUB配置檔案

基於本例的分割槽如下:

hda 15G

hda1 8G / RED HAT LINUX8.0

hda5 7G /home

hdc 20G

hdc1 6.4G WinXP

hdc5 6.4G

hdc6 6.4G

hdc7 6.4G

#fdisk -l

# Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders

Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System

/dev/hdc1 * 1 894 7181023+ b Win95 FAT32

/dev/hdc2 895 2434 12370050 f Win95 Ext'd (LBA)

/dev/hdc5 895 1787 7172991 b Win95 FAT32

/dev/hdc6 1788 2434 5196996 b Win95 FAT32

Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders

Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 1020 8193118+ 83 Linux

/dev/hda2 1021 1802 6281415 83 Linux

/dev/hda3 1803 1867 522112+ 82 Linux swap

grub.conf,這個檔案位於;/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,0)

# kernel /boot/vmlinuz-version ro root=/dev/hda1

# initrd /boot/initrd-version.img

#boot=/dev/hda

default=0

timeout=3

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

title Red Hat Linux (2.4.18-14)

root (hd0,0)

kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/

initrd /boot/initrd-2.4.18-14.img

title Microsoft Windows XP

root (hd1,0)

chainloader (hd1,0)+1

makeactive

map (hd0) (hd1)

map (hd1) (hd0)

boot

2 解讀grub.conf檔案

我們將來看看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,0)

# kernel /boot/vmlinuz-version ro root=/dev/hda1

# initrd /boot/initrd-version.img

#boot=/dev/hda (注:以上以符號井"#"開頭的行表示被註釋掉,沒有任何意義)

default=0 (注:預設的作業系統就是由default控制的。default後加一個數字n,表明是第 n+1個。需要注意的是,GRUB中,計數是從0開始的,第一個硬碟是hd0,第一 個軟碟機是fd0,等等。所以,default 0 表示預設的作業系統在這兒是 Red Hat Linux (2.4.18-14)如果你修改成1就是WinXP了)

timeout=3 (注:timeout表示預設等待的時間,這兒是3秒鐘。超過3秒,使用者還沒有作出選 擇的話,系統將自動選擇預設的作業系統;當然你可以改成任何你樂意的時間)

splashimage=(hd0,0)/boot/grub/splash.xpm.gz (注:指定開機畫面檔案splash.xpm.gz的位置,也可以splash /boot/logo/800x600x8.img)

title Red Hat Linux (2.4.18-14) (注:表示Red Hat Linux的選單項)

root (hd0,0) (注:表示第一個硬碟第一個分割槽,這裡的root和系 統內的root不是一碼事!詳細如下說明)

kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ (注:指定核心的位置,詳細說明如下 文)

initrd /boot/initrd-2.4.18-14.img (注:初始化)

title Microsoft Windows XP (注:表示Microsoft Windows XP的選單項)

map (hd0) (hd1) (注:map是命令,詳細如下)

map (hd1) (hd0)

root (hd1,0) (注:這是指第二個硬碟(從硬碟)上第一個分割槽)

chainloader (hd1,0)+1 (注:鏈式裝入器,裝入一個扇區的資料然後把引導 權交給它。詳細說明如下)

makeactive

boot

(注:在 Linux 中,當談到 "root" 檔案系統時,通常是指主 Linux 分割槽。但是,GRUB 有它自己的 root 分割槽定義。GRUB 的 root 分割槽是儲存 Linux 核心的分割槽。這可能是您的正式 root 檔案系統,也可能不是。我們討論的是 GRUB,需要指定 GRUB 的 root 分割槽。進入 root 分割槽時,GRUB 將把這個分割槽安裝成只讀型,這樣就可以從該分割槽中裝入 Linux 核心。GRUB 的一個很“酷”的功能是它可以讀取本機的 FAT、FFS、minix、ext2 和 ReiserFS 分割槽.到目前為止,您可能會感到一點疑惑,因為 GRUB 所使用的硬碟/分割槽命名約定與 Linux 使用的命名約定不同。在Linux 中,第一個硬碟的第五個分割槽稱作 "hda5"。而 GRUB 把這個分割槽稱作 "(hd0,4)"。GRUB 對硬碟和分割槽的編號都是從 0 開始計算。另外,硬碟和分割槽都用逗號分隔,整個表示式用括號括起。現在,可以發現如果要引導 Linux 硬碟 hda5,應輸入 "root (hd0,4)"。

知道了核心在哪兒,還要具體指出哪個檔案是核心檔案,這就是kernel的工作。

kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/說明/boot/vmlinuz-2.4.18-14就是要載入的核心。後面的都是傳遞給核心的引數。root=LABEL=/ 就是linux的硬碟分割槽表示法,ro是readonly的意思。initrd用來初始的linux image,並設定相應的引數。

命令map:當你有兩塊硬碟,一個無法從第二塊硬碟啟動的作業系統,例如Windowsxp,就可以使用map命令.你能夠將hd0對映為hd1,將hd1對映為hd0。換句話說,你可以虛擬的交換兩個硬碟而啟動所需要的作業系統 。命令形式如下:

grub> map (hd0) (hd1)

grub> map (hd1) (hd0)

GRUB 使用了“鏈式裝入器”(chainloader)。鏈式裝入器從分割槽 (hd1,0) 的引導記錄中裝入winxp自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它建立了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。

GRUB的配置檔案要簡單就這麼簡單,如果你要更個性化一點,試一試把“color light-gray/blue ”加在default語句的下面

3 配置grub

grub啟動時會在/boot/grub/中尋找一個名字為menu.lst的配置檔案,如果找不到此檔案則不進入選單模式而直接進入命令列模式。

現在,我們來看一下如何在啟動後進入各種作業系統,如何建立menu.conf檔案。我們就從GRUB支援的啟動過程開始。可以有兩種方法來完成啟動過程:

·A.透過呼叫核心本地啟動

·B.連續啟動或者將控制轉給另一個引導器

A模式啟動過程

1.配置跟裝置或者告訴GRUB你的根檔案系統。

2.告訴GRUB你的核心影像的位置,然後將引數傳送給核心。

3.重新啟動,試一下。

為了啟動Linux,將核心以bzImage的檔名放在/boot/目錄中,跟檔案系統是

/dev/hda1,或者GRUB中的(hd0,0)。啟動過程如下:

1.root (hd0,0) [This sets the root partition]

2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel]

B模式啟動過程(這種模式假設當前的分割槽中安裝了另一個啟動管理器,例如LILO

或者NTLDR):

1.設定根分割槽但不要安裝它

2.啟用這個分割槽

3.配置需要啟動的分割槽的第一個扇區

4.重新啟動,看一下效果。

我們在試試啟動安裝在/dev/hdc1或者(hd1,0)的windows。啟動windows的過程如下:

1.rootnoverify (hd1,0)

2.makeactive

3.chainloader +1 [+1 sets the first sector of the current root

partition]

4.boot [transfers the control and quits GRUB]

menu.conf檔案:它用於建立啟動多作業系統時的選單。建立menu.conf並不難。它使用簡單的英語,就象你在這一節看到的那樣。

所有的選單專案都以沒有逗號分隔的“title TITLENAME”開頭。你可以隨意設定

TITLENAME。

設定Linux啟動選單步驟如下:

1.設定標題

2.設定根分割槽

3.設定核心的相應引數

4.啟動

一個選單例子:

title Red Hat Linux (2.4.18-14)

root (hd0,0)

kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/

initrd /boot/initrd-2.4.18-14.img

前面有#的行是一個註釋。

建立啟動Windows 或者 DOS的選單:

title Windoze

rootnoverify (hd0,0)

makeactive

chainloader +1

boot

#----

又或者:

title Microsoft Windows XP

map (hd0) (hd1)

map (hd1) (hd0)

root (hd1,0)

chainloader (hd1,0)+1

makeactive

boot

----

注意:root和rootnoverify都是一樣的,把rootnoverify改成root也行。不過經過實踐來看。有時引導win時,系統安裝好後,是rootnoverify (hdX.Y)這樣形式的,這樣會出現windows起不來,出現什麼windows什麼檔案損壞的情況。這時,我們就要把在grub中,引導windows的那段中的rootnoverify改為root

root英文的意思就是根的意思,在這裡是讓linux知道自己所處的位置,也就是我們所安裝linux的/根分割槽所在的位置 。

4 GRUB的互動性

GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新核心或更改它在磁碟上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 檔案即可,一切將保持正常。

只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分割槽的分割槽型別(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 檔案,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其它情況下,可以不必理睬!

GRUB的最大的特點就是互動性特別強。在開機時,按一下“c”,將進入GRUB 控制檯。顯示如下:

GRUB version 0.5.96.1 (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>

歡迎使用 GRUB 控制檯。現在,再研究命令:

將透過GRUB 控制檯繞過lilo來啟動RedHat linux,

grub> root (h

現在,按一次 Tab 鍵。如果系統中有多個硬碟,GRUB 將顯示可能完成的列表,從 "hd0" 開始。如果只有一個硬碟,GRUB 將插入 "hd0,"。如果有多個硬碟,繼續進行,在 ("hd2") 中輸入名稱並在名稱後緊跟著輸入逗號,但不要按 Enter 鍵。部分完成的 root 命令看起來如下:

grub> root (hd0,

現在,繼續操作,再按一次 Tab 鍵。GRUB 將顯示特定硬碟上所有分割槽的列表,以及它們的檔案系統型別。在我的系統中,按 Tab 鍵時得到以下列表:

grub> root (hd0, (tab,按tab一下鍵)

Possible partitions are:

Partition num: 0, Filesystem type is fat, partition type 0x6

Partition num: 2, Filesystem type is ext2fs, partition type 0x83

Partition num: 4, Filesystem type unknown, partition type 0x7

Partition num: 5, Filesystem type is ext2fs, partition type 0x83

Partition num: 6, Filesystem type is fat, partition type 0xb

Partition num: 7, Filesystem type is fat, partition type 0xb

Partition num: 8, Filesystem type is ext2fs, partition type 0x83

Partition num: 9, Filesystem type unknown, partition type 0x82

如您所見,GRUB 的互動式硬碟和分割槽名稱實現功能非常有條理。這些,只需要好好理解 GRUB 新奇的硬碟和分割槽命名語法,然後就可以繼續操作了

程式碼:

grub> root (hd0, 8)

現在已安裝了 root 檔案系統,到裝入核心的時候了

grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro

[Linux-bzImage, setup=0x1200, size=0xe1a30]

您已經安裝了 root 檔案系統並裝入了核心。現在,可以引導了。只要輸入 "boot",Linux 引導過程就將開始。是不是很cool啊,GRUB的menu.lst更像一個linux下的指令碼程式。

5 常見grub除錯方法的思路

首先進去Linux的rescue模式!

用軟盤或光碟啟動,然後在啟動的提示符輸入:linux rescue

按照提示進入一個Shell狀態,你可以到/mnt/下面看到一個sysimage這麼目錄,進去以後,就是你安裝linux的/分割槽.

使用命令將根分割槽變為當前目錄的根分割槽:chroot /mnt/sysimage

然後轉到/sbin/這個目錄中.

使用fdisk -l 顯示當前分割槽情況,然後使用#grub-install /dev/hdx(x為你使用的是那塊硬碟安裝的,一般情況下是hda)

使用exit推出chroot,再使用exit退出linux rescue模式,系統將重新啟動!取出光碟,應該可以看到grub安裝好了.

在具體的環境中,編輯/boot/grub/grub.conf檔案和menu.lst檔案

簡化:

1.安裝盤啟動

2.進入linux rescue模式

3.一系列鍵盤以及幾項簡單的配製,過後就[繼續]了。。。這個過程,我不說了,比較簡單。

4.然後會出現這樣的字元

sh#

5. sh#grub

會出現這樣的字元:grub>我們就可以在這樣的字元後面,輸入:grub>root (hdX,Y)

grub>setup (hd0)

如果成功會有一個successful......

這裡的X,如果是一個盤,就是0,如果你所安裝的linux的根分割槽在第二個硬碟上,那X就是1了;Y,就是裝有linux系統所在的根分割槽。 setup (hd0)就是把GRUB寫到硬碟的MBR上。

其他:

grub選單項丟失,只有字元grub>時的處理方法:

grub>cat (hd0,0) /root/grub/grub.conf(為了看引數。)

grub>root (hd0,1)

grub>kernel (hd0,0) /boot/vmlinuz-2.4.18-11 ro root=/dev/hda2

grub>initrd (hd0,0) /boot/initrd-2.4.18-11.img

grub>boot

如果看不明白,可以參考後面的命令慢慢看,這裡不做註釋,促使大家學習,哈哈

98先裝,用的是單獨的硬碟,4.3G,那時候,LINUX8還沒有到我手中

後來到了,在家中安裝好了,選擇GRUB,就會有DOS的一個選單,我的是在主分割槽

到了公司,把LINUX掛在第一個盤的位置,那個盤掛在第四個盤的位置(這個無所謂)

然後GRUB配置如下

default=0

timeout=10

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

title Red Hat Linux (2.4.18-14)

root (hd0,0)

kernel /vmlinuz-2.4.18-14 ro root=LABEL=/

initrd /initrd-2.4.18-14.img

title DOS

rootnoverify (hd1,0)

makeactive

chainloader (hd1,0)+1

map (hd0) (hd1)

map (hd1) (hd0)

boot

下面是GRUB的可用命令列表:

#大部分命令我們不常用,而且我也沒有每個都試驗!

關於下面將要用到的三種模式的解釋:

GRUB的使用者介面有三種:命令列模式,選單模式和選單編輯模式

  (a) 命令列模式:

  進入命令列模式後GRUB會給出一個命令提示符`grub>`,此時就可以鍵入命令,按回車執行。此模式下可執行的命令是在menu.lst中可執行的命令的一個子集。此模式下允許類似於Bash shell的命令列編輯功能:

或 游標右移一個字元

或 游標左移一個字元

到這一行的開頭

到行尾

刪除游標處的字元

刪除游標左邊的字元

刪除游標右邊的所有字元(包括游標處的字元)

刪除游標左邊的所有字元(包括游標處的字元)

恢復上次刪除的字串到游標位置

或 歷史記錄中的上一條命令

或 歷史記錄中的下一條命令

  在命令列模式下鍵有補全命令的功能,如果你敲入了命令的前一部分,鍵入系統將列出所有可能以你給出的字串開頭的命令。如果你給出了命令,在命令引數的位置按下鍵,系統將給出這條命令的可能的引數列表,具體的可用命令集將在後面給出。

 (b) 選單模式

  當存在檔案/boot/grub/menu.lst檔案時系統啟動自動進入此模式。選單模式下使用者只需要用上下箭頭來選擇他所想啟動的系統或者執行某個命令塊,選單的定義在menu.lst檔案中,你也可以從選單模式按鍵進入命令列模式,並且可以按鍵從命令列模式返回選單模式。選單模式下按鍵將進入選單編輯模式。

  (c) 選單編輯模式

  選單編輯模式用來對選單項進行編輯改變,其介面和選單模式的介面十分類似,不同的是選單中顯示的是對應某個選單項的命令列表。如果在編輯模式下按下 ,則取消所有當前對選單的編輯並回到選單模式下。在編輯模式下選中一個命令列,就可以對這條指令進行修改,修改完畢後按下< RET>,GRUB將提示你確認並完成修改。如果你想在當前命令列表中增加一條命令,按在當前命令的下面增加一條指令,按 在當前命令前處增加一條指令。按刪除一條指令。

僅用於選單的命令(不包括選單項內部的啟動命令)

default num

設定選單中的預設選項為num(預設為0,即第一個選項),超時將啟動這個選項

fallback num

如果預設選單項啟動失敗,將啟動這個num後援選項。

password passwd new-config-file

關閉命令列模式和選單編輯模式,要求輸入口令,如果口令輸入正確,將使用new-config-file

作為新的配置檔案代替menu.lst,並繼續引導。

timeout sec

設定超時,將在sec秒後自動啟動預設選項。

title name ...

開始一個新的選單項,並以title後的字串作為顯示的選單名。

在選單(不包括選單項內部的命令)和命令列方式下都可用的命令

bootp

以BOOTP協議初始化網路裝置

color normal [highlight]

  改變選單的顏色,normal是用於指定選單中非當前選項的行的顏色,highlight是用於指定當前選單選項的顏色。如果不指定 highlight,GRUB將使用normal的反色來作為highlight顏色。指定顏色的格式是“前景色/背景色”,前景色和背景色的可選列表如下:

* black

* blue

* green

* cyan

* red

* magenta

* brown

* light-gray

下面的顏色只能用於背景色

* dark-gray

* light-blue

* light-green

* light-cyan

* light-red

* light-magenta

* yellow

* white

你可以在前景色前加上字首"blink-",產生閃爍效果,你可以在menu.lst中加上下面這個選項來改變顏色效果:

title OS-BS like

color magenta/blue black/magenta

device drive file

在GRUB命令列中,把BIOS中的一個驅動器drive對映到一個檔案file。你可以用這條命令建立一個磁碟映象或者當GRUB不能真確地判斷驅動器時進行糾正。如下

grub> device (fd0) /floppy-image

grub> device (hd0) /dev/sd0

這條命令只能在命令列方式下使用, 是個例外。

dhcp

用DHCP協議初始化網路裝置。目前而言,這條指令其實就是bootp的別名,效果和bootp一樣。

hide partition

這條指令僅僅對DOS和WINDOWS有用,當在一個硬碟上存在多個DOS/WIN的主分割槽時,有時需要這條指令隱藏其中的一個或幾個分割槽,即在分割槽表中設定“隱藏”位。

rarp

用RARP協議初始化網路裝置。

setkey to_key from_key

改變鍵盤的對映表,將from_key對映到to_key,注意這條指令並不是交換鍵對映,如果你要交換兩個鍵的對映,需要用兩次setkey指令,如下:

grub> setkey capslock control

grub> setkey control capslock

其中的鍵必須是字母,數字或者下面的一些代表某一鍵的字串:

`escape', `exclam', `at', `numbersign', `dollar', `percent',

`caret', `ampersand', `asterisk', `parenleft', `parenright',

`minus', `underscore', `equal', `plus', `backspace', `tab',

`bracketleft', `braceleft', `bracketright', `braceright', `enter',

`control', `semicolon', `colon', `quote', `doublequote',

`backquote', `tilde', `shift', `backslash', `bar', `comma',

`less', `period', `greater', `slash', `question', `alt', `space',

`capslock', `FX' (`X' is a digit), and `delete'.

下面給出了它們和鍵盤上的鍵的對應關係:

`exclam'=`!'

`at'=`@'

`numbersign'=`#'

`dollar'=`$'

`percent'=`%'

`caret'=`^'

`ampersand'=`&'

`asterisk'=`*'

`parenleft'=`('

`parenright'=`)'

`minus'=`-'

`underscore'=`_'

`equal'=`='

`plus'=`+'

`bracketleft'=`['

`braceleft'=`{'

`bracketright'=`]'

`braceright'=`}'

`semicolon'=`;'

`colon'=`:'

`quote'=`''

`doublequote'=`"'

`backquote'=``'

`tilde'=`~'

`backslash'=`'

`bar'=`|'

`comma'=`,'

`less'=``period'=`.'

`greater'=`>'

`slash'=`/'

`question'=`?'

`space'=` '

unhide partition

僅僅對DOS/WIN分割槽有效,清除分割槽表中的“隱藏”位。

僅用於命令列方式或者選單項內部的命令

blocklist file

顯示檔案file在所佔磁碟塊的列表。

boot

僅在命令列模式下需要,當引數都設定完成後,用這條指令啟動作業系統

cat file

顯示檔案file的內容,可以用來得到某個作業系統的根檔案系統所在的分割槽,如下:

grub> cat /etc/fstab

chainloader [`--force'] file

把file裝入記憶體進行chainload,除了能夠透過檔案系統得到檔案外,這條指令也可以用磁碟塊列表的方式讀入磁碟中的資料塊,如'+1`指定從當前分割槽讀出第一個扇區進行引導。如果指定了`--force`引數,則無論檔案是否有合法的簽名都強迫讀入,當你在引導SCO UnixWare時需要用這個引數。

cmp file1 file2

比較檔案的內容,如果檔案大小不一致,則輸出兩個檔案的大小,如下:

Differ in size: 0x1234 [foo], 0x4321 [bar]

如果兩個檔案的大小一致但是在某個位置上的位元組不同,則列印出不同的位元組和他們的位移:

Differ at the offset 777: 0xbe [foo], 0xef [bar]

如果兩個檔案完全一致,則什麼都不輸出。

configfile FILE

將FILE作為配置檔案替代menu.lst。

embed stage1_5 device

如果device是一個磁碟裝置的話,將Stage1_5裝入緊靠MBR的扇區內。如果device是一個FFS檔案系統分割槽的話,則將Stage1_5裝入此分割槽的第一扇區。如果裝入成功的話,輸出寫入的扇區數。

displaymem

顯示出系統所有記憶體的地址空間分佈圖。

find filename

在所有的分割槽中尋找指定的檔案filename,輸出所有包含這個檔案的分割槽名。引數filename應該給出絕對路徑。

fstest

啟動檔案系統測試模式。開啟這個模式後,每當有讀裝置請求時,輸出向底層例程讀請求的引數和所有讀出的資料。輸出格式如下:

先是由高層程式發出的分割槽內的讀請求,輸出:之後由底層程式發出的扇區讀請求,輸出:[磁碟絕對扇區偏移] 可以用install或者testload命令關閉檔案系統測試模式。

geometry drive [cylinder head sector [total_sector]]

輸出驅動器drive的資訊。

help [pattern ...]

線上命令幫助,列出符合pattern的命令列表,如果不給出引數,則將顯示所有的命令列表。

impsprobe

檢測Intel多處理器,啟動並配置找到的所有CPU。

initrd file ...

為Linux格式的啟動映象裝載初始化的ramdisk,並且在記憶體中的Linux setup area中設定適當的引數。

install stage1_file [`d'] dest_dev stage2_file [addr] [`p'] [config_file] [real_config_file]

這是用來完全安裝GRUB啟動塊的命令,一般很少用到。

ioprobe drive

探測驅動器drive所使用的I/O口,這條命令將會列出所有dirve使用的I/O口。

kernel file ...

裝載核心映象檔案(如符合Multiboot的a.out,ELF,Linux zImage或bzImage,FreeBSD a.out,NetBSD

a.out等等)。檔名file後可跟核心啟動時所需要的引數。如果使用了這條指令所有以前裝載的模組都要重新裝載。

makeactive

使當前的分割槽成為活躍分割槽,這條指令的物件只能是PC上的主分割槽,不能是擴充套件分割槽。

map to_drive from_drive

對映驅動器from_drive到to_drive。這條指令當你在chainload一些作業系統的時候可能是必須的,這些作業系統如果不是在第一個硬碟上可能不能正常啟動,所以需要進行對映。如下:

grub> map (hd0) (hd1)

grub> map (hd1) (hd0)

這個就用來對付雙硬碟最過癮!!!哈哈

module file ...

對於符合Multiboot規範的作業系統可以用這條指令來裝載模組檔案file,file後可以跟這個module所需要的引數。注意,必須先裝載核心,再裝載模組,否則裝載的模組無效。

modulenounzip file ...

同module命令幾乎一樣,唯一的區別是不對module檔案進行自動解壓。

pause message ...

輸出字串message,等待使用者按任意鍵繼續。你可以用(ASCII碼007)使PC喇叭發聲提醒使用者注意。

quit

退出GRUB shell,GRUB shell類似於啟動時的命令列模式,只是它是在使用者啟動系統後執行/sbin/grub才

進入,兩者差別不大。

read addr

從記憶體的地址addr處讀出32位的值並以十六進位制顯示出來。

root device [hdbias]

將當前根裝置設為device,並且試圖mount這個根裝置得到分割槽大小。hdbias引數是用來告訴BSD核心在當前分割槽所在磁碟的前面還有多少個 BIOS磁碟編號。例如,系統有一個IDE硬碟和一個SCSI硬碟,而你的BSD安裝在IDE硬碟上,此時,你就需要指定hdbias引數為1。

rootnoverify device [hdbias]

和root類似,但是不mount該裝置。這個命令用在當GRUB不能識別某個硬碟檔案系統,但是仍然必須指定根裝置。

setup install_device [image_device]

安裝GRUB引導在install_device上。這條指令實際上呼叫的是更加靈活但是複雜的install指令。如果

image_device也指定了的話,則將在image_device中尋找GRUB的檔案映象,否則在當前根裝置中查詢。

testload file

這條指令是用來測試檔案系統程式碼的,它以不同的方式讀取檔案file的內容,並將得到的結果進行比較,如果正確的話,輸出的`i=X,filepos= Y`中的X,Y的值應該相等,否則就說明有錯誤。通常這條指令正確執行的話,之後我們就可以正確無誤地裝載核心。

uppermem kbytes

強迫GRBU認為高階記憶體只有kbytes千位元組的記憶體,GRUB自動探測到的結果將變得無效。這條指令很少使用,可能只在一些古老的機器上才有必要。通常GRUB都能夠正確地得到系統的記憶體數量

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945175/,如需轉載,請註明出處,否則將追究法律責任。