CentOS6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

一、Linux內(nèi)核的組成

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),惠來企業(yè)網(wǎng)站建設(shè),惠來品牌網(wǎng)站建設(shè),網(wǎng)站定制,惠來網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,惠來網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。


Linux系統(tǒng)的組成部分:內(nèi)核+根文件系統(tǒng)

內(nèi)核:進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)、驅(qū)動(dòng)程序、安全功能(selinux)

IPC(Inter-Process Communication進(jìn)程間通信):就是指多個(gè)進(jìn)程之間相互通信,交換信息的方法。Linux IPC基本上都是從Unix平臺(tái)上繼承而來的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。

運(yùn)行中的系統(tǒng)環(huán)境可分為兩層:內(nèi)核空間、用戶空間;

內(nèi)核空間:內(nèi)核代碼(系統(tǒng)調(diào)用)

用戶空間:應(yīng)用程序(進(jìn)程或線程)

內(nèi)核設(shè)計(jì)流派:

單內(nèi)核設(shè)計(jì):把所有的功能集成于同一個(gè)程序;(Linux)

微內(nèi)核設(shè)計(jì):每種功能都使用一個(gè)單獨(dú)的子系統(tǒng)實(shí)現(xiàn);(Windows solarls)

Linux內(nèi)核特點(diǎn):

     (1)支持模塊化:.KO(kernel object)

     (2)支持模塊運(yùn)動(dòng)時(shí)動(dòng)態(tài)裝載或卸載

組成部分:

核心文件:/boot/Vmliuz-VERSION-release      

ramdirk:

CentOS5:/boot/initrd-VERSION-release.img

CentOS6,7:/boot/initramfs-VERSION-release.img

二、CentOS系統(tǒng)啟動(dòng)流程

總體啟動(dòng)順序:

POST(加點(diǎn)自檢)-->Boot Sequence(BIOS:基本輸入輸出系統(tǒng))-->BootLoader(MBR:主引導(dǎo)記錄)

