從Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成為了默認的啟動裝載程序。相信LILO對於大家來說都是很熟悉的。這次Red Hat Linux用GRUB代替LILO,可見GRUB大有過人之處。不過,相對於LILO來說,大家對GRUB還是要陌生一些。本文將對GRUB的基本情況、術語、接口、命令以及配置文件做個介紹,希望對大家有所幫助。
一、GRUB的概述
在Red Hat linux裝載一個系統前,它必須由一個引導裝載程序(boot loader,啟動管理程序)中的特定指令告訴它去引導系統。這個程序一般是位於系統的主硬盤驅動器或是其他知道如何去開始linux內核的媒介驅動器上。
如果說一個x86系統只安裝了Red Hat Linux而且只有一個版本的linux內核,那麼通過引導裝載程序開始Red Hat Linux的特定過程就不重要了。Red Hat Linux安裝程序允許用戶快速方便地配置引導裝載程序存放在主硬盤驅動的主引導記錄中來引導操作系統。
然而,為了能從多個linux內核或其他操作系統引導,那麼就很有必要了解Red hat linux用於提供必要的引導選項的方法,以及理解引導的過程與如何去改變。
本文是討論GRUB,它是Red Hat Linux用來在x86系統上裝載操作系統的默認方法。同時,本文也將詳細介紹用於控制引導過程的各種命令和配置選項。
GRUB的定義
GNU GRUB(GRand Unified Bootloader)是一個將引導裝載程序安裝到主引導記錄的程序,主引導記錄是位於一個硬盤開始的扇區。它允許位於主引導記錄區中特定的指令來裝載一個GRUB菜單或是GRUB的命令環境。這使得用戶能夠開始操作系統的選擇,在內核引導時傳遞特定指令給內核,或是在內核引導前確定一些系統參數(如可用的RAM大小)。
x86的引導過程
當一個x86機器啟動後,系統BIOS開始檢測系統參數,如內存的大小、日期和時間、磁盤設備、以及這些磁盤設備用於引導的順序等。通常情況下,BIOS都是被配置成首先檢查軟驅或光驅(或兩者都檢查),然後再嘗試從硬盤引導。如果在這些可移動的設備中,沒有找到可引導的介質,那麼BIOS通常是轉向第一塊硬盤最初的幾個扇區,尋找用於裝載操作系統的指令。這些最初的扇區-主引導記錄-開始裝載一個預選擇操作系統的過程,一個操作系統選項販GRUB菜單,或是一個執行特定選項的GRUB命令行接口。
裝載GRUB和操作系統的過程,包括以下幾個操作步驟:
1、裝載基本的引導裝載程序,這通常是第一步。基本引導裝載程序必須是位於主引導扇區中一個非常小的空間,少於512字節。因此,基本引導裝載程序所做的唯一的事情就是裝載第二引導裝載程序。這主要是歸結於在主引導扇區中沒有足夠的空間用於其他東西了。
2、裝載第二引導裝載程序,這通常稱為第二步。這第二引導裝載程序實際上是引出更高級的功能 ,以允許用戶裝載入一個特定的操作系統。在GRUB中,這步是讓用戶顯示一個菜單或是輸入命令。
3、裝載在一個特定分區上的操作系統,如linux內核。一旦GRUB從它的命令行或是配置文件中,接到開始操作系統的正確指令,它就尋找必要的引導文件,然後把機器的控制權移交給操作系統。
注意
在一些文件系統以及文件系統的配置中,可能需要一個1.5步的文件,用來連接基本引導程序與第二引導程序之間的差異。
舉個例子來說,如果第二步中的引導裝載程序文件位於一個使用了第一步引導裝載程序所不能訪問的文件系統的分區中,那麼就可能需要指示第一步引導裝載程序,從1.5步文件中載入附加的指令來讀取第二步引導裝載程序的文件。更多相關的信息,請參考GRUB的信息頁。
前面所提到的引導方法被稱為直接裝載。因為這種方法中使用的是直接裝載操作系統的指令,沒有用到任何在引導裝載程序和操作系統主文件(如內核)之間的中間代碼。然而,不同操作系統所采用的引導過程可能會與上面提到的有一些細微的不同。例如,微軟的DOS和Windows操作系統在安裝時,傾趨於完全重寫主引導記錄,而不是合並當前的主引導記錄的配置。這將破壞掉其他操作系統保存在主引導記錄中的所有信息,如Red Hat Linux。微軟操作系統,還有一些其他的專有操作系統,都是使用一種稱為鏈式裝載的引導方法來啟動的。在這種方法中,主引導記錄僅僅是簡單地指向操作系統所在分區的第一個扇區。
GRUB支持直接和鏈式裝載的引導方法。GRUB能用於幾乎所有操作系統,絕大多數流行的文件系統,以及幾乎所有的系統BIOS所能識別的硬盤。
GRUB的特性
GRUB包含許多特性,這使得GRUB比其他可用的引導裝載程序更加優越。下面列出一些比較重要的特性:
·GRUB在x86機器上,提供一個真正基於命令行的,先於操作系統(pre-OS)的環境。它對於用確定的選項裝載操作系統或收集系統信息方面,提供了最大程度的適應性。許多非x86的體系結構已經使用先於操作系統環璄許多年了,它提供控制系統如何從一個命令行引導。當LILO或其他x86引導裝載程序使用了一些命令特性的時候,GRUB已經包含了許多這方面的特性。
·GRUB支持邏輯塊尋址(LBA)方式。LBA將用於尋找驅動器上文件的地址轉換工作置於驅動器的硬件中,它被用在許多IDE和所有的SCSI硬盤中。在使用LBA之前,硬盤驅動器遇到一個1024柱面的限制,即BIOS不能找到在1024柱面後的文件(比如一個引導裝載程序或是內核文件)。只要系統BIOS能支持LBA模式(大多數都支持),那麼LBA就允許GRUB超越1024柱面的限制,引導操作系統。
·GRUB的配置能在每次系統引導時被讀取。這就避免了用戶每次改變引導選項時都要重寫一次主引導記錄。大多數的引導裝載程序都不能很老道地讀取配置文件,並使用它們來設置引導選項。比如說,用戶必需改變一個LILO的配置文件,然後運行一個命令將新的配置數據重寫回系統的主引導記錄。這種方法比GRUB所采用 的方法更加危險,因為一個錯誤配置的主引導記錄將讓系統無法引導。在使用GRUB中,如果說配置文件被錯誤配置並且引導,那它也僅僅簡單地轉到一個默認的命令行,允許用戶手工輸入命令來運行操作系統。除開更新系統引導的第一步、第二步、或是菜單配置文件的位置,主引導記錄是不會被觸及到的,而這種情況是很少發生的。
注意:
當GRUB的配置文件發生改變時,沒有必要重新啟動GRUB。所有的改變都能被自動地檢測到。如果GRUB被重新啟動,那麼用戶將退回到命令行方式的GRUB外殼下。
安裝GRUB
如果在Red Hat Linux的安裝過程中,GRUB沒有被安裝,下面將說明如何安裝它,並將它設為默認的引導裝載程序。
注意:如果LILO已經被安裝,並且是當前的系統引導裝載程序,那並沒有必要為了使用GRUB而刪除它。GRUB一旦安裝後,將做為系統默認的引導裝載程序。
首先,獲取最新可用的GRUB包。在Red Hat Linux安裝光盤上的GRUB包也可以使用。
其次,在一個外殼提示下,運行命令/sbin/grub-install ,這裡的是GRUB將要被安裝的位置。比如說:/sbin/grub-install /dev/hda
最後,重新引導系統。GRUB圖形引導裝載菜單將出現。 二、GRUB的術語
在使用GRUB前,最重要的事情之一就是理解這個程序是如何引用設備的,如系統硬盤驅動器、分區等。對於配置GRUB實現多操作系統的引導,這方面的信息是很重要的。
設備名稱
系統的第一個硬盤驅動器被GRUB稱為(hd0)。在它上面的第一個分區被稱為(hd0,0),第二個硬盤驅動器上的第5個分區被稱為(hd1,4)。通常使用GRUB時,文件系統習慣上采用下面的方式命名:
(,)
在設備命名中,圓括號和逗號是很重要的。指出是一個硬盤(hd)還是一個軟盤(fd)被指定。
是依照系統BIOS而確定的設備號,從0開始。基本IDE硬盤被標為0,第二IDE硬盤被標為1。這個排序大體上等同於linux內核用字母安排設備的順序,只是在hda中的a變成了0,hdb中的b變為了1,依次類推。
注意:GRUB用於設備的命名系統是從0開始,而不是1。這常常是GRUB新手們常犯的最普遍的錯誤。
指在一塊硬盤上一個分區的編號。類似於,分區的編號也是從0開始。雖然大多數的分區可以用數字指定,但是如果系統使用的是BSD分區,那麼它們還是用字母來指定,如a或c。
GRUB在命名設備和分區時,使用下面的規則:
·系統使用IDE硬盤或SCSI硬盤,都沒有關系。所有的硬盤都是用hd開始。軟盤用fd開頭。
·當指定整個硬盤,不考慮它的分區時,簡單地將逗號和分區編號取消即可。當告訴GRUB配置一個特定硬盤的主引導扇區時,這一點很重要。比如,(hd0)指定第一個設備,(hd3)指定第四個設備。
·如果一個系統有多個驅動設備,知道由BIOS確定的驅動器順序就很重要了。如果系統只有IDE或SCSI驅動器,那是相當簡單的。但是如果有多個驅動器混合時,這就變得令人混亂了。
文件名稱
當在GRUB中輸入包括文件的命令時,比如在多操作系統中使用一個菜單列表,文件名必須直接在設備和分區後指定。一個絕對文件名的格式如下:
(,)/path/to/file
大多數的時候,用戶可以通過在分區上的目錄路徑後加上文件名來指定文件。這種方法是直接了當的。
另外,我們也可以將不在文件系統中出現的文件指定給GRUB,比如在一個分區最初幾塊扇區中的鏈式引導裝載程序。為了指定這些文件,需要提供一個塊列表(blocklist),由它來一塊一塊地告訴GRUB文件在分區中的位置。當一個文件是由幾個不同的塊組合在一起時,需要有一個特殊的方式來寫塊列表。每個文件片斷的位置由一個塊的偏移量以及從偏移點起始的塊數來描述,這些片斷以一個逗號分界(comma-delimited)的順序組織在一起。
考慮下面的塊列表:
0+50,100+25,200+1
上面這個塊列表告訴GRUB使用一個文件,這個文件起始於分區的第一塊,使用了第0塊到第49塊,第99塊到124塊,以及第199塊。
當使用GRUB裝載諸如微軟Windows這樣采用鏈式裝載方式的操作系統時,知道如何寫塊列表是相當有用的。如果從第0塊開始,那麼可以省略塊的偏移量。作為一個例子,當鏈式裝載文件在第一硬盤的第一個分區時,可以使用下面的命名:
(hd0,0)+1
下面給出一個帶類似塊列表名稱的chainloader命令。它是在設置正確的設備和分區作為根後,在GRUB命令行中給出的。
chainloader +1
GRUB的根文件系統
一些用戶常困惑於GRUB中根文件系統(root filesystem)這一術語的用法。GRUB的根文件系統與Linux的根文件系統是沒有關系的,這一點需要記住。
GRUB的根文件系統是用於一個特定設備的根分區。GRUB使用這個信息來掛入(mount)這個設備並從它上面載入文件。
在Red Hat Linux中,一旦GRUB載入它自己的包含Linux內核的根分區,那麼kernel命令就可以將內核文件的位置作為一個選項來執行。一旦Linux內核引導,它就設定自己的根文件系統,此時的根文件系統就是大多數人用來與Linux聯系的了。最初的GRUB根文件系統以及它的掛入都被去掉,它們僅存在於用來引導內核文件。
關於根和內核命令的更多信息,可以參考後面的命令部分。
三、GRUB的接口
GRUB主要有三個強大的接口,它們提供了不同級別的功能。每個接口都允許用戶引導操作系統,甚至可以在處於GRUB環境下的接口之間移動。
菜單接口
如果GRUB是由Red Hat Linux的安裝程序自動配置的,那麼它默認的顯示接口是菜單接口。在系統第一次啟動後,一個操作系統或內核的菜單(事先已經用它們各自的引導命令配置好)將一個按名稱排列的列表保存在這個接口中。使用箭頭鍵選擇一個非默認選項,然後按回車鍵來引導它。如果不是這樣,一個記時器可能已經被設置,那麼GRUB將啟動裝載那個默認的選項。
在菜單接口上,按[e]鍵,對高亮菜單項中的命令進行編輯。按[c]鍵載入一個命令行接口。
菜單項目編輯器接口
在引導裝載菜單中按[e]鍵,就進入了菜單項目編輯器。用於項目的GRUB命令就顯示在這裡。在引導操作系統前,用戶可以更改這些命令,添加(加在當前行後面,用[o]鍵;加在當前行前,用[0]),編輯(用[e]鍵),刪除(用[d]鍵)。
在所有的改變都完成後,用[b]鍵來執行這些命令,並引導操作系統。[Esc]鍵來放棄這些修改,將重新入標准的菜單接口。[c]鍵用來載入命令行接口。
命令行接口
命令行是GRUB最基本的接口,但它也是被授予了最大控制能力的接口。在命令行接口中,輸入任何相關的GRUB命令,再回車就可以執行了。這個接口的功能有點類似於shell的功能,比如[Tab]鍵完成,前後文提示,輸入命令時的[Ctrl]鍵組合,如[Ctrl]-[a]移到行的開頭,[Ctrl]-[e]移到行的結尾。另外,箭頭鍵,[Home],[End],[Delete]鍵與bash shell中一樣用法。