2009年1月13日 星期二

Boot Loader: LILO

說實在的,整個開機以 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 )的硬碟之中,解決的方法可以如下:

    1. 用 Linux 光碟開機,然後在出現 boot: 處輸入『 linux root=/dev/hda1 (這個與你的 Linux 安裝的 partition 有關)』 順利開機之後,以 vi 修改 /etc/lilo.conf 將『linear』 這一行取消(如果沒有這一行的話,那就在 lilo.conf 中加入吧!)然後執行 『lilo』重新安裝 Lilo, 再取出光碟並重新開機試試看;
    2. 進入 BIOS ,將硬碟的 mode 改成 LBA 試看看;
    3. 將Linux往前面一點的磁區安裝,例如你可能安裝在 /etc/hdc1 ,那你可以重新安裝 Linux 在 /dev/hda2 試看看

  • 安裝Linux完成之後,卻是出現 010101... 等數字在螢幕上,無法進入 Linux ...

    這個問題的發生很有可能是硬碟出了問題了!這個時候可以使用 fsck 來掃瞄囉!

    1. 用軟碟或者是光碟開機後,使用fsck這個硬碟修正軟體掃瞄一下您的 root partition ,例如:fsck /dev/hda1
    2. 進入 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
    請特別留意!!