什麼是啟動管理器? 啟動管理器是存儲在磁盤開始扇區中的一段程序,例如,硬盤的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的測試,也許還有一些網絡啟動的內容。但是你必須要等至少三個月或更多的時間,到是我會談一下我的測試結果。等著看吧。 討論和錯誤請直接發到我的信箱:[email protected]