順序 | 名稱 |
1 | 載入 BIOS ,硬體裝置的初始化 |
2 | 讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊 |
3 | 載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置 |
4 | Kernel 執行 init 程式 (/etc/inittab) |
5 | init 執行 /etc/rc.d/rc.sysinit 檔案 (red hat) |
6 | init 執行 run-level 的各個批次檔( Scripts ) |
7 | init 執行 /etc/rc.d/rc.local 檔案 |
8 | 執行 /bin/login 程式,並等待使用者登入 |
9 | 登入之後開始以 Shell 控管主機 |
1~2
當 BIOS 完成硬體初始化後接手的系統軟體是 boot loader。Linux 系統常用的 boot loader 為 LILO 與 GRUB,他們不僅能將 Linux 核心映像檔載入記憶體,還可以傳遞核心參數 (kernel parameter)給 Linux 核心,就像 shell 啟動程式時,指定命令列選項那樣。
GRUB 可以讓你在啟動 Linux 之前,編輯要傳給核心的參數。你只要在 GRUB 顯示開機選單時,先選定所要啟動的核心,然後按下 e 鍵 ( edit ) 來編輯該核心的命令,最後按下 b 鍵 ( boot ) 來開機。
3
這是將核心載入記憶體的一個過程,當核心載入記憶體後,會顯示一些訊息至主控台 (system console) 上,如核心版本,核心是在哪種機器上,以何種編譯器所編譯等,並開始逐一驅動硬體。
在核心載入同時,initrd (initial Ram Disk) 也會被載入,即 /boot 分割區中的 initrd.img-2.6.20-16-generic 檔案,由於此時尚未掛載任何檔案系統,無法取得硬碟中的驅動程式,而此檔包含開機所需的驅動程式,在此時與核心映像檔一起載入記憶體。
4~5
/sbin/init 是開機初始化程式,能幫助使用者調整開機程序的配置與環境的設定。當它一旦啟動,自動會變成系統中所有行程 (Process) 的父行程或祖父行程,故它的 PID 為 1。
在初始化設定周邊後裝置後,核心就會執行 /sbin/init 程式,其所做的任何事都由 /etc/inittab 所控制,其中包含執行層級 (runlevel) 。
在 red hat 中,/sbin/init 的第一個動作通常是執行 /etc/rc.d/rc.sysinit ,這個 script 能設定環境路徑、starts swap、檢測檔案系統,並執行其它所有系統初始化所需的步驟。舉例來說每個系統都擁有一個時間,rc.sysinit 能讀取 /etc/sysconfig/clock 設定檔並啟始硬體時間。
6-7
runlevel 是一個用來指定目前系統狀態的數字或字母。例如,當系統的 runlevel 變成 3 時,所有在 /etc/inittab 中,runlevel 欄位包含 3 的項目都會被執行。在 red hat 中每一層級的 Script 檔都被存放在 /etc/rc.d/rc[x].d/ 中,其中 [x] 即為runlevel,目錄中可以看見很多檔案,多以 Snnxxxx 或 Knnxxx 命名,其中 nn 為 00 至 99 的數字,數字較小的 Script 會先執行,你會發現一個 S99rc.local 的檔案,沒錯它就是最後一個被執行的 Script,也就是第 7 個步驟。
8-9
登入
如何回顧開機訊息
開機期間顯示的訊息往往捲動過快難以閱讀,當管理者需要回頭檢閱這些訊息時該怎麼辦只要使用 dmesg 命令變可重現最近一次的開機訊息,而 /var/log/dmesg 也會記錄這筆訊息。
bang@linuxdiary:~$ dmesg | less
[ 0.000000] Linux version 2.6.20-16-generic (root@king) (gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)) #2 SMP Thu Aug 30 23:16:15 UTC 2007 (Ubuntu 2.6.20-16.31-generic)
[ 0.000000] Command line: root=UUID=404fb0f7-4a3d-4124-9b0f-c28dd9325da7 ro quiet splash
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
[ 0.000000] BIOS-e820: 000000003fff0000 - 000000003fff3000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000003fff3000 - 0000000040000000 (ACPI data)
[ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
略...
bang@linuxdiary:~$ less /var/log/dmesg
[ 0.000000] Linux version 2.6.20-16-generic (root@king) (gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)) #2 SMP Thu Aug 30 23:16:15 UTC 2007 (Ubuntu 2.6.20-16.31-generic)
略...
注意:
ubuntu 預設不使用 /etc/inittab 來做開機管理,而是使用 upstart,而 debian 也實驗性的引進 upstart,目前還在研究他的使用方式。
沒有留言:
張貼留言