GRUB比較好的講解

原文地址:[url]http://bbs.chinaunix.net/thread-16164-1-1.html[/url]

GRUB使用說明

  從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]鍵)。

  在所有的改變都完成後,用鍵來執行這些命令,並引導操作系統。[Esc]鍵來放棄這些修改,將重新入標準的菜單接口。[c]鍵用來載入命令行接口。

  命令行接口

  命令行是GRUB最基本的接口,但它也是被授予了最大控制能力的接口。在命令行接口中,輸入任何相關的GRUB命令,再回車就可以執行了。這個接口的 功能有點類似於shell的功能,比如[Tab]鍵完成,前後文提示,輸入命令時的[Ctrl]鍵組合,如[Ctrl]-[a]移到行的開頭, [Ctrl]-[e]移到行的結尾。另外,箭頭鍵,[Home],[End],[Delete]鍵與bash shell中一樣用法。

  接口使用的順序

  當GRUB環境開始載入第二步引導裝載程序時,它尋找自己的配置文件。當找到配置文件後,它使用這個配置文件建立一個要載入的操作系統的菜單列表, 然後顯示引導菜單接口。

  如果配置文件沒有被找到,或者如果配置文件不能讀取,那麼GRUB將載入命令行接口,以允許用戶手工輸入必要的命令來啓動操作系統。

  如果配置文件不是正確的,那麼GRUB將顯示出錯誤,並請求輸入。這點是很有幫助的,因爲用戶將能夠看到問題發生在文件中的什麼地方,並修復它。按下 任意鍵,重新載入菜單接口,根據GRUB報告的錯誤,編輯菜單選項並糾正問題。如果這個修正失敗了,那麼錯誤將被報告,且GRUB將再次開始。

  四、GRUB的命令

  GRUB包含了許多不同的命令,它們可以在命令行接口中以交互的方式執行。其中的一些命令能接在命令名後面的選項,這些選項用空格隔開。

  下面的列表給出了最有用的一些命令:

  ·boot - 引導先前已經被指定並載入的操作系統或鏈式裝載程序。
  ·chainloader - 將指定的文件作爲一個鏈式裝載程序載入。爲了獲取在一個指定分區第一扇區內的文件,使用+1作爲文件名。
  ·displaymem - 顯示當前內存的使用情況,這個信息是基於BIOS的。這個命令有助於確定系統在引導前有多少內存。
  ·initrd - 使用戶能夠指定一個在引導時可用的初始RAM盤。當內核爲了完全引導而需要某些模塊時,這是必需的。
  ·install p - 安裝GRUB到系統的主引導記錄。這個命令允許系統重啓時出現GRUB接口。

  警告:install命令將覆蓋主引導扇區中的其他信息。如果命令被執行,那麼除了GRUB信息之外的其他用於引導其他操作系統的信息都將丟失。在執行這條命令前,確定你對它有正確的瞭解。

  這條命令可以用幾種不同的方式進行配置。然而,它都要求指定。表示一個設備,分區和文件,在那裏可以找到第一個引導裝載程序的映象,比如(hd0,0)/grub/stage1。另外,也指定了第一步引導裝載程序應該被安裝的硬盤,如(hd0)。

