本文主要記錄下linux的引導(dǎo)流程(實(shí)例采用centOS 5.5)。
內(nèi)容主要如下:引導(dǎo)流程、解析下GRUB的作用。
?
一、引導(dǎo)流程
?
1.1主要的流程圖如下:
?
?
1.2每一步的作用
1)第一步firmware固件自檢,主要是進(jìn)行CMOS/BIOS對硬件進(jìn)行POST加電自檢,在物理層次上對硬件進(jìn)行檢測是否正常。
2)讀取硬盤中MBR的BootLoader(自啟動程序,Linux下常用的自啟動程序是GRUB)。這一步主要的功能是載入內(nèi)核。
3)載入的內(nèi)核Kernel主要功能是:1、驅(qū)動硬件(Kernel中含有大量驅(qū)動程序),2、啟動init進(jìn)程。
4)init進(jìn)程,主要是讀取/etc/inittab文件,執(zhí)行缺省運(yùn)行級別,從而繼續(xù)引導(dǎo)。(需要注意的是它的PID恒為1,0為內(nèi)核調(diào)度器Kernel scheduler)。
5)/etc/inittab 定義了初始化的操作。 ?
內(nèi)容如下:
命令主要格式是:id : runlevels : action : process
[解析]
id :標(biāo)識符,一般為兩位字或數(shù)字
run-levels :指定運(yùn)行級別,可以指定多個
action :指定運(yùn)行狀態(tài)
process :指定要運(yùn)行的腳本或命令
其中,
1、run-levels運(yùn)行級別有7個,0—6分別如下:
0 —— halt 關(guān)機(jī)
1 —— Single user mode 單用戶模式
2 —— Multiuser,withoutNFS 多用戶模式但不帶網(wǎng)絡(luò)(text模式)
3 —— Full multiuser mode 完整功能的多用戶模式(text模式)
4 —— unused 預(yù)留
5 —— X11 圖形化多用戶模式
6 —— reboot 重啟
主要命令:查看當(dāng)前運(yùn)行級別 #runlevel、 切換運(yùn)行級別 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有幾個比較重要的取值:
① initdefault:指定系統(tǒng)缺省啟動的運(yùn)行級別(通常用于修復(fù),比如我們要進(jìn)入單用戶模式,則可以將其設(shè)置為1)
( 由截圖中可以知道缺省的run-level是:3)
② sysinit:系統(tǒng)啟動執(zhí)行process中指定的命令(每次都會執(zhí)行)
(由截圖知,無論是哪個運(yùn)行級別,都會執(zhí)行/etc/rc.d/rc.sysinit)
③ wait:執(zhí)行process中指定的命令,并等其結(jié)束后再運(yùn)行其他命令
④ once:執(zhí)行process中指定的命令,不等待其結(jié)束
⑤ ctrlaltdel:按下Ctrl + Alt + Del時執(zhí)行process指定的命令
6)initdefault
如第五步所說到的,主要是讀取/etc/inittab中的信息,判斷缺省的運(yùn)行級別是什么。
7)/etc/rc.d/rc.sysinit
啟動這個腳本。完成系統(tǒng)服務(wù)程序的啟動,如系統(tǒng)環(huán)境變量的設(shè)置、設(shè)置系統(tǒng)時鐘、加載字體、檢查加載文件系統(tǒng)、生成系統(tǒng)啟動信息日志文件等。(由于是基礎(chǔ)服務(wù),如截圖所示,默認(rèn)是將其run-level設(shè)置為空::即任何級別,action設(shè)置為sysinit。即該腳本在任何運(yùn)行級別下都要啟動,以完成基礎(chǔ)服務(wù)的啟動)【可以自定義自己希望啟動的腳本,然后加到這個腳本的最后面,便會在啟動時被加載】
8)基礎(chǔ)服務(wù)啟動后,會執(zhí)行/etc/rc.d/rc這個腳本
加載完基礎(chǔ)服務(wù)后,就要根據(jù)不同的運(yùn)行級別去啟動相對應(yīng)的下的目錄,(如3是命令行模式,5是圖形模式,他們需要啟動的服務(wù)不同),但系統(tǒng)如何去加載呢?這就是rc這個腳本的作用了,它的工作原理是先去判斷系統(tǒng)的默認(rèn)運(yùn)行級別即第6步中的東西,然后再執(zhí)行相應(yīng)的rcN.d目錄下的服務(wù)啟動腳本 如圖
?
9)執(zhí)行/etc/rc.d/rcN.d目錄下的服務(wù)啟動腳本
看下該目錄下有什么東西:
[解析]
S —— start表示要啟動的腳本
K —— kill 表示要關(guān)閉的腳本
數(shù)字表示啟動順序,數(shù)值小的優(yōu)先
?
1.3自定義服務(wù)啟動或關(guān)閉
1)關(guān)鍵目錄 /etc/rc.d/init.d/ 下,找到相關(guān)的服務(wù)再對其進(jìn)行關(guān)閉或啟動(所以運(yùn)行級別的腳本都是來自這個目錄的軟鏈接)。
通過服務(wù)腳本名 start |stop等操作去啟動或關(guān)閉服務(wù)
2)自定義服務(wù)并啟動
實(shí)際上,無論是哪個運(yùn)行級別,他們要啟動的腳本都位于/etc/rc.d/init.d這個目錄中,而啟動的時候相對應(yīng)的/etc/rc.d/rcN.d目錄中的腳本只是一個軟鏈接,指向的還是init.d這個目錄中的腳本
如圖:rc3.d目錄中的內(nèi)容,可以看到都是軟鏈接(概念類似引用)
?
了解了上面的原理后,我們就可以定義我們自己的服務(wù)腳本,并讓系統(tǒng)在引導(dǎo)的時候加載我們的腳本。
方式有以下幾種:
1、增加軟鏈接 #ln -s
例子:
先寫好一個腳本,再用 ln –s 腳本名 /etc/rc.d/rcN.d/Sxx腳本名
這樣系統(tǒng)就會在引導(dǎo)運(yùn)行級別N時就會加載這個腳本
如:ln? –s? /etc/rc.d/init.d/xx.script? /etc/rc.d/rc3.d/S100xx.script
這樣系統(tǒng)就會在運(yùn)行級別3時加載我們的xx.script這個服務(wù)。(注意腳本放在init.d目錄中,并且軟鏈接的名字要用S開頭)
2、使用 chkconfig
3、使用 ntsysv (圖形界面選擇)
用ntsysv –-level N進(jìn)入對于相應(yīng)運(yùn)行級別服務(wù)的啟動設(shè)置
通過空格選擇啟動或否(*表示啟動),上下方向鍵選擇
?
1.4小結(jié)
大概的引導(dǎo)流程就是以上的幾步了。
最后說下如何查看引導(dǎo)日志,主要有兩種方式
1、# dmesg
記錄了內(nèi)核kernel驅(qū)動硬件的信息
如查詢下硬盤eth0的信息:
?
2、查看 /var/log/messages的日志信息
記錄了服務(wù)的啟動信息
如查看ntpd的啟動情況
?
?
?
?
二、GRUB解析及應(yīng)用
了解了基本的引導(dǎo)流程,我們再來著重看下流程中最重要的自啟動程序BootLoader,Linux常用的是GRUB。
2.1GRUB的配置與運(yùn)用
GRUB的配置文件默認(rèn)位置 /boot/grub/grub.conf (即GRUB它的 實(shí)際位置在/boot 下)
他有個軟鏈接是 在/etc/grub.conf
先看下grub.conf
[解析]
default 定義缺省啟動系統(tǒng)(多系統(tǒng)的時候會用到)
timeout 定義缺省等待時間
splashimage 定義GRUB界面圖片
hiddenmenu 隱藏菜單
title 定義菜單項(xiàng)名稱
root 設(shè)置GRUB的根設(shè)備
kernerl 定義內(nèi)核文件所在位置 ro —只讀
initrd 定義加載鏡像文件
其中root中 (hd0,0) hd為硬盤類型 0為第一塊硬盤 ,0為第一個分區(qū)
這個實(shí)際上是指定了 /boot所在的硬盤分區(qū)
可以看下/boot目錄
?
2.2列子
2.2.1進(jìn)入單用戶模式
適合場合:忘記root密碼、修復(fù)系統(tǒng)
方法:
1、在啟動倒數(shù)的時候按ESC進(jìn)入GRUB操作界面
e ——編輯當(dāng)前的啟動菜單項(xiàng)
b ——啟動當(dāng)前的菜單項(xiàng)
d ——刪除當(dāng)前行
c ——進(jìn)入GRUB的命令行模式
Esc ——返回GRUB啟動菜單界面,取消對當(dāng)前所做的修改
2、按e進(jìn)入,再選kernerl按e去編輯kernerl項(xiàng)
3、在最后加" 1"(空格 1),即運(yùn)行級別1的單用戶模式
4、按回車確定,再按B重啟,便可以進(jìn)入當(dāng)用戶模式
?
在單用戶模式下,可以對root密碼進(jìn)行重置(命令 #passwd root)
同時可以做其他需要修復(fù)的操作。
?
?
?
三、總結(jié)
主要是掌握好系統(tǒng)的引導(dǎo)流程,明白在啟動的時候系統(tǒng)的每一步在干什么,這樣當(dāng)系統(tǒng)出現(xiàn)問題了,我們就可以判斷出是在哪一步出現(xiàn)了問題。這樣才能在尋找解決方案的時候有的放矢,縮小范圍。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
