linux系統啓動流程

首先要說一下這部分內容,只是幫助大家瞭解

Linux

系統的啓動

流程,這樣當

Linux

系統在啓動過程

中遇到故障,我們可以很清楚到底是在哪一步遇到問題,然後我們就可以針對性地去排查故障。先來一張

圖幫助大家理解啓動流程爲了更好地體驗大家可以在線觀看

http://www.apelearn.com/study_v2/boot.jpg

第一階段,硬件引導啓動。首先是

BIOS

加電自檢,

BIOS

找啓動介質,是硬盤還是光盤或者其他啓動

介質,然後再啓動介質中找到

MBR

M

BR

是啓動介質(比如硬盤)的第一個分區的第一個扇區,大小爲

22

512

字節。其中前面

446

字節是

bootloader

CentOS

安裝的時候會安裝一個

grub

程序在這裏),緊接着的

64

字節是分區表,最後面

2

字節是用來校驗的,我們把它叫做

55AA

第二階段,

grub

啓動引導程序。既然找到了

MBR

,那麼就找到了

grub

,它就是一個引導程序,它會

幫我們引導我們想啓動的系統,

grub

引導分爲兩個階段執行

stage1

stage2

stage1

是直接在

MBR

中的,

也就是那前面

446

字節裏面,而

stage2

比較大不能放到

M

BR

裏,所以只能放到文件系統裏,按理說

stage1

執行後就直接調用

stage2

了。但對於目前較新的文件系統(比如

ext4

)來說,

stage2

是不能識別到的,所

以還得藉助於一箇中間橋樑

stage1_5

來識別

stage2

所在的文件系統。當

stage2

被執行後,它就會去解析配

置文件

/boot/grub/grub.conf

,在該配置文件中它又找到了內核和內核映像

(initrd

)的位置。

第三階段內核引導階段。內核和內核映像(

initrd

)找到了,所以內核接管控制權。按理說內核能夠識

別到幾乎所有的硬件設備,但實際上內

核的身材是非常小的,它只含有最基本的硬件驅動,而其他有常見

硬件驅動是在

initrd

中的。所以在這一階段,

initrd

先釋放到內存中,臨時構成一個只讀的文件系統,在這

個只讀的文件系統中,內核去執行臨時文件系統裏面的

init

進程,目的是加載各種硬件的驅動。當所需的

驅動加載完後,內核再次掛載真正的根文件系統,內核把控制器教給了

/sbin/init

進程。

第四階段系統初始化階段。

/sbin/init

進程是系統其他所有進程的父進程,當它接管了系統的控制權先

之後,它首先會去讀取

/etc/inittab

文件來執行相應的腳

本進行系統初始化,如設置鍵盤、字體,裝載模塊,

設置網絡等。主要包括以下工作:

1)

執行系統初始化腳本

(/etc/rc.d/rc.sysinit)

,對系統進行基本的配置,以讀寫方式掛載根文件系統及其

它文件系統,到此係統算是基本運行起來了,後面需要進行運行級別的確定及相應服務的啓動。

rc.sysinit

所做的事情

(

不同的

Linux

發行版,該文件可能有些差異

)

如下:

1

)獲取網絡環境與主機類型。首先會讀取網絡環境設置文件

"/etc/sysconfig/network"

,獲取主機名

稱與默認網關等網絡環境。

2

)測試與載入內存設備

/proc

usb

設備

/sys

。除了

/proc

外,系統會主動檢測是否有

usb

設備,並

主動加載

usb

驅動,嘗試載入

usb

文件系統。

3

)決定是否啓動

SELinux

4

)接口設備的檢測與即插即用(

pnp

)參數的測試。

5

)用戶自定義模塊的加載。用戶可以再

"/etc/sysconfig/modules/*.modules"

加入自定義的模塊,此時

會加載到系統中。

23

6

)加載核心的相關設置。按

"/etc/sysctl.conf"

這個文件的設置值配置功能。

