一 Linux的啟動流程分析
1 目前各大Linux發行版本的主流引導裝載程序使用的軟件為grub
2 簡單來說,系統啟動的過程如下:
1. 加載BIOS的硬件信息與自我測試,並依據設置取得第一個可啟動的設備
2. 讀取並執行第一個啟動設備內的MBR的boot Loader也就是一般的grub
3. 依據boot Loader的設置加載Kernel,Kernel會開始檢測硬件與加載驅動程序
4. 在硬件驅動成功後,Kernel會主動調用init進程,而init會取得run-level信息
5. init准備軟件執行的環境以及各個服務,最後等待用戶的登錄
3 引導裝載程序稱為Boot Loader,就在啟動設備的第一個扇區內,也就是我們一直說的MBR
4 為什麼我們推薦先安裝windows再安裝Linux呢?
原因是因為Linux具有控制權轉交的功能,而Windows是沒有的,因為在加載Boot Loader的時候windows只會加載它自己的(流氓啊,業界毒瘤)
5 假設我的MBR使用的是Linux的grub,那麼我們就有三種菜單了
1. 第一個菜單就是直接指向Linux的內核文件直接加載內核來啟動Linux
2. 第二個菜單就是將引導裝載控權交給windows,此時會加載windows的內核啟動windows
3. 使用Linux的boot sector內的引導裝載程序,此時就會跳出另一個grub的菜單
6 在內核加載完畢進行完畢硬件檢測與驅動加載後,此時我們的內核就會主動的調用第一個進程就是/sbin/init
7 運行級別
0: 系統直接關機
1: 單用戶維護模式,用在系統出問題時的維護
2: 類似運行級別3,但是沒有NFS服務
3: 完整含有網絡功能的純文本模式
4: 系統保留功能
5: 與運行級別3類似,但是加載了x window
6: 重新啟動
8 init的配置文件就是/etc/inittab
9 如果用戶有想要在系統啟動的時候進行的工作,可以直接寫在/etc/rc.d/rc.local,那麼該工作就會在啟動的時候自動被加載,而不必等我們登錄系統去啟動。
10 如果僅是暫時更改系統的運行級別,則使用init x切換到運行級別x
二 Boot Loader
1 boot Loader是載入內核的重要工具,沒有boot Loader的話那麼內核根本沒有辦法被系統加載
2 硬盤與分區在grub中的代號
1 第一塊查找的硬盤代號為(hd0),而該硬盤的一號分區為(hd0 , 0)
2 在grub裡面,它開始的數字是0而不是1,第一塊硬盤的第一個分區的grub的代號為(hd0 , 0), 第一塊硬盤的第一個邏輯分區的grub的代號為(hd0 , 4)
3 BIOS無法讀取大硬盤的問題
舉例來說,過去很多朋友經常會發現,系統使用DVD啟動安裝的時候,可以順利安裝好linux,但是第一次啟動時,屏幕只出現黑黑的一片,且出現grub>的字樣,而無法進入Linux系統,這是怎麼回事?
1 在安裝的過程中,由於是使用DVD或CD啟動,因此加載Linux內核不成問題,而內核會失去檢測系統硬件,因此可以識別BIOS識別不到的硬盤
2 但是進入硬盤啟動時,由於Kernel與initrd文件都是通過BIOS的INT3通道來讀取的,因此你的Kernel與initrd如果放置在BIOS無法判斷的扇區中,當然就無法被加載,而僅會出現grub>等待你的處理
三 重點內容
1 Linux不可隨意關機,否則容易造成文件系統錯亂或者其他無法啟動的問題
2 啟動流程主要是BIOS,MBR,Loader,Kernel+initrd,/sbin/init等流程
3 init的配置文件為/etc/initab,此文件可以設置默認的runlevel,系統初始化腳本,不同執行等級的服務
4 grub的配置文件與相關文件系統定義文件太多放置/boot/grub目錄中,配置文件名為menu.lst
5 若要進入救援模式,可於啟動菜單過程中,在kernel的選項後面加入"single"或者"init=/bin/bash"等方式來進入救援模式