Linux 開機流程分析
本文已不再維護,更新文章請參考 此處
最近更新日期:2003/02/10
開機流程分析/etc/sysconfig
變換預設的登入模式
Lilo設定檔 /etc/lilo.conf, 以預設的 lilo.conf 新增一個開機檔, 安裝 lilo ,一些問題的解決之道
Grub設定檔 /boot/grub/menu.lst, 安裝 grub 在系統中, 開機手動設定選項
可開機磁片與救援磁片製作
本章習題練習

開機流程分析
開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由於 Linux 是一套多人多工的作業系統,你難保你在關機時沒有人在線上,如果你關機的時候碰巧一大群人在線上工作,那會讓當時在線上工作的人馬上斷線的!那不是害死人了!一些資料可以無價之寶哩!另外,與 DOS 環境不同的是, Linux 在執行的時候,雖然你在畫面上只會看到黑壓壓的一片,完全沒有任何畫面,但其實他是有很多的程式在背景底下執行的,例如郵件程式、瀏覽器主機程式等,你如果隨便關機的話,是很容易傷害硬碟及資料傳輸的動作的!所以在 Linux 下關機可是一門大學問喔
 
既然開機是很嚴肅的一件事,呵呵,那我們來瞭解一下整個開機的過程吧!好讓大家比較容易發現開機過程裡面發生錯誤的地方,與解決之道!不過,由於開機的過程中,那個 Boot Loader 使用的軟體可能不一樣,例如 Mandrake 9.0 已經同時提供 Lilo 與 Grub 這兩個開機管理程式,雖然 lilo 與 grub 的啟動過程或許有點不太相同,但是他的原理則都是一樣的哩!這裡我們先介紹較老牌的 Lilo 囉! Lilo 是什麼?!簡單的說,他是 LInux LOader 的縮寫,就是 Linux 開機時候載入的咚咚就對了!這東西可是控制了你的多重開機的命脈!底下的篇幅會再分別介紹這兩套開機管理程式!底下先開始來談談 Linux 是如何開機的呢?基本的流程為:
  1. 載入 BIOS 的硬體資訊;
  2. 讀取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機資訊;
  3. 載入 Kernel 的作業系統核心資訊;
  4. Kernel 執行 init 程式並取得 run-level 資訊;
  5. init 執行 /etc/rc.d/rc.sysinit 檔案;
  6. 啟動核心的外掛式模組 (/etc/modules.conf);
  7. init 執行 run-level 的各個批次檔( Scripts );
  8. init 執行 /etc/rc.d/rc.local 檔案;
  9. 執行 /bin/login 程式;
  10. 登入之後開始以 Shell 控管主機。
大概的流程就是上面寫的那個樣子啦,而每一個程序的內容主要是在幹嘛呢?底下就分別來談一談吧!

變換預設的登入模式
剛剛在上面說了登入主機的方式最少有六種,不過常使用的是 run-level 3 的文字介面模式與 run-level 5 的圖形介面模式!如果你在安裝的過程中選擇了文字介面登入,但是後來卻想以圖形介面登入系統,應該怎麼做?!簡單的很!就直接修改 /etc/inittab 這個檔案的內容即可!如何做呢?!以 vi 或者是其他的文書編輯軟體,進入 /etc/inittab 這個檔案,檔案的內容有點像這樣:
 
# Default runlevel. The runlevels used by Mandrake Linux are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

 
在上面的資料中,將 id:3:initdefault: 裡頭的 3 改成 5 ,那麼在下次的登入時就會變成是圖形介面囉!同理,要由圖形介面變成文字介面來登入時,也是將上面那行改成 3 即可!此外,不知道您有沒有經驗,在你的 Linux 主機當中, Linux 共提供了六 個終端機介面與 一 個圖形介面的登入點,你可以按下 『 Ctrl 』+ 『 Alt』 加上 『F1』 ~ 『F6』 功能鍵 來變換不同的文字介面登入點!至於圖形介面則僅使用於『 Ctrl + Alt + F7 』這一個喔!不過,如果你只想要提供四個文字介面呢?該如何是好?!呵呵!只要將上面的最後兩行刪掉,只剩下 1:2345:....至 4:2345:...,只剩下這四行然後重新開機之後,你的 F5 與 F6 功能鍵的作用就會消失囉!就這麼簡單啦!不過,需要注意的是,圖形介面只有一個,當你使用圖形介面登入時,那麼將直接進入 tty7 那一個圖形介面的登入螢幕喔!而當你在 tty1 輸入 startx 啟動 X-Windows 時,你的控制權將會跑到 tty7 (就是在 F7 功能鍵),此時,若您的 X-windows 掛了!那麼直接按下『 Ctrl + Alt + F1 』 回到 tty1 之後,直接刪除該 X-Windows 的程序即可關閉 X-Windows 囉!很不錯吧!

Lilo
好了,要開始來搞定 boot loader 囉!第一個介紹的事較老牌的 lilo 這個玩意兒!他算是最標準的 Linux boot loader 囉!目前我的幾部主機裡面,用的也大部分都是他呢!Lilo 的設定與安裝方面必需要分成兩個步驟,分別是設定 /etc/lilo.conf 這個設定檔,設定完畢之後,還必需要給他改寫進去 MBR 或者是 Super block 才行!
 

Grub
grub 是較新的 boot loader 程式,他具有相當多的優點,這裡不一一列舉啦!無論如何, lilo 能做的, grub 幾乎都可以做的到,包括選單、密碼、指向等等的功能!不過, grub 比 lilo 要先進的幾點是:
  1. 他可以讓您在開機的時候『自行編輯與修改開機設定項目』,有點像是 bash 的指令模式;
  2. 他可以自動『動態尋找設定檔』,亦即他可以依據 /boot/grub/menu.lst 的設定而改變其設定!因此,修改設定只要改 /boot/grub/menu.lst 即可,不需要再重新安裝 grub !
很棒吧!不過,在設定底下的工作之前,請先確認您的 grub 這個套件已經安裝上來來!如果還沒有安裝的話,那麼先查閱一下 RPM 的安裝方法再說!底下假設 grub 這個套件已經安裝在您的主機上囉!

可開機磁片與救援磁片製作
不論任何時候,製作可以開機的磁片與救援的磁片,都是一件很值得鼓勵的事情!這裡我們提供簡單的方式來讓您的磁片可以開機呦!
  
# 製作軟碟開機片:
[root @test root]# mkbootdisk --device /dev/fd0 `uname -r`
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press <Enter> to continue or ^C to abort:

# 製作救援磁片:
[root @test root]# mkrescue --device /dev/fd0

 
不過, mkrescue 比較麻煩的一點是,這個程式僅支援 lilo 這個 loader 的 image file ,所以如果剛剛您是使用 grub 來設定 MBR 的話,那麼 mkrescue 就無法動作了?

本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
2003/02/10:第一次完成