天天看點

LILO(LInux LOader)引導加載程式

一.什麼是引導加載程式

最簡單地講,引導加載程式(Boot Loader)會引導作業系統。當機器引導它的作業系統時,BIOS會讀取引導媒體上最前面的512位元組(即人們所知的主引導記錄(Master Boot Record,MBR))。在單一的MBR中隻能存儲一個作業系統的引導記錄,是以當需要多個作業系統時就會出現問題,是以需要更靈活的引導加載程式。

主引導記錄本身要包含兩類内容-部分(或全部)引導加載程式,以及分區表(其中包含關于媒體其餘部分如何劃分為分區的資訊)。當BIOS引導時,它會尋找硬碟驅動器第一個扇區(MBR)中存儲的資料;BIOS使用存儲在MBR中的資料激活引導加載程式。

由于BIOS隻能通路很少量的資料,是以大部分引導加載程式分兩個階段進行引導。在引導的第一個階段中,BIOS引導一部分引導加載程式,即初始程 序加載程式(initial program loader,IPL)。IPL查詢分區表,進而能夠加載位于不同媒體上任意位置的資料。首先通過這步操作來定位第二階段引導加載程式(其中包含加載程式 的其餘部分)。

第二階段引導加載程式是引導加載程式的主體;很多人認為這才是引導加載程式的真正部分。它包含加載程式更需要磁盤空間的部分,比如使用者界面和核心引導程式。從簡單的指令行到繪聲繪色的GUI,這些使用者界面的範圍很廣泛。

引導加載通常配置為兩種方式的其中之一:要麼是作為主引導加載程式(primary boot loader),要麼是作為二級引導加載程式(secondary boot loader)。主引導程式是安裝在MBR上的第一階段引導加載程式。二級引導加載程式是安裝在可引導分區的第一階段引導加載程式。必須在MBR上安裝單 獨的引導加載程式,并配置它将控制權轉交給二級引導加載程式。

很多較新的Linux引導加載程式特别實用,因為它們提供了不同程度的互動,比如進階的GUI和加密的密碼,以及通過選擇作業系統進行引導的能力。 這樣,可以在具有多個實體磁盤的同一機器上共存多個作業系統。這樣設定越來越常見,因為它幫助很多使用者在安裝新的Linux時,能夠保留先前由 Windows機器所生成的寶貴資料資料。我個認為這種設定非常美妙,隻使用一台機器就可同時擁有Linux和Windows。

随着時間的推移,引導加載程式已經得到了增強,為使用者引入了大量的功能。各個引導程式的功能和配置存在差異,但基本的目标是相同的。現在來看兩個較為流行的引導加載程式:LILOtkg GRUB。

二.LILO簡介

LInux LOader(LILO) 已經成為所有 Linux 發行版的标準組成部分。作為一個較老的/最老的Linux引導加載程式,它那不斷壯大的 Linux 社群支援使它能夠随時間的推移而發展,并始終能夠充當一個可用的現代引導加載程式。有一些新的功能,比如增強的使用者界面,以及對能夠突破原來 1024-柱面限制的新 BIOS 功能的利用。

雖然 LILO 仍在不斷地發展,但 LILO 工作原理的基本概念保持不變。

三.使用 LILO 作為引導加載程式

要使用LILO作為引導加載程式,需要做的事情取決于是要進行全新安裝還是要讓已經安裝的Linux改為使用LILO。如果是要進行全新安裝,那麼 直接跳轉到配置LILO那一節。如果已經安裝了某個Linux發行版,那麼通常可以選擇安裝并配置 LILO(并可以将機器引導到新的 Linux 安裝)。要将現有的 Linux 遷移到 LILO,首先必須獲得最新版本的 LILO。在做任何其他事情之前,建議您確定在手邊擁有一張 Linux 引導盤 —— 如果偶而弄錯了某些地方,它可以提供很大的幫助,能夠恢複到初始的 Linux 配置!将 LILO 安裝到系統中之後,讓它接管 MBR 非常簡單。以 root 使用者身份輸入:

# /sbin/lilo -v -v

這将使用目前的 LILO 預設值,抹去 MBR 中目前所有内容。不過,請閱讀 配置 LILO,以確定能夠按預期引導起來。也要注意,如果想要在同一機器上運作 Windows 和 Linux,那麼應該先安裝 Windows OS,然後再安裝 Linux OS,這樣,在 Linux 安裝中所選擇的引導加載程式就不會被 Windows 引導加載程式所覆寫。與 Linux 引導加載程式不同,多數 Windows 引導加載程式不支援引導 Linux。如果已經先安裝了 Linux,那麼隻需要自己建立一張 Linux 引導盤,這樣就可以在安裝完 Windows 之後,回到 Linux 安裝中并重寫 MBR。

四.配置 LILO

LILO 的配置都是通過位于 /etc/lilo.conf 的一個配置檔案來完成的。下面給出了一個示例配置,使用機器支援Linux 和Windows 機器的雙重引導。了解Linux工作站的基本配置如下。

