Linux開機管理:Lilo與Grub

火星人 @ 2014-03-12 , reply:0


  作者:吳迪 本文選自:開放系統世界—賽迪網 2003年03月12日

目前,PC的性能越來越強大,尤其是超大容量的硬碟使我們有足夠的地方去安裝多個操作系統。Linux下最常用的多重啟動軟體就是LILO和Grub。

LILO是現在許多Linux預設的引導程序,它的全稱是Linux Loader,擁有很強大的功能。Grub 也是一個多重啟動管理器,它的全稱是Grand Unified Bootloader。Grub的功能與LILO一樣,也是在多個操作系統共存時選擇引導哪個系統。它可以引導很多PC上常用的操作系統,其中就有Linux、FreeBSD、Solaris、Windows 9x、Windows NT;可以載入操作系統的內核和初始化操作系統;可以把引導權直接交給操作系統來完成引導;可以直接從FAT、minix、FFS、ext2或ext3分區讀取Linux內核。Grub 有一個特殊的互動式控制台方式,可以手工裝入內核並選擇引導分區。


初識Grub和LILO


1.Grub與LILO的優缺點

由於Grub出現要比LILO晚,所以它可以實現LILO的絕大部分功能,可以代替LILO來完成對Linux的引導,特別適用於Linux與其它操作系統共存情況。

◆ 8.4GB問題

以前大多數Linux所帶較舊版本的LILO都有這樣的一個問題:啟動/boot分區不能分在超過1023柱面的地方,一般是在8.4GB左右的地方,否則LILO不能安裝,或者安裝后不能正確引導系統。Grub就不會出現這種情況,只要安裝時大硬碟是在LBA模式下,它就可以引導根分區在8GB以外的操作系統。目前,在LILO較新的版本中這個問題已經做了很好處理。

◆ 漂亮的Logo

Grub引導開機顯示一個漂亮的開機畫面,它可以是640×480、800×600、1024×768等各種模式畫面, 而且可以支持自動選擇最佳圖像模式。Linux愛好者可以通過改變這幅圖片來製作個性化開機畫面。

LILO源於文字界面,因此它在最新的版本中對開機畫面的支持也是很有限的。

◆ 執行模式

Grub不但可以通過配置文件進行引導,還可以在選擇引導前動態改變引導參數,動態載入各種設備。例如,在Linux下編譯了一個新的核心,但不能確定它能不能工作,就可以在引導時動態改變Grub的參數,此時即使Grub菜單配置不正確,但仍可以引導系統。Grub的命令行有非常強大的功能,而且支持如bash一樣的歷史功能,可以用上下鍵來尋找以前的命令。LILO就不支持這種模式。

在LILO下,既可以手工輸入操作系統的名字來引導不同的操作系統,也可使用一個菜單來選擇不同的系統進行引導。Grub也兼容以上的操作。

◆ 分區對Grub與LILO的影響

LILO是通過讀取硬碟上的絕對扇區來裝入操作系統,因此每次分區改變都必須重新配置LILO,如果調整了分區的大小及分區的分配,那麼LILO在重新配置之前就不能引導這個分區的操作系統了。而Grub是通過文件系統直接把核心讀取到內存,因此只要操作系統核心的路徑沒有改變,Grub就可以引導系統。

Grub和LILO支持多種外部設備,支持多種文件系統,動態裝載操作系統內核,甚至可以通過網路裝載操作系統核心。Grub還支持多種可執行文件格式,支持自動解壓,可以引導不支持多重引導的操作系統等。


Grub和LILO的參數比較


1.安裝

敲入「makebootable」命令,就可以安裝Grub。而「lilo -v」則是重新安裝LILO。LILO引導扇區包括一個分區表的空間,所以LILO既可以安裝在MBR中,也可以安裝在某個分區的引導扇區。Grub和LILO同時都可以安裝在軟盤之中。製作Grub的啟動盤和製作LILO的啟動盤相差不大。

要製作引導盤,需執行一些簡單的步驟。首先確定Grub或LILO已經安裝,並且在新的軟盤上創建 ext2文件系統。然後進行安裝,將一張空盤插入軟碟機,輸入:

#mke2fs /dev/fd0



創建了ext2文件系統后,需要安裝該文件系統。

(1)安裝Grub

進入Grub的目錄:

#cd /boot/grub



放入一張軟盤,執行以下命令:

#dd if=stage1 of=/dev/fd0 bs=512 count=1
#dd if=stage2 of=/dev/fd0 bs512 seek=1



Grub啟動盤就完成了。

(2)安裝LILO