-->Kernel(ramdisk)-->rootfs(根文件系統(tǒng))-->switchchroot-->/sbin/init/(運(yùn)行init前先讀取/etc/inittab /etc/init/*.conf)-->設(shè)定運(yùn)行級(jí)別-->系統(tǒng)初始化腳本-->關(guān)閉啟動(dòng)相應(yīng)服務(wù)-->啟動(dòng)終端 

各流程細(xì)化說明:

1、POST加電自檢  

主要是檢測硬件設(shè)別是否能正常的運(yùn)行,然而實(shí)現(xiàn)自檢功能主要是由鑲嵌在主板芯片(CMOS)上的BIOS(basic input output system)程序,檢測沒問題之后進(jìn)行硬件設(shè)備的初始化。   

2、Boot Sequence(啟動(dòng)管理程序):選擇啟動(dòng)順序加載MBR

Boot Sequence是一個(gè)程序它依賴于某個(gè)硬盤硬件。準(zhǔn)確的說是第一個(gè)硬盤扇區(qū)的MBR,從而按次序查找各引導(dǎo)設(shè)備。

3、MBR引導(dǎo),bootloader引導(dǎo)加載器,啟動(dòng)程序   

MBR(Master Boot Record):此記錄在0磁道1扇區(qū),總共為512字節(jié),前446字節(jié)為bootloder,后64字節(jié)為分區(qū)表信息,主分區(qū)加上擴(kuò)展分區(qū)不能大于四個(gè),最后2個(gè)字節(jié)為校驗(yàn)信息,為55AA。

這個(gè)界面就是大名鼎鼎的Grub了(學(xué)名叫統(tǒng)一資源引導(dǎo)器);

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

其對應(yīng)的目錄是boot目錄下grub文件

Grub(GRand Unified Bootloader)是統(tǒng)一資源引導(dǎo)器,也就是引導(dǎo)加載器;它的工作是提供一個(gè)菜單,允許用戶選擇要啟動(dòng)的系統(tǒng)或不同的內(nèi)核版本;把用戶選定的內(nèi)核裝載到RAM中的特定空間中,然后解壓、展開,而后把系統(tǒng)控制權(quán)移交給內(nèi)核。

4、kernel內(nèi)核實(shí)現(xiàn)  

kernel自身初始化,實(shí)現(xiàn)功能,借助ramdisk探測可識(shí)別的程序,以只讀方式掛載根文件系統(tǒng),運(yùn)行應(yīng)用程序:/sbin/init

initramfs-2.6.32-642.el6.x86_64.img

5、/sbin/init/管理用戶空間服務(wù)進(jìn)程     

讀inittab文件由它來設(shè)定運(yùn)行級(jí)別,進(jìn)行初始化腳本,關(guān)閉或啟動(dòng)相應(yīng)的程序,啟動(dòng)終端。  

自此整個(gè)系統(tǒng)啟動(dòng)結(jié)束

boot下的grub目錄下的相關(guān)文件說明: 

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成

device.map:存放的是內(nèi)核文件的根分區(qū)

menu.lis:為菜單列表,里面為可選擇的菜單列表,存放于stage2中。

stage:用于grub引導(dǎo)程序過大,所以分2段引導(dǎo),第一段存放在MBR中,第二段存放于內(nèi)核文件系統(tǒng)中,第一段引導(dǎo)完成后可以找到第二段。 但是,第二段是存放于內(nèi)核文件系統(tǒng)中的,此時(shí)還沒有格式化文件系統(tǒng),如何可以訪問到第二段的menu.lst,就需要借助于中間層stage1_5,有它來協(xié)助stage1段來訪問stage2階段。stage1_5通常位于stage1字段后的63個(gè)扇區(qū)由于stage2在內(nèi)存中存放可以使用的文件系統(tǒng)不確定,所以這就是有多個(gè)stage1_5 的原因。

Grub Legacy:分三階段

stage1:存放在MBR上,磁盤里

stage1_5:存放在磁盤MBR之后的扇區(qū),讓stage1中的bootloader能識(shí)別stage2所在的分區(qū)上的文件系統(tǒng);

注意:能看到啟動(dòng)菜單實(shí)際就已經(jīng)過了1.5階段了,進(jìn)入2階段

stage2:磁盤分區(qū)(/boot/grub/stage2)刪除系統(tǒng)無法啟動(dòng)

根據(jù)stage2階段文件定義內(nèi)容找grub.conf文件然后根據(jù)這個(gè)文件里定義的內(nèi)容找boot下的內(nèi)vmlinuz...與驅(qū)動(dòng)模塊initramfs...,至此由bootloader到grub然后由grub加載內(nèi)核文件與模塊系統(tǒng)引導(dǎo)啟動(dòng)

詳細(xì)說明:引導(dǎo)加載程序先讀取MBR上的gurb第一階段,由于MBR很小只有512字節(jié)采用grub這種方式引導(dǎo)程序,隨后讀取扇區(qū)中的stage1.5階段,讀取1.5階段以后從而就能驅(qū)動(dòng)第二階段stage2所在的磁盤分區(qū),stage2是存放在磁盤分區(qū)上的還包括了內(nèi)核文件及ramdisk等都在這個(gè)分區(qū)上存放的;這就是為什么通過Bootloader之grub就能夠加載內(nèi)核文件的原因。

注意:當(dāng)前硬件平臺(tái),主板BIOS必須能識(shí)別硬盤,然后BIOS才能加載硬盤中的Bootloader,磁盤中的Bootloader自身加載完以后,就能夠識(shí)別當(dāng)前主機(jī)上的硬盤設(shè)備了。

補(bǔ)充:硬盤設(shè)備能識(shí)別,并不代表硬盤上的文件系統(tǒng)能識(shí)別,因?yàn)槲募到y(tǒng)是額外附加的一層軟件組織的文件結(jié)構(gòu),所以要能夠?qū)右环N文件系統(tǒng),必須要用到文件系統(tǒng)驅(qū)動(dòng);對應(yīng)的應(yīng)用程序必須能識(shí)別和理解這樣的文件系統(tǒng)才可以,這種程序就稱為文件系統(tǒng)驅(qū)動(dòng);grub的1.5階段就是給gurb提供了文件系統(tǒng)驅(qū)動(dòng)的,從而就能夠訪問對應(yīng)的第二階段和內(nèi)核所在的分區(qū)了,這通常是一個(gè)基本磁盤分區(qū);所以grub第二階段以及內(nèi)核和ramdisk文件通常都會(huì)放在一個(gè)基本磁盤分區(qū)上;因?yàn)間rub驅(qū)動(dòng)不了邏輯卷這種高級(jí)接口。

stage2一般是掛載至/boot/grub/目錄下;grub也有自己的配置文件:/boot/grub/grub.conf且通常有個(gè)符號(hào)鏈接文件:/etc/grub.conf;

stage2的功用:

(1)提供菜單或交互式接口;

(2)能加載用戶選擇的內(nèi)核或操作系統(tǒng);

(3)為菜單通過了保護(hù)機(jī)制。

  /boot/grub/grub.conf配置文件詳解:

 

  [root@centos6 grub]# ll /etc/grub.conf(是個(gè)鏈接文件)

   # grub.conf generated by anaconda

   # Note that you do not have to rerun grub after making changes to this file

   # NOTICE:  You have a /boot partition.  This means that

   #          all kernel and initrd paths are relative to /boot/, eg.

   #          root (hd0,0)

   #          kernel /vmlinuz-version ro root=/dev/sda2

   #          initrd /initrd-[generic-]version.img

boot=/dev/sda

default=0 #設(shè)定默認(rèn)啟動(dòng)菜單項(xiàng),默認(rèn)為0開始

timeout=5 #指定菜單等待選擇的時(shí)長 

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #指定菜單的背景圖片的路徑,為xpm格式,采用gzip壓縮

hiddenmenu #是否影藏菜單

password [--md5] $1$JO0kw$z.qtBMH.KL4A6qZ7dK4N30 #菜單編輯認(rèn)證(全局認(rèn)證)

title CentOS 6 (2.6.32-642.el6.x86_64) #定義菜單項(xiàng)

root (hd0,0) #本次grub查找stage2及其kernel文件所在設(shè)備分區(qū),指定grub的根

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=240533cf-b37f-4460-974f-702bab867da5 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet #需要啟動(dòng)的內(nèi)核 

initrd /initramfs-2.6.32-642.el6.x86_64.img #內(nèi)核匹配的ramfs文件

進(jìn)入單用戶模式:

1)重啟按esc鍵選定grub菜單,然后輸入e進(jìn)入可選菜單  

2)光標(biāo)移動(dòng)到kernel ...那一行,再敲入“e”進(jìn)入命令行編輯

3)在選定的kernel那一行后面輸入  1 ,s  或者  single 

3)然后輸入b鍵重啟進(jìn)入單用戶模式

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

 6、根切換

 

在掛載根文件系統(tǒng)是為了避免內(nèi)核中有bug或操作過程中有bug導(dǎo)致根文件系統(tǒng)被損壞,先只讀掛載根文件系統(tǒng),加載完成后才讀寫掛載,完成整個(gè)掛載根文件系統(tǒng)后,直接去找/sbin/init程序,即開始運(yùn)行用戶空間的第一個(gè)程序。

用戶空間啟動(dòng)流程init

7、/sbin/init程序    

init程序主要依賴于配置文件:/etc/inittab,大體分為:設(shè)定默認(rèn)啟動(dòng)級(jí)別 --> 設(shè)定系統(tǒng)初始化腳本 --> 啟動(dòng)對應(yīng)級(jí)別的服務(wù) --> 打印各終端登錄界面(如果級(jí)別為3處理提供文本登錄界面,如果級(jí)別為5還提供圖形登錄界面)

8、設(shè)置默認(rèn)運(yùn)行級(jí)別

(1)運(yùn)行級(jí)別:為了系統(tǒng)的運(yùn)行或維護(hù)等目的而設(shè)定的機(jī)制

     0-6:共7個(gè)級(jí)別;

0:關(guān)機(jī),shutdown

1:單用戶模式(single user),root用戶,無須認(rèn)證,維護(hù)模式;

2:多用戶模式(multi user),會(huì)啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS,維護(hù)模式;

3:多用戶模式(multi user),完全功能模式,文本界面;

4:預(yù)留級(jí)別:目前無特別使用目的,但習(xí)慣以同3級(jí)別功能使用;

5:多用戶模式(multi user),完全功能模式,圖形界面;

6:重啟,reboot

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

讀取配置文件:/etc/inittab

(2)配置文件:

/etc/inittab定義了很多功能,每一行定義一種操作(action)以及與之對應(yīng)的process(僅適用于CentOS 5),一行就定義了init要執(zhí)行的任務(wù),甚至是一堆任務(wù),每一行的語法格式為: id:runlevels:action:process

id為一個(gè)任務(wù)的標(biāo)識(shí)符;

runlevels:在哪些運(yùn)行級(jí)別下啟動(dòng)此任務(wù);例:3,2345,也可為空表示所有級(jí)別;

action:在什么條件下啟動(dòng)此任務(wù);

wait:等待切換至此任務(wù)所在的級(jí)別時(shí)執(zhí)行一次(剛剛切換進(jìn)來時(shí));

respawn:一旦此任務(wù)終止時(shí),就自動(dòng)重啟;(如:登錄終端執(zhí)行l(wèi)ogout登出后會(huì)再次啟動(dòng))

initdefault:設(shè)定默認(rèn)允許級(jí)別;此時(shí)process省略為空;

sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;(CentOS 5,6都用到此腳本,CentOS 7是靠systemd完成的),在CentOS 6中僅保留此配置文件中設(shè)定啟動(dòng)運(yùn)行級(jí)別的功能。

process:具體任務(wù);通常為應(yīng)用程序,或腳本,或二進(jìn)制的程序,取決于自定義。

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

9、系統(tǒng)初始化腳本

系統(tǒng)初始化腳本:/etc/rc.d/rc.sysinit

(1)設(shè)置主機(jī)名;

(2)設(shè)置歡迎信息;

(3)激活udev和selinux;

(4)掛載/etc/fstab文件中定義的所有文件系統(tǒng);

(5)檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng);(重新掛載是指根文件檢測完之后)

(6)設(shè)置系統(tǒng)時(shí)鐘;

(7)根據(jù)/etc/sysctl.conf文件來設(shè)置內(nèi)核參數(shù);

(8)激活lvm即軟raid設(shè)備;

(9)激活swap設(shè)備;

(10)加載額外設(shè)備的驅(qū)動(dòng)程序;(內(nèi)核加載驅(qū)動(dòng)只加載根文件系統(tǒng)的)

(11)清理操作;

注意:在init配置文件:/etc/inittab中,有一行內(nèi)容是定義/etc/rc.d/rc.sysinit,此腳本文件是負(fù)責(zé)完成系統(tǒng)初始化的腳本文件。

10、關(guān)閉/啟動(dòng)對應(yīng)級(jí)別下的服務(wù)

腳本文件/etc/rc.d/rc作用為當(dāng)級(jí)別切換時(shí)啟動(dòng)或停止服務(wù);此腳本接受傳遞的參數(shù)給腳本中$runlevel變量然后,讀取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有文件,這些文件就是為什么開機(jī)啟動(dòng)后,有些服務(wù)會(huì)自動(dòng)啟動(dòng),有些服務(wù)沒有啟動(dòng)的原因。

K*:要停止的服務(wù),K##*,優(yōu)先級(jí),數(shù)字越小,越優(yōu)先關(guān)閉,依賴的服務(wù)先關(guān)閉,然后再關(guān)閉被依賴的。

S*:要啟動(dòng)的服務(wù),S##*,優(yōu)先級(jí),數(shù)字越小,越是優(yōu)先啟動(dòng),被依賴的服務(wù)先啟動(dòng),而依賴的服務(wù)后啟動(dòng)。

/etc/rc.d/init.d目錄還有個(gè)鏈接目錄為/etc/init.d目錄,這兩目錄下文件相同。

CentOS 6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。

11、啟動(dòng)終端(圖形終端)

操作系統(tǒng)啟動(dòng)完成

三、系統(tǒng)啟動(dòng)流程總結(jié)

內(nèi)核級(jí)別:

1.POST做開機(jī)啟動(dòng)時(shí)候的硬件檢測功能

2.BootSequence(BIOS)啟動(dòng)加載主引導(dǎo)分區(qū)MBR中的引導(dǎo)加載器程序BootLoader

在LInux現(xiàn)行的BootLoader是三段劃分(打破446字節(jié)限制)的GRUB程序,

第1段寫在BootLoader中

第1.5段在其后扇區(qū)用于文件系統(tǒng)的引導(dǎo)

第2段在boot/grub中提供內(nèi)部接口和調(diào)用系統(tǒng)內(nèi)核kernel

3.Kernel識(shí)別硬件、加載驅(qū)動(dòng)、只讀掛載根文件系統(tǒng)、同時(shí)交付給用戶空間第一個(gè)程序/sbin/init

此處特別要注意,系統(tǒng)發(fā)行商為了適應(yīng)多種硬件接口驅(qū)動(dòng)調(diào)用,會(huì)在第一次安裝系統(tǒng)時(shí)候,自動(dòng)識(shí)別硬件接口,并調(diào)用唯一驅(qū)動(dòng)程序來生成ramdisk文件,以內(nèi)存當(dāng)磁盤做虛根,驅(qū)動(dòng)接手后會(huì)切換到真實(shí)的根文件系統(tǒng)上

CentOS 5系列是initrd,當(dāng)磁盤映像文件會(huì)造成二次緩存緩沖

CentOS 6/7系列改進(jìn)為initramfs,以文件系統(tǒng)形式可以不二次占用緩存和緩沖

用戶空間級(jí)別

4./sbin/init接管后更新其配置文件來初始化

5.根據(jù)/sbin/init中的配置會(huì)設(shè)置默認(rèn)運(yùn)行級(jí)別,以及一些在/etc/init.d/設(shè)置的開機(jī)服務(wù)

6./etc/rc.d/rc.sysinit運(yùn)行系統(tǒng)初始化腳本,完成系統(tǒng)初始化

7.關(guān)閉對應(yīng)級(jí)別下需要停止的服務(wù),啟動(dòng)對應(yīng)級(jí)別下需要開啟的服務(wù)

8.設(shè)置登錄終端,至此啟動(dòng)結(jié)束。

網(wǎng)站標(biāo)題:CentOS6系統(tǒng)啟動(dòng)流程細(xì)微解讀,不可忽略引導(dǎo)扇區(qū)的1.5階段。
網(wǎng)頁路徑:http://muchs.cn/article16/jchogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、ChatGPT軟件開發(fā)、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)