選項告訴第一步引導裝載程序第二步引導裝載程序位於什麼地方,例如(hd0,0)/grub/stage2。p選項告訴install命令菜單配置文件被指定在部分,比如說(hd0,0)/grub/grub.conf。

  ·kernel - 當使用直接載入方式引導操作系統時,kernel命令指定內核從GRUB的根文件系統中載入。options選項是跟在kernel命令後面,在內核載入時傳給內核。

  在Red Hat Linux中,一個kernel命令的例子看起來象下面的形式:

  kernel /vmlinuz root=/dev/hda5

  上面這行表明了vmlinuz文件是從GRUB的根文件系統載入的,如(hd0,0)。同時,一個選項也被傳給了內核。它指出當Linux內核載入 時,內核的根文件系統應該是位於hda5,第一個IDE硬盤的第五個分區。如果有必要的話,多個選項可以被放在這個選項後面。

  ·root - 將GRUB的根分區設置成特定的設備和分區,比如說(hd0,0)。並掛入這個分區,這樣文件可以被讀取。
  ·rootnoverify - 做root命令同樣的事情,只是不掛入分區。

  除上面所述外,還有更多的命令可用。輸入info grub,得到一個所有命令的完全列表。

  五、GRUB的菜單配置文件

  配置文件在GRUB菜單接口中,創建用於引導操作系統的列表。配置文件可以允許用戶選擇執行事先設置好的一組命令。這些命令既包括前面給出的命令,也包括一些只用於配置文件的命令。

  配置文件的專用命令

  下面這些命令只用於GRUB的菜單配置文件:

  ·color - 設定在菜單中使用的顏色,一種是作爲前景色,一種作爲背景色。可以簡單地使用顏色名稱,如red/black。比如:
  color red/black green/blue
  ·default - 默認項目的標題名稱。如果菜單接口超時,那它將被載入。
  ·fallback - 當這個命令被使用時,如果第一次嘗試失敗,那麼這個項目的標題名稱將被試用。
  ·hiddenmenu - 這個命令被使用時,它不顯示GRUB菜單接口,在超時時間過期後載入默認項。用戶通過按[Esc]鍵,可以看到標準的GRUB菜單。
  ·password - 這個命令被使用時,它可以防止不知道口令的用戶編輯菜單的項目。

  作爲附加選項,可以在後面指定一個後備的菜單配置文件。因此,如果口令被知道,GRUB將重新啓動第二步的引導裝載程序,並使用這個後備的配置文件來建立菜單。如果這個後備文件不在命令中指出,那麼知道口令的用戶能夠編輯當前的配置文件。

  ·timeout - 這個命令設定了在GRUB載入由default命令指定的項目前的時間間隔,以秒爲單位。
 
  ·splashp_w_picpath - 它指定在GRUB引導時所使用的屏幕圖像的位置。
  ·title - 設定用來裝載一個操作系統的一組特定命令的標題。

  字符#用來在菜單配置文件放置註釋。

配置文件的結構

  設置GRUB菜單接口全局參數的命令被放在文件的頂部,接下來的是用於各個操作系統引導的不同項目。

  一個非常基本的用於引導Red Hat Linux或Microsoft Windows 2000的GRUB菜單配置文件可能如下所示:

  default=linux
  timeout=10
  color=green/black light-gray/blue
  # section to load linux
  title linux
  root (hd0,1)
  kernel /vmlinuz root=/dev/hda5
  boot
  # section to load Windows 2000
  title windows
  rootnoverify (hd0,0)
  chainloader +1

  這個文件告訴GRUB建立一個以Red Hat Linux爲默認操作系統的菜單,設定10秒後自動引導。這裏給出了2個部分,每個部分對應於一個操作系統項目,每個部分都包含了指向操作系統硬盤分區表的命令。

  在下面的附加資料中,將列出如何使用GRUB引導多種操作系統的參考資料。

  六、GRUB的附加資料

  這個部分只是對GRUB以及它的許多選項作一個介紹。如果想要更多的瞭解GRUB是如何工作的、如何在其他任務中配置它來引導非Linux操作系統,可以參考下面列出的一些資料。

  安裝文檔

  ·/usr/share/doc/grub-0.90 - /usr/share/doc/grub-0.90是GRUB文檔在系統上的目錄。
  ·在一個shell提示下,輸入man grub命令可以查看GRUB的手冊,它包括一個裝載GRUB shell時所使用的選項的列表。
  ·在一個shell提示下,使用info grub命令可以得到GRUB的info頁,它包括一個指南,一個用戶參考手冊,一個程序員參考手冊,以及一個關於GRUB和它自己用法的FAQ文檔。

  有用的一些站點

  ·[url]http://www.gnu.org/software/grub[/url] - GNU GRUB 項目的主頁。這個站點包含了GRUB發展狀態的信息以及一個FAQ。
  ·[url]http://www.uruk.org/orig-grub[/url] - 在這個項目被脫管到自由軟件基金會進一步發展前的最初的GRUB文檔。
  ·[url]http://www.redhat.com/mirrors/LDP/HOWTO/mini/Multiboot-with-GRUB.html[/url] - 研究GRUB各種不同的用法,包括引導非Linux操作系統。
  ·[url]http://www.linuxgazette.com/issue64/kohli.html[/url] - 一篇介紹性的文章,討論在一個系統上GRUB配置,包括GRUB命令行選項的概述。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章