主 HDD(實體磁盤 1)上安裝了 Windows XP(最初機器上隻有它)。在 Linux 術語中,這個 HDD 是 /dev/hda(在 GRUB 術語中是 hd0,0)。

從 HDD(實體磁盤 2)上安裝了 Red Hat Linux;root 分區位于這個硬碟驅動器的第三個分區,即 /dev/hdb3(在 GRUB 術語中是 hd1,3)。

lilo.conf 示例檔案

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=100

compact

default=Linux

p_w_picpath=/boot/vmlinuz-2.4.18-14

label=Linux

root=/dev/hdb3

read-only

password=linux

other=/dev/hda

label=WindowsXP

lilo.conf 示例檔案中的選項如下。

1.boot=告訴 LILO 在哪裡安裝引導加載程式。在上面的示例中,将把它安裝到第一塊硬碟的 MBR。也可以選擇将 LILO 安裝到 /dev/hdb3(示例中的 Linux 分區),這樣需要向 /dev/hda 安裝另一個引導加載程式,并令其指向 LILO 引導加載程式;然後隻需要讓 LILO 作為二級引導加載程式。通常,引導加載程式應該位于 /dev/hda。還可以将這個參數指向軟碟驅動器(最常見的是 /dev/fd0),來制做 LILO 軟碟引導磁盤。

2.map= 指向引導期間 LILO 内部使用的映射檔案。當使用 /sbin/lilo 指令安裝 LILO 時,它會自動生成這個檔案,其中包含有描述符表(還有其他内容)。建議不要改動這個檔案!

3.install= 是 LILO 在引導過程中内部使用的檔案之一。它同時包含有引導加載程式的主要部分和二級部分。boot.b 檔案的一個片段被寫入到 MBR(引導加載程式的主要部分),它會指向那個映射,接下來指向二級引導加載程式。同樣,不要改動它!

4.prompt= 告訴 LILO 使用使用者界面(本例中給出了兩個選擇 —— Linux 和 WindowsXP)。除了使用 prompt/user 界面以外,在适當情況下還可以為 Linux 核心等指定具體的參數。如果不在配置檔案中指定此選項,那麼 LILO 将引導到預設的 OS,不發生任何使用者互動,也不會等待。(但是請注意,如果在引導時按下了 SHIFT,那麼還是可以得到提示,當不想把引導加載程式暴露給普通使用者時,這非常有用)。

5.timeout= 是引導提示在自動引導預設 OS(本例中是 Linux)之前的等待時間(以十分之一秒為機關)。如果在 lilo.conf 沒有指定 prompt,那麼這個參數就會被忽略。

6.compact 選項可以大大加速引導過程,它會将連續的讀磁盤的請求合并為一個單獨的請求。不過,這可能是一件禍福參半的事情,因為我在論壇上看到過很多貼子提到了關于此選項的問題。當希望從軟碟引導時,這個選項尤其有用。

7.default= 選項告訴 LILO 預設使用哪個映像進行引導,比如在等待逾時之後。這與 lilo.conf 檔案中的某個映像的标簽相關聯。如果沒有在配置檔案中指定此選項,那麼它将引導檔案中指定的第一個映像。

8.對于允許使用者引導到的每一個 Linux 版本,都應該指定 p_w_picpath= 及以下三個選項。p_w_picpath 選項指定希望引導到的核心版本。

9.label= 标明了在運作期間希望能夠從使用者界面引導的不同 OS。另外,這個标簽用于指定引導的預設 OS。(注意:标簽名稱中避免出現空格;否則,引導那個檔案時會出現無法預期的錯誤。)

10.root= 告訴 LILO OS 檔案系統實際所在的位置。在我們的示例中為 /dev/hdb3,即第二塊硬碟上的第三個分區。

11.read-only 告訴 LILO 以隻讀的方式初始引導到檔案系統。OS 一旦完全引導起來,就會以讀寫方式挂載。

12.password= 允許您為将要引導到的特定 OS 設定密碼。不幸的是,這個密碼是以可讀文本的方式儲存在 lilo.conf 檔案中,是以,所有人都能夠讀取它。如果需要,還可以對想要引導自的每個作業系統設定密碼(示例中,隻為 Linux 的引導設定了一個密碼)。

13.other= 的動作類似于 p_w_picpath 和 root 選項的組合,但是用于除了 Linux 以外的其他作業系統。在我們的示例中,它告訴 LILO 到哪裡去找到 Windows OS(位于第一塊硬碟的第一個分區)。如果先安裝 Windows,後安裝 Linux,通常會是這樣。

14.label= 與所有其他 label 選項相同。

