Hi-Fi優質I.T網:技術文章...
您尚未登入...
帳號:
密碼:

忘記密碼 
 
  訂閱電子報

取消   訂閱
 
2005/4/6-10:37:53
 GNU GRUB啟動管理器│作者:│分數:0

 

什麼是啟動管理器?

  啟動管理器是存儲在磁片開始扇區中的一段程式,例如,硬碟的MBR(Master Boot Record),在系統完成啟動測試后,如果系統是從MBR啟動,則BIOS(Basic Input/Output System)將控制傳送給MBR。然后存儲在MBR中的這段程式將營運。這段程式被稱為啟動管理器。它的任務就是將控制傳送給作業系統,完成啟動過程。

  有許多可用的啟動管理器,包括GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等。下面我將討論GNU GRUB以及它的使用方法。

什麼是GRUB?

  GRUB是一款功能強大的啟動管理器,它能加載多種作業系統,例如Windows, DOS, Linux, GNU Hurd, *BSD,等等。

  目前,LILO是最流行的啟動管理器,被用來管理多個系統的引導。但是,如果使用了LILO,你必須記住,當你每次改變了它的配置或安裝了新的內核,都要重新營運一下LILO。而且,LILO的靈活性也遜色于GRUB。

  GRUB使用靈活。它的最新版本,0.5.96.1,支持的文件系統包括ext2(Linux使用的一種文件系統),FFS(Fast File System used by *BSD UNIX),ReiserFS(一種為Linux開發的新型日誌文件系統,以被融入2.4.1內核中,minix(一種為MINIX系統開發的老式文件系統,在早期的Linux中也使用)。使用GRUB,你甚至不用引導作業系統,就能“看”到這些文件系統。例如,假如你想查看一下存放在文本文件中的日期和時間,而又不想引導整個作業系統,你可以使用GRUB shell(提示“grub>”),鍵入如下命令︰

grub> cat (partition number)/home/god/filename.txt.  

  你可以看到與文件有關的所有訊息,包括日期和時間。

  GRUB最好的應用是,你可以方便的引導不在列表中的任何分區上的任何內核。例如,如果你沒有將新編譯的內核加在啟動列表中,而你又需要引導它,你可以將它先加在列表中,重新啟動后使用。但是使用GRUB后,可以簡單到只使用GRUB shell就可以加載所需要的內核映像。

  現下我將解釋使用GRUB的三個基本步驟︰編譯、安裝和配置。

第一步︰編譯和安裝GRUB

  可以從ftp://alpha.gnu.org/pub/gnu/grub 下載GRUB的源代碼。

  可以用命令“tar -xvzf filename.tar.gz”解開壓縮文檔。我得到的文件是grub-0.5.96.1.tar.gz,所以我這樣做︰

# tar -xvzf grub-0.5.96.1.tar.gz

  這個命令將解開的文件和目錄放在一個名為grub-0.5.96.1的目錄中。現下營運如下命令︰

 [root@heaven ~/grub-0.5.96.1 ]# ./configure

  如果你想定製GRUB,使之包含流行的文件系統和對網卡的支持,或者刪除你不需要的網卡,可以營運如下命令︰

 [root@heaven ~/grub-0.5.96.1 ]# ./configure --help

  這個命令將輸出所有的命令選項。現下可以使用─enable和─disable選項增加或刪除對特定網卡的支持。(注意︰GRUB支持網路啟動)

  為了開始編譯過程,鍵入如下命令︰

 [root@heaven ~/grub-0.5.96.1 ]# make

  為了將所有文件進行正確的安裝,鍵入命令︰

 [root@heaven ~/grub-0.5.96.1 ]# make install

  至此你已經為安裝GRUB真正做好了準備。

  將GRUB的相關文件保存在諸如/boot/grub的目錄中不失為一個好主意。為此,按如下步驟︰

  1.默認狀態下,GRUB所有文件將安裝在/usr/share/grub/i386-pc或者/usr/local/share/grub/i386-pc目錄下,這只取決于你的shell變量的設置。

  2.建立一個叫做/boot/grub的目錄,然后拷貝下列文件到這個目錄︰


stage1
stage2
*_stage1_5

  稍候我將解釋這些文件。同時也要把GRUB(可能在/usr/sbin或者/usr/local/sbin目錄下)拷貝到/boot/grub目錄下。

  安裝GRUB之前,你需要了解GRUB是怎樣識別你的硬碟和分區訊息的。首先,計數是從0開始的,而不是從1。在Linux中,你的連接到主控制單元上的第一塊硬碟被稱為“had”。在GRUB中即為“hd0”。同樣的,在GRUB中,你的第一個軟驅是“fd0”。這樣,第一塊硬碟上的第一、二、三個分區分別為“hd0,0”、“hd0,1”、“hd0,2”。注意︰逗號是GRUB分區命名法的必要組成部分。

  為了將逗號隔開的部分整合在一起,需要使用括號。例如︰(hd0,0) (hd0,1) (hd0,2)等等。(hd0,0)是第一塊硬碟上的第一個分區。類似的,(hd1,5)是第二快硬碟上的第六個分區,(hd2,0)是第三塊硬碟上的第一個分區。

message. This may take a long time. 

第二步︰安裝GRUB

  安裝GRUB可以分為三個單獨的步驟︰

  1. 將“stage1”安裝到MBR中。
  2. 設置“stage2”的位址或者位置。
  3. 設置一個菜單或選項,用來決定啟動哪一個作業系統。

  使用下面的命令開始安裝GRUB。

 [root@heaven /boot/grub ]# ./grub

  這個命令根據BIOS的設置檢測硬體設備,同時產生一些輸出訊息。這會花較長的時間。


    end_request: I/O error, dev 02:00 (floppy), sector 0
    GRUB  version 0.5.96.1  (640K lower / 3072K upper memory)

  注意︰雖然它讓人感到非常驚奇,GRUB確實有簡潔的界面─就象支持行編輯一樣。TAB列出可能的命令列表。其它情況下TAB會列出設備或文件名。看到這些你會很驚奇吧。類似下面的提示會出現︰

grub> 

  現下,我假設你將Linux安裝在了第一塊硬碟的第一個擴展分區中或者/dev/hda5中。記住GRUB的命名規則,將上面的名字改為(hd0,4)。鍵入下面的命令︰

grub> install (hd0,4)/boot/grub/stage1 (hd0) 
(hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf

  現下讓我們分析一下這個命令的細節。

   install

  一個內置的命令,它告訴GRUB將(hd0,4)/boot/grub/grub/stage1安裝到hd0的主引導紀錄中。

    (hd0,4)/boot/grub/stage2 

  告訴GRUB stage2映像的位置。

    p with the the following options: (hd0,4)/boot/grub/menu.conf 

  為菜單的顯示設置配置文件。稍候我將討論這個配置文件的架構。

  下面是對這個命令用法的總結︰

  1. nstall
  2. ource_of_stage1
  3. where_to_install
  4. source_of_stage2
  5. p source_of_configuration_file

  現下,你完成了硬碟上的基本安裝工作。

在軟碟上的安裝︰

  為了在軟碟上安裝GRUB,你要會用“dd”命令,並且了解它是如何工作的。為了做一張GRUB啟動盤,你要將stage1和stage2文件放到軟碟的開始扇區中。

  安裝stage1到軟碟上︰

  插入一張已格式化的軟碟,鍵入命令︰

 [root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1

  命令的詳細說明如下︰


if=input file
i.e., stage1 
of=output file 
i.e., floppy drive (this may be different on your computer) 
bs=bytes to read and write 
Here it is 512 bytes. 
count=how many times to perform this operation 

  每次拷貝“bs”數目的塊到目標位址。

  安裝stage2到軟碟

 [root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

  這裡的步驟同stage1的相同,除了一個seek選項外。Seek選項將調過一個“bs”。例如,在上面的命令中bs的值是512,這樣seek=1意味著將跳過軟碟上前512個位元組,從513位元組開始。這將使得第一步操作不會覆蓋stage1的前512位元組。

  現下你完成了基本的軟碟驅動器安裝。

第三步︰配置GRUB

  在這一節,我們來看一下如何在啟動后進入各種作業系統,如何建立menu.conf文件。

  我們就從GRUB支持的啟動過程開始。可以有兩種方法來完成啟動過程︰

  • A.透過調用內核本地啟動
  • B.連續啟動或者將控制轉給另一個引導器

  A模式啟動過程

  1. 置跟設備或者告訴GRUB你的根文件系統。
  2. 訴GRUB你的內核影像的位置,然后將參數傳送給內核。
  3. 重新啟動,試一下。

  為了啟動Linux,我將內核以bzImage的文件名放在/boot/目錄中,跟文件系統是/dev/hda5,或者GRUB中的(hd0,4)。我的啟動過程如下︰

  1. root (hd0,4) [This sets the root partition]
  2. kernel /boot/bzImage root=/dev/hda5 [This sets the kernel]

  B模式啟動過程(這種模式假設當前的分區中安裝了另一個啟動管理器,例如LILO或者NTLDR)︰

  1. 設置根分區但不要安裝它
  2. 激活這個分區
  3. 配置需要啟動的分區的第一個扇區
  4. 重新啟動,看一下效果。

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


1.rootnoverify (hd0,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 Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----

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

  建立啟動Windows 或者 DOS的菜單︰


title Windoze 
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

  如果你安裝了兩個版本的Windows─一個是你自己用的,另一個給你的家人用的─這樣第二個就無法安裝,因為有提示說Windows已經安裝了。

  有一種簡單的方法可以安裝兩個版本的Windows,即在啟動時隱藏一個分區而使用另一個。你甚至可以為你的分區設置密碼保護,這樣可以避免別人錯誤的加載你的分區。下面介紹如何完成兩個Windows的安裝,hda1和hda2 或者 (hd0,0) 和 (hd0,1),用到的命令有lock, password, hide 和 unhide。

  建立windows 項目"My Entry":


title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

  為了更好的使用lock命令,你需要在配置文件開頭使用password命令。Password命令的語法如下︰password secret(“secret”就是密碼)。任何時候你都可以透過按p鍵兒輸入密碼。

  建立Windows 項目"Family Entry"


title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----

  任何人都可以啟動這個項目,而無須輸入密碼。

  這有一個使用password命令的有趣的竅門。為了在缺省菜單列表或配置文件中隱藏某些項目,你可以使用下面的命令加載一個定製的列表︰


password secret

  在這個命令中,“secret”是密碼,而/boot/grub/secret-list.conf是密碼文件。這樣做之前,你要先進入到根目錄或者給出全路徑名。例如︰


password secret (hd0,4)/boot/grub/secret-list.conf

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


grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

  啟動FreeBSD︰


title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#---- 

  這裡我們調用了FreeBSD的啟動管理器。Root (hd0,4,a)由四個參數,是因為FreeBSD對一個單獨分區進行了虛擬分割。我們稱根分區為“a”。如果FreeBSD佔據了整個第二塊硬碟,這裡就應該是root (hd0,a)。這樣,就不是調用內核而是調用FreeBSD的啟動管理器,它要比調用內核更易使用。

  注意︰我推薦在使用OpenBSD和GNU/Hurd之前,要先試一下鏈式加載。)

  現下你已經完成了基本的GRUB編譯、安裝和配置。你對GRUB了解的越多,就越會發現GRUB是一種控制啟動的易用和高效的方法。

各種GRUB命令︰

    default xx 

  表明xx是缺省的啟動項目

    timeout yy 

  表明在yy秒后缺省啟動項目將啟動

    fallback zz  

  在第一個啟動項目失敗后,過了timeout時間后,就將啟動zz項目。

   color 

  這個命令將生成彩色菜單。它的語法是︰color normal current_selection。這兩個域都可以有兩個值,形如foreground/background。例如︰

color green/black or light-gray/blue

  你也可以使用相關的數字。

  記住︰所有的值都是從0開始,所以0是第一個。

  在我的下一篇文章中,我將會講到對GNU/Hurd and OpenBSD的測試,也許還有一些網路啟動的內容。但是你必須要等至少三個月或更多的時間,到是我會談一下我的測試結果。等著看吧。


請評分: -3 -2 -1 +1 +2 +3
  
   

Hi-Fi優質I.T網”站內所有文章、圖片除特別加註外均屬本站所有,如有任何問題請來信告知
請支持言論自由,討論區所發表之言論不代表本站立場
Hi-Fi優質I.T網”版權所有2004©
---最佳顯示效果1024*768---