lilo是Linux 的引導管理程序,它和OS/2、NT的BootManager,以及許多人用的syste
m commander的作用類似,當你在這個提示符下按下Tab鍵的時候,它會顯示出當前可以
引導的系統:
lilo:
dos smplinux
實際上,lilo就是一小段引導程序,可以位於任何有可能用來引導系統的位置,但是
通常我們把它放在硬盤的主引導區,這個概念對任何與病毒打過交道的用戶都應該是非
常熟悉的。系統自檢完畢之後,就會從硬盤上讀入主引導區的內容,於是,lilo接管了
系統的控制權,可以引導Linux了。理論上,許多書籍建議你用軟盤引導服務器以便避免
可能的破壞,這倒是那種“教科書的解決方案”的一個典型。
你可以看到在上面顯示出了多個系統名字,輸入某一個名字引導相應的系統,lilo會
自動選擇對應的分區以及啟動文件來啟動系統。
與lilo決斗是系統管理員生活的一部分,硬盤可能會損壞,病毒可能更改了引導記錄
,錯誤地編譯內核使系統報銷,甚至一些愚蠢的反病毒程序也可能會使得lilo被破壞,
這時你也許必須從DOS上引導,然後重新配置lilo。如何從DOS下啟動Linux等一會再說,
現在讓我們把主要精力拿來對付lilo。
lilo的配置是靠編輯/etc/lilo.conf實現的,這個文件的規則很簡單,舉例來說,這
是我的lilo文件:
[wanghy@openlab /etc]$ cat lilo.conf
boot=/dev/hda
install=/boot/boot.b
prompt
timeout=50
default=smp
image=/boot/bzImage
label=smp
read-only
append="mem=256M"
root=/dev/hda1
image=/boot/vmlinuz-2.2.12-20
label=linux
read-only
root=/dev/hda1
other = /dev/hda3
label = dos
table = /dev/hda
首先是boot=/dev/hda,這表示你用的啟動磁盤是第一個IDE硬盤(由於這個原因,通
常你不能從從盤上啟動Linux)。
接下來,install=/boot/boot.b將/boot.b表示要將/boot/boot.b文件的內容寫到引導
記錄中。這個文件在安裝Linux的時候就已經創建了。
prompt
timeout=50
default=smp
這兩行表示系統啟動時將會顯示一個lilo:提示信息並等待5秒鐘,注意timeout的單位
是0.1秒。如果5秒鐘之內沒有輸入系統的名字,那麼缺省將引導標號為"smp"的系統。
接下來定義的是各個引導項目,首先定義了兩個Linux引導項目,image=/root/bzIma
ge這樣的行定義了啟動時使用的內核映像,接下來,label=smp定義了這個啟動選擇項的
名字是smp。在下面的幾行則是用bzImage啟動系統時的一些附加參數:
read-only
使用只讀方式連接文件系統,由於系統啟動的時候要檢測文件系統完整性,因此要使
用這個選項,當系統啟動後,啟動腳本會自動將它切換為read-write模式。
append="mem=256M"
缺省下,Linux內核只使用64MB以下的內存空間,由於這個系統有256MB內存,必須用
命令行直接通知內核,append後的內容就是啟動時加給內核的命令行參數。必須注意,
有時你需要把它寫成mem=255M,原因是在許多系統上bios會占用部分存儲空間,如果你
沒有把握,就從內存量中減去一。
root=/dev/hda1
當這個內核啟動以後,用/dev/hda1文件系統作為本機文件系統的根。
接下來的段落的效果與剛才我們解釋的一樣,剛才定義了一個名叫"smp"的啟動項,它
啟動Linux並且連結/dev/hda1文件系統,而從image=/boot/vmlinuz-2.2.12-20開始的段
落則定義一個名叫“Linux"的選項,它使用/boot/vmlinuz-2.2.12-20作為內核映像,掛
接/dev/hda1文件系統,但是只使用缺省的64MB內存。
再往下的段落
other=/dev/hda3
label=dos
table=/dev/hda
定義了一個名叫dos的啟動項,這個啟動項用來啟動位於/dev/hda3上的MS-DOS分區。
由於DOS不使用內核映像而是利用引導記錄,系統必須能夠找到分區表信息以便定位引導
記錄,table=/dev/hda表示系統的DOS類型的分區表在/dev/hda上。
當完成了lilo.conf的設置工作後,執行
/sbin/lilo
會出現這樣的信息:
[openlab]# /sbin/lilo
Added smp *
Added linux
Added dos
*表示這個加入的項是缺省啟動項。三行信息表示我們定義的三個啟動項都已經被加入
,以後再啟動就可以使用新的啟動定義了。
lilo還支持很多其他的定義,但是對於系統管理員來說,上面解釋的已經足夠了,想
要了解進一步的內容,執行man lilo.conf。
前面提到了內核映像這個概念,Linux在編譯內核時將內核做成壓縮的二進制內存映像
,啟動中自動拷貝到內存中並解壓,然後讓核心代碼接管系統。
核心代碼得到系統的控制權之後,下一步需要檢測系統設備並激活必須的設備,在這
個過程中,一串初始化信息在屏幕上滾過:
Linux version 2.2.14 ([email protected]) (gcc version egcs-2.91.66
199903
14/Linux (egcs-1.1.2 release)) #9 SMP Sat Jan 29 10:07:06 EST 2000
Intel MultiProcessor Specification v1.1
Virtual Wire compatibility mode.
OEM ID: MSIProdUCt ID: 440BXAPIC at: 0xFEE00000
Processor #0 Pentium(tm) Pro APIC version 17
Processor #1 Pentium(tm) Pro APIC version 17
I/O APIC #2 Version 17 at 0xFEC00000.
Processors: 2
mapped APIC to ffffe000 (fee00000)
mapped IOAPIC to ffffd000 (fec00000)
Detected 451033204 Hz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 448.92 BogoMIPS
Memory: 257700k/262144k available (1044k kernel code, 424k reserved, 2920k
data,
56k init)
Dentry hash table entries: 32768 (order 6, 256k)
Buffer cache hash table entries: 262144 (order 8, 1024k)
Page cache hash table entries: 65536 (order 6, 256k)
VFS: Diskquotas version dquot_6.4.0 initialized
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
.............
這個信息很長,幾乎每個被初始化的設備都會顯示一段訊息,從這裡可以看出系統中
那些設備已經開始工作,那些設備失敗了。如果信息滾動過快,可以在啟動完成之後用
dmesg命令顯示全部信息。
當需要直接在內核映像中啟動的設備(這些設備是在編譯內核時確定的)初始化完畢
後,Linux連結在lilo.conf的root=行中定義的根文件系統,啟動init進程(應該記得它
是一切程序的最初啟動者),尋找/etc/inittab文件並且進入運行級的設置。