#dd if=/dev/hda of=/dev/fd0 bs=512 count=1(因為LILO已經安裝在MBR中)



執行上述命令后LILO啟動盤就完成了。

Grub啟動時,會在/boot/grub/中尋找一個名字為menu.lst的配置文件,如果找不到此文件則不進入菜單模式直接進入命令行模式。menu.lst 是一個文本文件,可以用任何一個文本編輯器打開它。每一行代表一個配置命令,如果一行的第一個字元為「#」,則表明這一行為註釋,可以簡單地用增加或減少註釋行來改變配置。LILO使用一個文本文件/etc/lilo.conf作為其配置文件。LILO讀取lilo.conf,按照其中的參數將特定的LILO寫入系統引導區。如果修改了/etc/lilo.conf,就必須重新運行LILO命令,以保證LILO正常運行。

Grub和LILO有很多的相似的參數,見表1所示。


表1 Grub和LILO參數比較



相似功能 Grub的具體參數 LILO的具體參數
在second秒之後引導默認的操作系統 timeout second timeout=tsecs
默認啟動選項 default num default=name
指定操作系統的名字和描述 title OS mode label
指出linux內核的路徑 Kernel image
指出開機畫面的文件所存放的路徑和文件名 Splash pathname/filename message=message-file



2.配置

(1)Grub和LILO共同的配置(括弧內為LILO的參數)

指定引導默認的操作系統的等待時間:

timeout second(timeout=tsecs)



上面代碼表明設定second秒之後引導默認的操作系統。如果是timeout 5,就是5秒沒有其它指令就引導系統;如果設成-1,則Grub會一直等待直到用戶選擇一個選項為止。

LILO中,timeout=50同樣設置等待鍵盤輸入的時長,單位是0.1秒。超過這段時間沒有輸入則為超時,系統將自動引導預設的操作系統。如果不設置本參數,預設的超時時間長度為無窮大。

指定引導的默認操作系統:

default num(default=name)



Grub中默認啟動第num+1行的操作系統,default=1則啟動第2個系統。LILO中是通過default=name指定預設引導的操作系統,如default=LINUX表示將label為Linux的系統作為預設引導的操作系統。如不指定該參數,排在lilo.conf中的第一個操作系統將作為預設操作系統。

指定引導的操作系統的內核:

Kernel(image)



給Grub指定內核在哪兒,還要指出哪個文件是內核文件。例如kernel /boot/vmlinuz-2.2.16 root=/dev/hda7 ro說明/boot/vmlinuz-2.2.16 就是要載入的內核,後面的都是傳遞給內核的參數。root=/dev/hda7就是Linux根分區的所在分區,ro以只讀的方式打開。 LILO中是以image=filename來指定含有一個Linux內核的啟動選項的文件或設備。

指定引導操作系統時的信息文件:

Splash pathname/filename(message=message-file)



上面代碼指出Grub開機畫面文件所存放的路徑和文件名。LILO中,message=message-file命令用於指定一個包含註釋信息的文件,該文件將在系統「LILO」之前顯示。如果在LILO啟動時想獲取較多的信息,可以編輯這個文件,再使用該命令就可以了。文件中如果包含有ASCⅡ碼為0xFF的字元(Ctrl+L)則表示清屏。注意,文件的大小不能超過65535個位元組。每次文件改變之後,都必須重新運行LILO命令重建map文件,以保證其正常顯示。

指定引導操作系統的名稱:

title OS mode(label)

上面代碼指出的字元就是Grub菜單項上所看見的選項,你可以寫上操作系統的名字和描述,如用 title Linux、 Single Mode代表這一選項是引導此Linux的單用戶模式。在LILO中,label=name通過此參數來標識當前操作系統,即操作系統名。用戶可通過在LILO提示后輸入name來引導特定的操作系統。

(2)LILO的配置信息

在LILO.conf中,最多有16個操作系統選項,它比Grub有更大的靈活性。LILO.conf配置文件主要分為兩部分:一部分是全局配置;另一部分是引導配置,「#」表示註釋。

◆ LILO的全局配置

全局參數是全程有效的,它可以出現在文件LILO.conf中的任何地方。

指定引導操作系統文件的備份:

backup=backup-file
force-backup=backup-file
install= file



在裝入LILO之前,將原先的引導區備份到backup-file。它可以備份到一個設備上,用戶可以通過dd if=/boot/boot.bak of=/dev/hda bs=446 count=1恢復原先的MBR。force-backup=backup-file類似「backup」,但是會覆蓋原有的同名文件。install=file將指定的文件作為新的引導扇區來安裝,若未設置install選項,則將boot/boot.b作為默認預設值使用。

