多引導是目前大家討論的比較熱門的一個話題,隨著Linux和INTERNET的熱潮席卷全世界,個人電腦已經不再是MS的天下,對於操作系統我們擁有了更多的選擇機會,FREEBSD,LINUX....一個硬盤上安裝兩到三個操作系統已經非常普遍,但是由於各個操作系統的引導過程機制不同,使我們在安裝多系統時遇到了不少問題。我們面臨著選擇什麼樣的多引導程序的問題。
LILO的確是一個選擇,現在很多人也都是采用LILO解決多引導的問題。但是LILO並不易於使用,仍然不夠靈活,而且從技術角度而言LILO仍然只是一個linux loader,它並不直接支持其他的操作系統,LILO對除LINUX外其他操作系統所做的只是將其引導塊裝入,而並不是將這些操作系統的內核裝入,這樣做的危險之處在於如果某個操作系統分區的引導塊不小心被破壞了,那就可能導致這整個系統無法進入,甚至不得不重新安裝,GRUB的推出就是企圖改善這種一塊硬盤上存在多個引導塊的混亂局面。
GNU針對多引導的問題推出了一個更加靈活和強大的多引導程序GRUB,提出了將引導程序和操作系統分離的解決方法,當然這主要是針對自由操作系統,但是GRUB仍然能夠通過chainloader引導其它非自由的操作系統。如果你僅僅安裝LINUX和WINDOWS的話,的確,LILO已經足夠使用,但是GRUB強於LILO之處在於還對GNU Mach,FreeBSD, NetBSD和OpenBSD的直接支持,而且更加靈活。GRUB能夠直接引導上述的幾個操作系統,裝入內核,不需要那些各自為政的引導塊, 這樣我們只要擁有GRUB,在安裝上述那些操作系統時就可以更加放心,不用再被什麼引導塊被覆蓋的問題大傷腦筋。GRUB靈活之處還在於提供了一個引導時功能強大的命令行模式,我們可以舉一個例子來說明這樣做給我們帶來的靈活性:你只需要做一張帶GRUB的引導軟盤,不需要任何配置,你就可以用這張軟盤引導,然後可以通過幾條簡單指令啟動任意一台計算機上的絕大部分操作系統。顯然這種靈活信是任何其他引導軟件無法比擬的。
首先,先大概了解一下計算機操作系統的引導過程:
眾所周知,計算機的最初啟動是由BIOS控制的,在對一些硬件(如:內存、鍵盤等)初始化之後,它會試圖加載硬盤的主引導記錄(MBR)或軟盤的引導扇區。MBR可通過兩種方式運行,其一是定位到活動分區並加載相應的引導扇區,然後將控制權移給此引導扇區,由引導扇區完成該分區內操作系統的基本組件的加載;其二是直接從一指定分區中加載信息,並通過它裝入任一分區的操作系統,諸如LILO、OS/2 boot loader等引導加載程序都可以配置成這種方式。
和LILO一樣,GRUB能夠識別文件系統,GRBU能夠理解內核的可執行文件格式,這樣就可以不用關心內核文件的磁盤定位,而只需通過文件系統便可以找到內核文件,GRUB比LILO能夠理解更多的文件系統類型,更多內核可執行文件格式,這樣它就能夠直接定位和引導不同操作系統的內核。
GRBU最早是在1995年由Erich Boleyn編寫的,其最初目的是為了能夠從Utah Mach4微內核系統(即是現在的GNU Mach)中啟動引導GNU Hurd操作系統。現在GRUB的基本目的是用於引導符合Multiboot標准的操作系統,Multiboot是一個用於定義符合多引導標准的操作系統規范,這個標准十分全面,但是目前支持它的操作系統仍不多,主要是GNU Hurd,所以現在仍不能達到GRUB所設想的操作系統引導界面大一統的局面,雖然這一天似乎很遙遠,但是我們現在仍然可以享受GRUB給我們帶來的強大功能和高度的靈活性。
下面我們來看看GRUB的特點和安裝使用方法:
一. GRUB的技術特點:
1. 支持多可執行文件格式
GRUB支持各種a.out格式和ELF格式。
2. 支持不符合Multiboot標准的內核
GRUB能夠直接支持多種並不符合Multiboot標准的自由操作系統內核(主要是FreeBSD,NetBSD,OpenBSD和linux)。也能通過chainloader間接引導非開放的其他操作系統。
3. 支持操作系統模塊裝載。
4. 提供文本格式可手工修改的配置文件。
5. 菜單界面
6. 靈活的命令行界面
7. 多文件系統識別
能夠透明地識別多種文件系統,現在能夠識別的文件系統有BSD FFS,DOS FAT16,FAT32,Minix fs和linux ext2fs。這個范圍仍然在擴展。
8. 支持壓縮文件的解壓縮。
能夠解壓縮被gzip壓縮的文件,並且這個識別和解壓過程是自動的和對用戶透明的,這個功能大大地減少了文件的大小,減少了load的時間,這個功能對於軟盤上的系統尤其有用。
可能有些內核模塊在裝載時就要求是壓縮狀態,這時解壓此模塊可能會畫蛇添足,所以GRUB提供了另一個不進行解壓縮的模塊裝載命令。
9. 可以讀取任何已安裝的設備上的數據
支持讀取軟盤,硬盤上的數據,不依賴於根設備上任何的設置。
10. 和磁盤定位的表示方法無關。
11. 能夠使用BIOS所檢測到的所有RAM.
GRUB通常能夠找到PC兼容機上的全部RAM, 它采用一種先進的BIOS查詢技術來找到所有的內存空間。
12. 支持硬盤的LBA模式
GRUB通過支持LBA模式,突破1024柱面的限制,能夠訪問8GB以外的全部硬盤空間。
13. 支持網絡
雖然GRUB是一個基於磁盤的引導程序,但是它也支持網絡功能,你可以通過TFTP協議從網絡上得到操作系統映象文件並引導。
GRUB的後繼版本可能會包括一個內置的可編程語言來支持各種內核的引導參數,這還只是一個操作系統引導器嗎?;),並且計劃加入對非PC體系結構的支持。
二. 如何在LINUX下安裝和使用GRUB
1. 下載並安裝GRUB包:
你可以到<ftp://alpha.gnu.org/gnu/grub/grub-0.5.94.tar.gz>得到GRUB,然後:
# zcat grub-0.5.94.tar.gz tar xvf -
會生成一個目錄grub-0.5.94,再:
# cd grub-0.5.94
# ./configure
# make install
這樣GRUB就安裝好了,下面你需要在你的硬盤或者軟盤引導區上安裝GRUB引導代碼。
a. 制作GRUB引導軟盤:
# cd /boot/grub
# dd if=stage1 of=/dev/fd0 bs=512 count=1
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
b. 制作GRUB硬盤引導:
重啟動用GRUB引導軟盤引導,或者你不想重啟動也可以執行/usr/sbin/grub。兩種情況都會進入命令行界面。 然後,我們首先要設置GRUB的“根設備”,也就是告訴GRUB安裝所在的分區:
grub> root (hd0,0)
這裡牽涉到GRUB的設備命名規則,將在下面介紹,此處(hd0,0)是指第一塊硬盤的第一個分區。
如果你不能夠確定安裝GRUB所在的分區號的話,可以通過find指令查找:
grub> find /boot/grub/stage1
GRUB將會查找文件/boot/grub/stage1並顯示包含這個文件的設備名,當然就是我們安裝GRUB所在的分區。下面就可以寫引導記錄了:
grub> setup (hd0)
這條命令將會在第一塊硬盤的MBR安裝GRUB引導,如果你不想在MBR安裝GRUB,而是希望將GRUB安裝在分區的引導扇區的話,你可以用下面指令指定安裝設備:
grub> setup (hd0,0)
這將會在第一塊硬盤的第一個分區的引導扇區安裝GRUB。
OK,現在你就可以重新啟動由GRUB引導你的系統。
2. GRUB的設備命名規則:
首先GRUB對設備的命名必須包含在小括號內,GRUB不區分IDE硬盤和SCSI硬盤,統一使用hdx,其中x指定BIOS中硬盤的編號,從零開始計數,而且通常計算機內的IDE硬盤編號在SCSI硬盤前。GRUB用fdx指定軟盤設備,x是軟盤驅動器號。具體命名規則如下:
(fd0):第一軟驅,GRUB還可以引導軟盤上的操作系統:)
(hd0,1): 第一塊硬盤的第二個分區。
(hd1,4): 第二塊硬盤的第一個擴展分區,擴展的分區是從4開始編號的。
(hd0,2,a): 專用於FreeBSD,FreeBSD有一個slice概念,把一個分區進一步分為幾個slice,此處指明是第一塊硬盤的第三個分區中的slice a。你也可以用(hd0,a),這樣GRUB就會在第一塊硬盤上找到第一個FreeBSD分區的slice a。
讓我們再來看看GRUB對於磁盤文件的命名方法:
(hd0,1)/vmlinuz,很簡單只要指定分區號和文件的絕對路徑名就可以了。
3. 現在來看看如何用GRUB引導我們的多操作系統,用GRUB引導後可以進入命令行模式或者菜單模式,你可以通過靈活的命令行模式選擇引導各個分區的操作系統,指定引導參數。
GRUB支持三種引導方法,第一種是直接引導操作系統內核,第二種是通過chainload進行間接引導。
對於GRUB能夠支持的LINUX,FreeBSD,OpenBSD,NetBSD,GUN Mach可以通過直接引導完成,不需要其他的引導扇區了,但是對於GRUB不直接支持的操作系統,需要用第二種方法chainload來完成。另外GRUB還支持網絡引導,我們分別來看看這幾種引導方法:
(a)直接引導:
通常步驟如下:
1.用root命令設置包含操作系統內核的根設備
2.用kernel命令裝載內核映象文件,如果這個內核引導的時候有參數的話,可以直接將參數加在內核文件名的後面。
3.用module或modulenounzip裝載內核模塊。
4.boot開始引導。
(b)chainload引導:
1.首先設置GRUB的根設備,用:
grub> rootnoverify (hdx,y)
2.開始引導
grub> chainloader +1
此處'+1'是指示GRUB讀入分區的第一個扇區的引導記錄。
3.執行boot開始引導
以上是一般的chainloader方式,對於DOS和WINDOWS,可以簡單地用兩條指令進行引導:
chainloader (hdx,y)+1,然後boot,其中x,y用來指明所在分區號。
(c) 從網絡引導:
為了使GRUB能夠支持從網絡引導,你需要在編譯時打開網絡支持選項,關於這個你可以參考源文件目錄裡的`netboot/README.netboot為了從網絡引導,你首先要在網絡設置兩個服務,首先是動態IP配置服務,可以是BOOTP,DHCP或RARP服務器,另一個是TFTP服務。
然後分別針對不同的服務器BOOTP,DHCP或RARP(三個選一個)運行bootp,dhcp,rarp。如果一切設置無誤的話GRUB就會給出IP,IP netmask和TFTP服務器的IP和網關的IP地址。最後,從網上得到操作系統的映象文件,網絡的設備名稱是(nd)。如下例:
grub> bootp
Probing... [NE*000]
NE2000 base ...
Address: 192.168.110.23 Netmask: 255.255.255.0
Server: 192.168.110.14 Gateway: 192.168.110.1
grub> root (nd)
grub> kernel /tftproot/gnumach.gz root=sd0s1
grub> module /tftproot/serverboot.gz
grub> boot
4. 多操作系統引導實例:
GNU/Hurd
--------
因為GNU/Hurd是符合Multiboot規范的操作系統,所以非常容易引導:
grub> root (hd0,2)
如果你不記得Hurd所在的分區號的話,可以用find /boot/gnumach查找。
grub> kernel /boot/gnumach root=hd0s1
grub> module /boot/serverboot
grub> boot
GNU/linux
---------
grub> root (hd1,3)
grub> kernel /vmlinuz root=/dev/hda1
如果你需要指定內核啟動參數的話,可以直接加到命令的最後面如:
grub> kernel /vmlinuz root=/dev/hda1 vga=ext
如果你使用initrd的話,在kernel命令之後執行:
grub> initrd /initrd
grub> boot
FreeBSD
-------
GRUB能夠直接裝載.ELF和a.out兩種格式的內核,但是由於FreeBSD的內核引導接口有時有較大的變動,
所以,對FreeBSD最安全的引導方法是引導/boot/loader
grub> root (hd0,a)
grub> kernel /boot/loader
grub> boot
NetBSD,OpenBSD,NetBSD
-------------------------------------
這三種系統的引導指令序列一樣,如下:
1. 'root'設置根設備.
2. `kernel'裝載內核.
3. `boot'引導.
DOS/Windows
-----------
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot
SCO UnixWare
------------
grub> rootnoverify (hd1,0)
grub> chainloader --force +1
grub> makeactive
//注意這條指令將設置UnixWare分區為活動分區。這樣要求你的GRUB安裝在MBR,否則下次啟動時將直接進入UnixWare而不會進入GRUB
grub> boot
當然,如果每次引導都需要敲入命令的話實在是太麻煩了,因此,類似於LILO,GRUB提供了一個菜單方式,你需要一個配置文件將這些命令放入配置文件中就可以實現菜單方式的多引導,當然在菜單方式下你可以切換到命令模式下。GRUB引導時查找/boot/grub/menu.lst,如果存在這個文件的話,就根據這個文件生成一個引導菜單,menu.lst文件格式很簡單,如下示例:
5. 菜單設置文件格式
# 等待用戶選擇菜單項的時間(以秒計),超時則引導默認的選項
timeout 30
# 默認選項,第一項
default 0
# 如果第一項出錯,則啟動下面的後備選項
fallback 1
# 引導 GNU Hurd,其中title就是菜單中顯示的提示字符串
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
# 引導 linux
title GNU/linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
# 引導Mach (kernel映象文件放在軟盤)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
# 引導 FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader
# 引導 OS/2
title OS/2
root (hd0,1)
makeactive
chainloader +1
# 引導 Windows NT 或者 Windows95,98
title Windows NT / Windows 95,98 boot menu
rootnoverify (hd0,0)
chainloader +1
# 安裝 GRUB 到硬盤MBR
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)
# 改變顯示菜單的顏色
title Change the colors
color light-green/brown blink-red/blue
6. GRUB的用戶界面介紹
GRUB的用戶界面有三種:命令行模式,菜單模式和菜單編輯模式
(a) 命令行模式:
進入命令行模式後GRUB會給出一個命令提示符`grub>`,此時就可以鍵入命令,按回車執行。此模式下可執行的命令是在menu.lst中可執行的命令的一個子集。此模式下允許類似於Bash shell的命令行編輯功能:
<C-f>或<右箭頭鍵> 光標右移一個字符
<C-b>或<左箭頭鍵> 光標左移一個字符
<C-a><HOME> 到這一行的開頭
<C-e>或<END> 到行尾
<C-d>或<DEL> 刪除光標處的字符
<C-h>或<BackSpace> 刪除光標左邊的字符
<C-k> 刪除光標右邊的所有字符(包括光標處的字符)
<C-u> 刪除光標左邊的所有字符(包括光標處的字符)
<C-y> 恢復上次刪除的字符串到光標位置
<C-p>或<向上鍵> 歷史記錄中的上一條命令
<C-n>或<向下鍵> 歷史記錄中的下一條命令
在命令行模式下tab鍵有補全命令的功能,如果你敲入了命令的前一部分,鍵入tab系統將列出所有可能以你給出的字符串開頭的命令。如果你給出了命令,在命令參數的位置按下<tab>鍵,系統將給出這條命令的可能的參數列表,具體的可用命令集將在後面給出。
(b) 菜單模式
當存在文件/boot/grub/menu.lst文件時系統啟動自動進入此模式。菜單模式下用戶只需要用上下箭頭來選擇他所想啟動的系統或者執行某個命令塊,菜單的定義在menu.lst文件中,你也可以從菜單模式按c鍵進入命令行模式,並且可以按ESC鍵從命令行模式返回菜單模式。菜單模式下按e鍵將進入菜單編輯模式。
(c) 菜單編輯模式
菜單編輯模式用來對菜單項進行編輯改變,其界面和菜單模式的界面十分類似,不同的是菜單中顯示的是對應某個菜單項的命令列表。如果在編輯模式下按下<ESC>,則取消所有當前對菜單的編輯並回到菜單模式下。在編輯模式下選中一個命令行,就可以對這條指令進行修改,修改完畢後按下<RET>,GRUB將提示你確認並完成修改。如果你想在當前命令列表中增加一條命令,按<o>在當前命令的下面增加一條指令,按<O>在當前命令前處增加一條指令。按<d>刪除一條指令。
三. 可用的命令列表
下面是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,等待用戶按任意鍵繼續。你可以用<^G>(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都能夠正確地得到系統的內存數量。
以上簡要介紹了GRUB的安裝使用方法,GRUB的功能實在是太多了,而且仍然在不斷發展壯大,一個引導程序能做到這樣一個程度實在令人贊歎,也許有一天GRUB會自帶一個kernel也說不定,:) 。可能現在使用GRUB的人還不多,但是我使用的BluePoint系統就是使用的GRUB做多引導,之所以推薦給大家,也是因為我覺得GRUB是我用過最靈活方便的引導程序,如果你對LILO並不滿意的話,不妨試試GRUB。
uppermem kbytes
強迫GRBU認為高端內存只有kbytes千字節的內存,GRUB自動探測到的結果將變得無效。這條指令很少使用,可能只在一些古老的機器上才有必要。通常GRUB都能夠正確地得到系統的內存數量。
以上簡要介紹了GRUB的安裝使用方法,GRUB的功能實在是太多了,而且仍然在不斷發展壯大,一個引導程序能做到這樣一個程度實在令人贊歎,也許有一天GRUB會自帶一個kernel也說不定,:) 。可能現在使用GRUB的人還不多,但是我使用的BluePoint系統就是使用的GRUB做多引導,之所以推薦給大家,也是因為我覺得GRUB是我用過最靈活方便的引導程序,如果你對LILO並不滿意的話,不妨試試GRUB。
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,等待用戶按任意鍵繼續。你可以用<^G>(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都能夠正確地得到系統的內存數量。
以上簡要介紹了GRUB的安裝使用方法,GRUB的功能實在是太多了,而且仍然在不斷發展壯大,一個引導程序能做到這樣一個程度實在令人贊歎,也許有一天GRUB會自帶一個kernel也說不定,:) 。可能現在使用GRUB的人還不多,但是我使用的BluePoint系統就是使用的GRUB做多引導,之所以推薦給大家,也是因為我覺得GRUB是我用過最靈活方便的引導程序,如果你對LILO並不滿意的話,不妨試試GRUB。