7

)設置系統時間(

clock

)。

8

)設置終端的控制檯的字形。

9

)設置

raid

LVM

等硬盤功能。

10

)以方式查看檢驗磁盤文件系統。

11

)進行磁盤配額

quota

的轉換。

12

)重新以讀取模式載入系統磁盤。

13

)啓動

quota

功能。

14

)啓動系統隨機數設備(產生隨機數功能)。

15

)清楚啓動過程中的臨時文件。

16

)將啓動信息加載到

"/var/log/dmesg"

文件中。

/etc/rc.d/rc.sysinit

執行完後,系統就可以順利工作了,只是還需要啓動系統所需要的各種服務,這

樣主機纔可以提供相關的網絡和

主機功能,因此便會執行下面的腳本。

2)

執行

/etc/rc.d/rc

腳本。該文件定義了服務啓動的順序是先

K

S

,而具體的每個運行級別的服務狀

態是放在

/etc/rc.d/rc*.d

*=0~6

)目錄下,所有的文件均是指向

/etc/init.d

下相應文件的符號鏈接。

rc.sysinit

通過分析

/etc/inittab

文件來確定系統的啓動級別,然後纔去執行

/etc/rc.d/rc*.d

下的文件。

/etc/init.d

-

> /etc/rc.d/init.d

/etc/rc

-

>/etc/rc.d/rc

/etc

/rc*.d

-

>/etc/rc.d/rc*.d

/etc/rc.local

-

> /etc/rc.d/rc.local

/etc/rc.sysinit

-

> /etc/rc.d/rc.sysinit

也就是說,

/etc

目錄下的

init.d

rc

rc*.d

rc.local

rc.sysinit

均是指向

/etc/rc.d

目錄下相應文件和文

件夾的符號鏈接。我們以啓動級別

3

爲例來簡要說明一下。

24

/etc/rc.d/rc3.d

目錄,該目錄下的內容全部都是以

S

K

開頭的鏈接文件,都鏈接到

"/etc/rc.d/init

.d"

錄下的各種

shell

腳本。

S

表示的是啓動時需要

start

的服務內容,

K

表示關機時需要關閉的服務內容。

/etc/rc.d/rc*.d

中的系統服務會在系統後臺啓動,如果要對某個運行級別中的服務進行更具體的定製,通過

chkconfig

命令來操作,或者通過

setup

ntsys

system

-

config

-

services

來進行定製。如果我們需要自己增加

啓動的內容,可以在

init.d

目錄中增加相關的

shell

腳本,然後在

rc*.d

目錄中建立鏈接文件指向該

shell

本。這些

shell

腳本的啓動或結束順序是由

S

K

字母后面的數字決定,數字越小的腳本越先執行。例如,

/etc/rc.d/rc3.d /S01sysstat

就比

/etc/rc.d/rc3.d /S99local

先執行。

3)

執行用戶自定義引導程序

/etc/rc.d/rc.local

。其實當執行

/etc/rc.d/rc3.d/S99local

時,它就是在執行

/etc/rc.d/rc.local

S99local

是指向

rc.local

的符號鏈接。就是一般來說,自定義的程序不需要執行上面所說

的繁瑣

建立

shell

增加鏈接文件的步驟,只需要將命令放在

rc.l

ocal

裏面就可以了,這個

shell

腳本就是保

留給用戶自定義啓動內容的。

4)

完成了系統所有的啓動任務後,

linux

會啓動終端或

X

-

Window

來等待用戶登錄。

tty1,tty2,tty3...

表示在運行等級

1

2

3

4

的時候,都會執行

"/sbin/mingetty"

,而且執行了

6

個,所以

linux

會有

6

個純

文本終端,

mingetty

就是啓動終端的命令。

除了這

6

個之外還會執行

"/etc/X11/prefdm

-

nodaemon"

這個主要啓動

X

-

Window

。至此,系統就啓動完

畢了

wKioL1kYYUfTtgpxAALNxztcRw4258.jpg-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章