說實在的,整個開機以 grub 來作為 boot loader 就很棒了~沒有什麼需要玩 LILO 的啦! 不過, grub 還是有點小缺點的,那就是,當你的 partition 變了,或者是 Windows 存在, 但 Linux 死掉時,因為在 Linux 的設定檔 (/boot/grub/menu.lst) 掛點, 將會導致無法啟動 Windows 的困境,除非您很清楚的知道如何使用 grub shell ,否則, 還真糗~
在這個部分, LILO 則使用與 grub 不同的機制,他將 boot loader 的 stage1 與 stage2 通通寫入 MBR 或者是 super block 開機區當中,所以,設定檔當然就不需要一定要存在於 Linux 的 filesystem 上囉!您說對吧! ^_^。 但還是各有利弊得失啦~沒有說那個比較好就是了。但也因為如此,所以:
當 LILO 設定檔被改過後,一定需要重新安裝 LILO 一次。 這一點與 grub 是完全不同的呢。
其實,LILO (LInux LOader) 看名稱就知道是 Linux 最早的 boot loader , 他主要利用 /etc/lilo.conf 這個設定檔,然後再以 lilo 主程式將該設定內容寫入開機區當中。 接下來我們就來玩一玩 LILO ,不過需要留意的是, FC4 似乎沒有提供 Lilo 給我們呢! 所以使用 FC4 的朋友應該就沒有辦法玩這個咚咚了~不過沒關係吧~知道 boot loader 即可啊! ^_^
LILO 的設定檔 /etc/lilo.conf: LILO 的設定檔 /etc/lilo.conf 同樣的分為兩部分,分別是 LILO 整體環境設定部分, 與每個開機項目核心檔案名稱規範部分。有點像這樣啦:
[root@linux ~]# vi /etc/lilo.conf # 第一部份,整體的設定部分 prompt <==強制出現 boot 的開機訊息囉! Compact <==可以整合一些讀取的磁區,可以保持 map 較小,適合軟碟開機時使用 timeout=50 <==如果有多重開機的話,可以設定這個延遲時間,單位0.1秒 default=linux-2.4.18 <==預設的開機項目,與底下的 label 對應! boot=/dev/hda <==Lilo 的開機資訊寫入到 /dev/hda 這顆硬碟的 MBR 當中。 map=/boot/map <==用來說明 local 主機的地圖資訊囉! install=/boot/boot.b <==關於開機區的訊息(boot sector),不用理他沒關係! Linear <==在較大容量的硬碟使用時,可以加入這一個參數試試看! lba32 <==這個東西也是在大容量的硬碟使用時候會需要的參數! password=1234567 <==設定密碼!如果為了安全起見,可以設定您的 lilo 密碼哩! message=/boot/message <==那個 LILO 的訊息就是在裡面出現的啦!
# 第二部分,個別的開機設定部分,一個 image 或 other 均代表一個開機設定! image=/boot/vmlinuz-2.4.7-10 <==核心檔案啦! label=linux-2.4.7 <==請注意!label 前面以 [tab] 按鍵來作為分隔! initrd=/boot/initrd-2.4.7-10.img read-only <==開機磁區掛載為唯讀! root=/dev/hda1 <==掛載成 / 這個 root 目錄的磁碟! other=/dev/hdb1 <==如果是『非 Linux 核心』就以 other 來設定 label=Windows2k <==同樣的要有 label 來表示這個開機磁區的名稱!
|
注意上面的幾個項目,在整體環境設定項目當中,要注意:
- timeout=50
timeout 的設定是 0.1 秒,所以 delay=50 表示延遲時間為 5 秒!
- linear 與 lba32
linear 與 lba32 通常用在 SCSI 或者是較大的硬碟,例如磁柱(cylinder)總數超過 1024 磁柱的硬碟,可以使用這個項目來除錯!不過,如果是小於 8GB 的硬碟, 這兩個東西有沒有設定就沒有什麼影響了!早期的硬碟容量不大,所以 cylinder 不會超過 1024 ,但較新的硬碟容量太大了,如果核心檔案 (/boot/vmlinuz) 放置在 1024 磁柱以後,則可能會發生無法讀取的問題,因此需要設定這個 lba32 啊! 這也是為何很多 distribution 預設都會將 /boot 獨立出來的緣故!
- default
default 需要設定成底下幾個 image 或者是 other 的 label 才成! 這個地方最常被忘記!因為常常會記得修改 label ,但是忘記跟著改變 default 的內容!此外,如果你想要修正開機預設的作業系統選項,在這裡改啦!
- password
password 的用途在於安全防護方面,不過有個困擾,就是『 如果你的電腦因為不正常關機 (如斷電後重開) 而在電源恢復的時候重新開機時,則會卡在這個階段無法直接進入 Linux 系統』, 因為你必須提供 password 才能繼續的工作呀!
- boot
boot 顯示的是開機的磁區選擇! 這裡也蠻重要的,如果你想要安裝在 MBR 裡面的話,如同上面的書寫模式,就是寫入 /dev/hda ,後面不要加上每個 partition 的代碼!但是,如果你是想寫入 Super Block ,例如我想要寫入的是 hda5 這個 Logical 的 partition 時,那麼這裡就必需要改寫為 /dev/hda5 囉!所以,您應該只要一看到這個 boot 後面接的內容,就會知道那個安裝的磁區是 MBR 還是 Super Block 囉!
至於每個開機選單項目的內容,主要分為:
- image=kernel_file
image 後面就是接核心檔案的檔名就是了!這主要是針對 Linux 來作的設定啦! 在 image 底下還有很多的設定項目,每個項目都以 按鍵來縮排,主要的項目有:- label:項目名稱!出現選單時可以選擇的項目;
- initrd:後面就是接 RAM Disk 的 initrd 檔案檔名啊!
- root:這個重要!就是根目錄 (/) 的裝置代號啊!
- append:核心額外的功能增加的地方!與 grub 的 kernel 後面接的參數意思很相近!
- other=device
其實這個就是 chain loader 啦!移交 boot loader 控制權的設定項目。 在 other 後面接的就是磁碟的裝置代號,不論是 MBR 或 super block 都可以啊!裡面只要有 label 即可啊!
大致就是這樣啊~如果還有什麼疑問,詳情請參考 man lilo.conf 即可呦!
測試與安裝 LILO 開機管理程式: 好啦!為了測試一下您是否已經知道了 lilo.conf 的設定方式,所以我們來做個實驗吧! 請在您的『實驗主機』上面,不要在提供服務的主機上面完呦!否則死掉了不要怪我沒警告您… 我們先試圖安裝在 super block 上面好了!以下面為例,特殊字體的部分是經過我的修改之後的結果, 您的 /etc/lilo.conf 應該會長的跟我的差不多才是!
[root@linux ~]# vi /etc/lilo.conf boot=/dev/hda1 map=/boot/map vga=normal default=linux keytable=/boot/us.klt prompt nowarn timeout=100 message=/boot/message menu-scheme=wb:bw:wb:bw image=/boot/vmlinuz label=linux root=/dev/hda1 initrd=/boot/initrd.img append="devfs=mount" read-only image=/boot/vmlinuz label=failsafe root=/dev/hda1 initrd=/boot/initrd.img append="devfs=nomount failsafe" read-only image=/boot/vmlinuz <==就給他新增加一個 label ,但是內容不變! label=linux-test root=/dev/hda1 initrd=/boot/initrd.img append="devfs=mount" read-only
|
這樣就設定好了!接著下來看一下怎麼安裝他吧!安裝真是簡單到不行~直接輸入 lilo 即可!
[root@linux ~]# lilo Added linux * <==有打星號的是『預設的開機設定檔!』 Added failsafe Added linux-test
|
看到沒有!要像上面這樣才是安裝成功呦!如果出現了錯誤的訊息,那麼肯定是有地方沒有安裝好! 這個時候請特別的再重新設定一次 /etc/lilo.conf 呢!有打星號的是『預設的開機設定檔!』 而如果您還要看看更多的訊息,那麼就需要這樣:
[root@linux ~]# lilo -v LILO version 22.3.2, Copyright (C) 1992-1998 Werner Almesberger Development beyond version 21 Copyright (C) 1999-2002 John Coffman Released 11-Jul-2002 and compiled at 21:48:42 on Aug 13 2002.
Reading boot sector from /dev/hda1 Using MENU secondary loader Calling map_insert_data Mapping message file /boot/message -> message-text Calling map_insert_file
Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux *
Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added failsafe
Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux-test
/boot/boot.0301 exists - no backup copy made. Writing boot sector.
|
如果你需要更多的訊息,那麼就使用『 lilo -v -v -v 』多幾個 -v 就對了! ^_^
一些問題的解決之道: 好了! lilo 安裝完成之後,總是會有一些問題會發生吧!那麼如何來解決問題呢?嗯! 可以看一下底下的一些解決之道:
- 我要如何選擇不同的開機設定檔?開機的時候我只看的到 boot: 而已?
開機之後,如果是以 lilo 來啟動 kernel 時,那麼他會出現 boot: 的字樣,出現這個字樣之後, 馬上按下 按鍵,那麼就會出現目前 lilo 所記憶的開機設定檔囉!然後在 boot 後面輸入想要的開機檔案,就可以囉!
- 安裝好了 Linux 之後,在開機的過程中卻只出現『 LI 』就停止了!該如何是好?
這個問題可能發生的原因是 Lilo 沒有設定好,或者是由於 Linux 安裝在非 /dev/hda ( MBR )的硬碟之中,解決的方法可以如下:
- 用 Linux 光碟開機,然後在出現 boot: 處輸入『 linux root=/dev/hda1 (這個與你的 Linux 安裝的 partition 有關)』 順利開機之後,以 vi 修改 /etc/lilo.conf 將『linear』 這一行取消(如果沒有這一行的話,那就在 lilo.conf 中加入吧!)然後執行 『lilo』重新安裝 Lilo, 再取出光碟並重新開機試試看;
- 進入 BIOS ,將硬碟的 mode 改成 LBA 試看看;
- 將Linux往前面一點的磁區安裝,例如你可能安裝在 /etc/hdc1 ,那你可以重新安裝 Linux 在 /dev/hda2 試看看
- 安裝Linux完成之後,卻是出現 010101... 等數字在螢幕上,無法進入 Linux ...
這個問題的發生很有可能是硬碟出了問題了!這個時候可以使用 fsck 來掃瞄囉!
- 用軟碟或者是光碟開機後,使用fsck這個硬碟修正軟體掃瞄一下您的 root partition ,例如:fsck /dev/hda1
- 進入 BIOS ,將硬碟的 mode 改成 LBA 試看看;
- 我們知道 DOS 需要在第一顆硬碟的第一個磁區才能正常開機使用! 那要是他並非在第一個磁區呢?例如當 DOS 系統在 /dev/hdb1 (第一條排線的 slave )?
解決知道就是以 lilo 修正磁碟的配置啦!如下所示來修改 /etc/lilo.conf
other=/dev/hdb1
label=DOS
map_drive=0x80
to=0x81
map_drive=0x81
to=0x80
然後再執行 lilo 寫入 MBR 當中!
- 我不要玩 Linux 了,如何移除 lilo ?
只要以 Windows 的開機片開機,然後以 Windows 系統的 fdisk 下達: 『fdisk /mbr』 就可以將 Lilo 自 MBR 當中移除囉!
- 無法正常的進入 Lilo 怎麼辦?
這的時候開機片就很重要啦!使用開機片,在出現 boot: 的時候,輸入 『linux -s』 就可以進入啦!這裡請特別留意!那個 linux 指的是 label 呢!就像剛剛我們有三個 label ,分別是 linux, linux-test 與 failsafe ,那麼如果我要以 linux-test 這個開機設定檔的單人維護模式登入,就必需要改寫成
linux-test -s
linux-test single
請特別留意!!