指定一個用於安裝LILO的設備:

boot=boot-device



上面代碼指定一個用於安裝LILO的設備。通常LILO可安裝在如下幾個地方:

MBR:第一個硬碟的主引導區, 對應於/dev/hda、/dev/sda或者是/dev/hda0等。

Root: Linux根分區「/」上。

Floppy: LILO安裝在軟盤上,對應於/dev/fd0。LILO預設安裝在根分區超級塊上。

指定用於優化壓縮LILO:

compact



該參數用於優化壓縮LILO,讓LILO把相鄰扇區的多次讀取請求合併成一次讀取請求,從而使MAP文件更小。因此,從軟碟機讀取時推薦使用 compact 選項。

指定強制LILO等待用戶的鍵盤輸入:

prompt
delay=tsecs
prompt forces



prompt給出「boot:」提示,強制LILO等待用戶的鍵盤輸入,按下回車鍵則立即引導默認的操作系統;按下Tab顯示可供選擇的操作系統。大多數情況下,如果有多個操作系統應該使用參數,這樣留給用戶一個選擇的餘地。在沒有指定「prompt」參數時,LILO將立即引導預設的操作系統。「delay」參數在這之間插入一段延時,單位是1/10秒。如果未設置delay選項或設為0,則引導裝入程序就不會等待。prompt forces不等待任何的按鍵事件發生,就直接進入啟動提示符模式。如果設定了prompt選項而沒設定timeout選項,則不能自行啟動。

指定非標準硬碟的具體參數:

disk=device-name



上面代碼指定了非標準硬碟的具體參數。它有以下的幾個參數:bios,設備號;sectors,硬碟扇區數;heads,硬碟磁頭數;cylinders,硬碟柱面數;partition,用於物理定位特殊硬碟上的分區;start,每一分區的起始扇區。

指定磁碟的物理性能指標:

linear
table=device
fix-table
ignore-table



linear產生線性扇區地址,而非「扇區/磁頭/柱面」地址的linear扇區地址。因此,linear地址在運行時不依賴於硬碟參數。注意,在將LILO安裝到軟盤上時不能使用「linear」參數。table指定含有分區表的設備;若未指定該參數,引導裝入程序就不會把分區信息傳送到已啟動的操做系統。若一個已定位且引用了table選項的分區表被修改則必須重新運行LILO。fix-table選項使得LILO可對分區表上的扇區/磁頭/柱面,以及線性地址進行調整,從而建立每個分區表入口、包含有該分區的最前和最後一個扇區的扇區/磁頭/柱面及線性地址。ignore-table通知LILO忽略無效的硬碟分區表。

指定map文件:

Lock
map=map-file



指定map文件,沒有本項時預設使用/boot/map,每次改動LILO都應產生一個新的與之相關map文件。Lock是告訴LILO,提示后立即按上一次的引導映像啟動計算機。允許自動記錄引導命令行,作為以後啟動的默認預設值。

當用於啟動的引導映像不存在時,使用optional參數使LILO忽略它。這對用於測試一個不長期存在的Linux內核是有用的。

指定LILO設置口令保護:

password=password
restricted



上面代碼為LILO設置口令保護,每次重新啟動計算機提示用戶輸入口令。因為這個密碼是明文的,設置了口令后建議將LILO.conf的文件屬性改為000,以免讓非root用戶看到口令。restricted 與password聯用,使「password」僅作用於在LILO提示後有參數輸入的時候。

指定串列口控制器的參數:

serial=parameters (port, bps,parity,bits)



這將初始化指定的串口,並將使引導管理器能接收來自串口的輸入。

參數如下:

〈port〉 表示的串口號。
〈bps〉 串口速率。
〈parity〉設置串口校驗。一般情況下,LILO忽略奇偶校驗。n表示無校驗,e表示偶校驗,o表示奇校驗。
〈bits〉字元位數,只能取7或8,預設值是8。當有奇偶校驗時只能取7。



用下面命令可以打開進程報告:

verbose=level
append=string



數目越大給出的冗長輸出越多。如果在LILO命令行中附加參數-v,則冗長標準也相應增加,最大的冗長標準是5。

append傳遞一個特殊硬體的參數串string給Linux系統的內核。它常用來配置一些Linux不能正確測試到的硬體設備。例如:append = 「hda=128,64,200」指明該硬碟為128柱面、64磁頭、200扇區。

指定RAM盤的大小:

ramdisk=size



size為零時不建立RAM盤。忽略此參數時,RAM盤大小由Linux內核引導程序決定。

