GRUB?是引導裝入器(boot?loader)?--?它負責裝入內核並引導? Linux ?系統。GRUB?還可以引導其它操作系統,如?FreeBSD、NetBSD、OpenBSD、GNU?HURD?和?DOS,以及? Windows ?95、98、NT?和?2000。盡管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要
GRUB?是引導裝入器(boot?loader)?--?它負責裝入內核並引導?
Linux?系統。GRUB?還可以引導其它操作系統,如?FreeBSD、NetBSD、OpenBSD、GNU?HURD?和?DOS,以及?
Windows?95、98、NT?和?2000。盡管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,那麼就可能鎖住系統,而無法引導計算機。另外,好的引導裝入器可以給您靈活性,讓您可以在計算機上安裝多個操作系統,而不必處理不必要的麻煩。?
GRUB?是一個很棒的boot?loader。它有許多功能,可以使引導過程變得非常可靠。例如,它可以直接從?FAT、minix、FFS、ext2?或?ReiserFS?分區讀取?Linux?內核。這就意味著無論怎樣它總能找到內核。另外,GRUB?有一個特殊的交互式控制台方式,可以讓您手工裝入內核並選擇引導分區。這個功能是無價的:假設?GRUB?菜單配置不正確,但仍可以引導系統。哦,對了?--?GRUB?還有一個彩色引導菜單。?
更令人驚訝的是,這是一個自由軟件!!!?
##################?
#?GRUB菜單?#?
##################?
先來看一個例子,這是位於/boot/grub/目錄下的menu.lst文件。?
此文件將在開機是產生一個菜單,包含有Debian?
linux,Windows2000,RedHat?linux和?Mandrake?linux,共四個選擇項。我一共分了8個區,一個fat16(0x6),一個ntfs(0x7),三個ext2fs分區(0x83),一個swap分區(0x82)。ntfs用來裝win2000,三個ext2fs裝了三個linux,c盤fat16分區沒有裝任何東西。?
#例子由此開始?
######################?
#?#?
#?一個GRUB?configure?的例子?#?
#?#?
######################?
timeout?10?
default?2?
#?-->?Debian?linux?<--?
title?Debian?linux?
root?(hd0,2)?
kernel?/boot/vmlinuz-2.2.18?root=/dev/hda3?ro?
initrd?/boot/initrd-2.2.18.gz?
#?-->?Debian?END?<--?
#?-->?Windows?菜單選項?<--?
title?Windows2000?
root?(hd0,0)?
chainloader?+1?
#?-->?Winddows?結束?<--?
#?-->?RedHat?linux?菜單選項?<--?
title?RedHat?linux?
root?(hd0,?
chainloader?+1?#?在硬盤主引導分區裝了lilo,所以也用了chainloader。?
#?-->?RedHat?linux?結束?<--?
#?-->?Mandrake?linux?菜單選項?<--?
title?Mandrake?linux?
root?(hd0,5)?
kernel?/boot/vmlinuz-2.4.3-20mdk?root=/dev/hda6?ro?
initrd?/boot/initrd-2.4.3-20mdk.img?
#?-->?Mandrake?linux?結束?<--?
#例子到此結束?
以符號井"#"開頭的行表示被注釋掉,沒有任何意義。?
timeout表示默認等待的時間,這兒是10秒鐘。超過10秒,用戶還沒有作出選擇的話,系統將自動選擇默認的操作系統。?
默認的操作系統就是由default控制的。default後加一個數字n,表明是第n+1個。需要注意的是,GRUB中,計數是從0開始的,第一個硬盤是hd0,第一個軟驅是fd0,等等。所以,default?2?表示默認的操作系統在這兒是?Redhat?linux。?
接下來,正如你所想象的,title表示的是"Debian?linux"菜單項。root?(hd0,2)表示第一個硬盤,第三個分區。這兒的root?於linux的root分區及其不同,此root非彼root也!?
在?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.2.18?root=/dev/hda3?ro說明/boot/vmlinuz-2.2.18?就是要載入的內核。後面的都是傳遞給內核的參數。root=/dev/hda3就是linux的硬盤分區表示法,ro是以readonly的意思。?
initrd用來初始的linux?image,並設置相應的參數。?
是不是感覺很簡單啊!再來看一看
windows的定義段吧。?
這裡,我添加了一項來引導?Windows2000。要完成此操作,GRUB?使用了"鏈式裝入器"(chainloader)。鏈式裝入器從分區?(hd0,0)?的引導記錄中裝入?win2000?自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因?--?它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的?DOS?或?Windows。?
我的RedHat?linux在硬盤主引導分區裝了lilo,所以也用了chainloader。?
GRUB的配置文件要簡單就這麼簡單,如果你要更個性化一點,試一試把"color?light-gray/blue?"加在default語句的下面,下一次啟動GRUB時,看看有什麼變化,再試一試"color?light-blue/red",驚喜嗎??有趣吧!?
######################?
#?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,?
現在已安裝了?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下的腳本程序。?
#####################?
#?GRUB啟動盤?#?
#####################?
要制作引導盤,需執行一些簡單的步驟。首先,在新的軟盤上創建?ext2?文件系統。然後,將其安裝,並將一些?GRUB?文件復制到該文件系統,最後運行?"grub"?程序,它將負責設置軟盤的引導扇區。准備好了嗎??
將一張空盤插入?1.44MB?軟驅,輸入:?
#?mke2fs?/dev/fd0?
創建了?ext2?文件系統後,需要安裝該文件系統:?
#?mount?/dev/fd0?/mnt/floppy?
現在,需要創建一些目錄,並將一些關鍵文件(原先安裝?GRUB?時已安裝了這些文件)復制到軟盤:?
#?mkdir?/mnt/floppy/boot?
#?mkdir?/mnt/floppy/boot/grub?
#?cp?/boot/grub/stage1?/mnt/floppy/boot/grub?
#?cp?/boot/grub/stage2?/mnt/floppy/boot/grub?
再有一個步驟,就能得到可用的引導盤。?
在linux?bash中,從?root?用戶運行"grub",該程序非常有趣並值得注意,因為它實際上是?GRUB?引導裝入器的半功能性版本。盡管?Linux?已經啟動並正在運行,您仍可以運行?GRUB?並執行某些任務,而且其界面與使用?GRUB?引導盤或將?GRUB?安裝到硬盤?MBR?時看到的界面(即GRUB控制台)完全相同。?
在?grub>?提示符處,輸入:?
grub>?root?(fd0)?
grub>?setup?(fd0)?
grub>?quit?
現在,引導盤完成了。?
如果要把GRUB裝到硬盤上,也很容易。這個過程幾乎與引導盤安裝過程一樣。首先,需要決定哪個硬盤分區將成為?root?GRUB?分區。在這個分區上,創建?/boot/grub?目錄,並將?stage1?和?stage2?文件復制到該目錄中,可以通過重新引導系統並使用引導盤,或者使用駐留版本的?GRUB?來執行後一步操作。在這兩種情況下,啟動?GRUB,並用?root?命令指定?root?分區。例如,如果將?stage1?和?stage2?文件復制到?hda5?的?/boot/grub?目錄中,應輸入?"root?(hd0,4)"。接著,決定在哪裡安裝?GRUB?--?在硬盤的?MBR,或者如果與?GRUB?一起使用另一個"主"引導裝入器,則安裝在特定分區的引導記錄中。如果安裝到?MBR,則可以指定整個磁盤而不必指定分區,如下(對於?hda):?
grub>?setup?(hd0)?
如果要將?GRUB?安裝到?/dev/hda5?的引導記錄中,應輸入:?
grub>?setup?(hd0,4)?
現在,已安裝?GRUB。引導系統時,應該立即以?GRUB?的控制台方式結束(如果安裝到?MBR)。現在,應創建引導菜單,這樣就不必在每次引導系統時都輸入那些命令。
小結:在這裡只是介紹了?GRUB?的一部分。例如,可以使用?GRUB?來執行
網絡引導,引導?BSD?文件系統,或更多操作。另外,GRUB?有許多配置和
安全性命令也很有用。如需所有?GRUB?功能的完整描述,請閱讀?GRUB?出色的?GNU?文檔。只要在?bash?提示中輸入?"info?grub"?就可以閱讀該文檔。
有用的一些信息:xosl是一個支持鼠標的圖形界面boot?loader,可以於system?command和boot?manager相比