在 lilo.conf 檔案中可以使用很多其他參數,不過以上的參數就足以讓機器可用了。要獲得關于 lilo.conf 的這些以及其他參數的進一步資料,請參考手冊頁(man lilo.conf)。由于在引導時不會讀取 lilo.conf,是以,當這個檔案有改動時,需要“更新”MBR。如果不完成此步驟就重新開機,那麼對 lilo.conf 的修改不會在啟動中反映出來。與先前将 LILO 寫入 MBR 類似,需要運作:

$ /sbin/lilo -v -v

-v -v 标記會為您給出非常詳細的輸出。當像我們那樣運作 LILO 時,有很多參數可以指定。參閱手冊頁以獲得更進一步的資訊(man lilo)。

五.初始引導過程

當 LILO 初始引導時,它會按次序列印出每個字母 —— L-I-L-O。如果所有字母都顯示出來,那麼第一階段引導就成功了。缺少任何内容都表示出現了問題。

L:第一階段引導加載程式已經被加載。如果 LILO 停止在這裡,那麼是在引導第二階段引導加載程式時出現了問題。這通常會伴随有一個錯誤代碼。在這個階段的常見問題是媒體問題,或者在 lilo.conf 檔案中指定了不正确的磁盤參數。

LI:第二階段引導加載程式已經被加載。LILO 在此處停止表示第二階段引導加載程式不能被執行。同樣,這可能是因為出現了與隻顯示 L 類似的問題:正在加載,或者因 boot.b 檔案被破壞、移動或删除而不能加載。

LIL:第二階段引導加載程式正在被執行。此時,可能會再次出現媒體問題,或者映射檔案(如 lilo.conf 檔案中所指定的)在尋找描述符表時可能會出現問題。

LIL?:加載到與上面相同的階段。這通常意味着加載第二階段引導加載程式使用了錯誤的位址,最常見的原因是 boot.b 所在的位置與 lilo.conf 檔案所指定的不同。

LIL-:加載到與上面相同的階段。加載描述符表時出現問題,最常見的原因是描述符表錯誤。

LILO:LILO 成功被加載,沒有出現任何錯誤。

LILO運作時會給出一些提示資訊,這些資訊對于深刻地了解Boot Loader是很有益的。下面表是一些出錯資訊,供參考。

LILO出錯資訊 代表意義
LILO提示資訊 NULL LILO沒有安裝或者安裝LILO的分區沒有被激活
L LILO的第一部分已經被裝入并運作了,但它不能裝入第二部分的引導程式。這種情況通常發生在媒體通路失敗或硬碟參數錯誤時
LI LILO第一部分正确,但是第二部分執行時出錯。一般是硬碟參數有誤或/boot/boot.b與map程式不相比對
LIL LILO第二部分開始執行,但是不能從“map”檔案中讀取描述符表(Descriptor Table)。硬碟媒體錯誤或磁盤參數有誤
LIL? LILO在錯誤的地方加載
LIL- 描述符表錯誤。硬碟參數的不比對或/boot/boot.b與map程式不相比對
硬碟錯誤碼 0x00 由LILO扇區讀取子程式産生。map檔案被破壞,或者當使用“linear”參數時通路超出1024的柱面
0x01 LILO通路了BIOS不支援的硬碟
0x02 磁盤媒體出現問題
0x03 磁盤媒體寫保護錯
0x04 磁盤扇區未找到,硬碟參數錯誤
0x05 磁盤激活順序改變
0x06 錯誤的磁盤媒體
0x07 無效的初始化,BIOS沒有适當地初始化硬碟
0x08 DMA超出限度
0x09 DMA試圖超過64KB邊界。由于“compact”參數造成
0x0C 無效的磁盤媒體
0x010 “CRC錯誤”,檢測到媒體錯誤。建議多啟動幾次,運作map安裝程式,把map檔案從壞塊寫到正常的媒體上
0x11 ECC糾正成功。讀錯誤發生然後被糾正,但是LILO并不知道這個情況,終止了啟動過程
0x20 磁盤控制器錯誤
0x40 磁盤定位失敗,磁盤媒體問題
0x80 磁盤逾時。磁盤或驅動器沒有準備好,媒體壞了或沒有磁盤
0xBB BIOS錯誤。磁盤與BIOS配置不符

六.引導時的附加配置

LILO 被成功加載後,将看到 LILO 提示符。還是使用前面的示例 lilo.conf 檔案,此時将有兩個選擇,可能對 LILO 新手來說并不直覺。首先,可以讓 LILO 逾時(10 秒後),這将引導 /dev/hdb3,即 Linux 分區。另外,可以按下 TAB 鍵,這将列出将要引導的作業系統選項。在我們的示例 lilo.conf 中,将得到的選項是 “Linux” 和 “Windows”。輸入哪一個,就會引導到哪個 OS。指定加載 Linux 選項,會提示輸入一個密碼,在本例中是 linux。如果輸入的密碼有誤,則會傳回 LILO 提示符。

不過LILO 不支援引導期間的互動式配置,是以,隻能在 lilo.conf 中或者運作 /sbin/lilo 時指定選項。

繼續閱讀