指定以何種讀寫方式載入根文件系統:

read-only
read-write



從字面上可以知道它們分別是通知LILO以只讀方式載入根文件系統,以讀寫方式載入根文件系統。

指定LILO引導Linux系統時的VGA模式:

vga=mode



指定LILO引導Linux系統時的VGA模式,有以下的參數值:

normal 常規80×25文本模式。
extended 80×50文本模式。
ask

引導時詢問用戶使用哪一種VGA模式,這時敲回車鍵將顯示一個可分配的VGA模式表。如果不指定VGA模式,系統將預設地使用包含在系統內核里的VGA模式值。

◆ 引導配置

引導映像參數作用於每一個引導區。

設置包含Linux內核引導映像的文件或設備:

image=pathname



設置包含非Linux操作系統:

other=pathname



如DOS、Windows 95等系統引導的文件或設備,以提示啟動其它獨立的系統。

range=start-end
alias=name
loader=chain-loader



如果「image」參數被設置為一個設備,則Linux內核引導程序的存放範圍必須被range=start-end設置。alias給當前操作系統起一別名。loader=chain-loader指定LILO所需要的特定的引導程序,預設值是/boot/chain.b。

LILO運行時會給出一些提示信息,這些信息對於深刻地了解Bootloader是很有益的。表2羅列了一些錯誤信息供參考。


表2 LILO出錯信息



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配置不符。



(3)Grub配置信息

與LILO相比,Grub有更強的交互性。下面就以它的命令來理解這個bootloader 。

進入菜單,按「e」是編輯啟動命令,按「c」是使用命令行。按「e」鍵可以編輯所選項的啟動命令,用這個功能可以臨時改變系統的啟動參數。

要啟動一個操作系統,首先指定引導哪個分區上的系統,例如要引導第一個硬碟上的第一個分區的操作系統,先鍵入:

grub>root (hd0,0)



如果要啟動的是Windows系統,鍵入:

grub>chainloader (hd0,0)+1



注意,(hd0,0)要隨著硬碟和分區的不同而改變。

如果要引導Linux或其它系統,應鍵入:

grub>kernel (hd0,6)/boot/vmlinuz root=/dev/hda7



注意,磁碟參數也要隨著硬碟和分區的不同而改變,如從第二個硬碟的第一個分區引導則用hdb1,最後敲入boot就可以啟動系統了。

在不能確定命令或者命令的參數時,都可以按「Tab」獲得相關的幫助;用上下鍵可以獲得命令的歷史記錄,這些就像在Linux中使用bash一樣簡單。也可以鍵入啟動命令,然後boot就可以引導系統了。

Grub下生成引導盤:

grub> root (fd0)   
grub> setup (fd0)   
grub> quit



如果要把Grub裝到硬碟上,也很容易。如果安裝到MBR,則可以指定整個磁碟而不必指定分區,如下(對於hda):

grub> setup (hd0)



如果要將Grub安裝到/dev/hda7的引導記錄中,應輸入:

grub> setup (hd0,6)



綜上所述,LILO要求用戶十分明白每個參數才能很好地掌握;而Grub則更加看中用戶的交互性,兩者在bootloader中不分伯仲。


實例


下面就以我的lilo.conf為例,把它翻譯成Grub的menu.lst文件。

lilo.conf:
#The lilo.conf of the writer
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/cosixmsg //指出開機畫面的文件所存放的路徑和文件名
prompt
password = wudi //密碼是wudi
timeout=50 //在5秒之後引導默認的操作系統
default=dos //默認啟動選項dos
image=/boot/vmlinuz-2.2.16-3 //指出Linux內核的路徑
label=linux //指定操作系統的名字Linux
vga=0x301
read-only
root=/dev/hda7
other=/dev/hda1 //指定操作系統的名字DOS
label=dos



翻譯后的menu.lst文件:

timeout 5 //在5秒之後引導默認的操作系統
default 1 //默認啟動選項dos
 # → linux ← //指定操作系統的名字LINUX
 title linux   root (hd0,6)   kernel /boot/vmlinuz-2.2.16 root=/dev/hda7 ro
  initrd /boot/initrd-2.2.16.gz
 # → linux END ←
 # → dos ← //指定操作系統的名字DOS
 title dos   root (hd0,0)   chainloader +1
 # → dos END ←

通過以上對Grub和LILO的講解,讀者可能已經對這兩種bootloader有了較深地理解,但是還需要經過大量反覆地練習,才能很好地掌握。




[火星人 via ] Linux開機管理:Lilo與Grub已經有84次圍觀

http://www.coctec.com/docs/linux/show-post-69660.html