注意 在一些文件系統以及文件系統的配置中,可能需要一個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根文件系統以及它的掛入都被去掉,它們僅存在於用來引導內核文件。 關於根和內核命令的更多信息,可以參考後面的命令部分。