Linux系統--Linux的啓動過程

Linux系統--Linux啓動過程

CentOS 啓動流程:

POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別 -->  運行統初始化腳本 --> 關閉或啓動對應級別下的服務 --> 啓動終端

        wKiom1YID_nghuj2AAHTbzpn6Oc687.jpg

        wKioL1YIEB_CrcZsAAGqa-6OLWI571.jpg

1.POST:加電自檢,檢查外圍設備是否能正常啓動。

2.Boot Sequence(Bios):按一定次序查找引導設備,第一次有引導程序的設備即爲本次啓動用到的設備,不管系統能不能正常啓動。

3.BootLoaderMBR):

MBR:主引導記錄,有512個字節組成,前446字節是bootloader64字節的分區表信息,還有2字節的Magical Number

BootLoader:引導加載器,是一個程序。在Windows上使用的是ntloaderLinux上有兩種:LILOLInux Loader)和Grub (GRand Unified Bootloader)

功能:提供一個菜單,允許用戶選擇要啓動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓,展開,並把控制權交給內核:

4.kernelramdisk):內核初始化:

探測可識別到的所有硬件設備,加載硬件驅動程序(此時可能會藉助於ramdisk加載驅動)已讀的方式掛在文件系統;運行進程的第一個應用程序:/sbin/init

ramdisk:本地迴環設備文件,把本地文件模擬磁盤或文件系統使用

CentOS 5:/boot/initrd-VERSION-release.img

CentOS 6:/boot/initramfs-VERSION-release.img

initrd 是一個被壓縮過的小型根目錄,這個目錄中包含了啓動階段中必須的驅動模塊,可執行文件和啓動腳本。當系統啓動時,bootloader會把initrd文件讀取到內存中,然後把initrd文件在內存中起始地址和大小傳遞給內核。內核在啓動初始化過程中會解壓縮initrd文件,然後將解壓後的initrd掛載爲根目錄,然後執行根目錄下的/linuxrc腳本,就可以在這個腳本中加載真實文件系統存放的設備驅動程序以及在/dev目錄下建立必要的設備結點。這樣就可以mount真正的根目錄,並且換到根目錄中。

5.啓動init程序:

加載完內核之後會啓動Linux第一個應用程序/sbin/init。在CentOS5,6,7init的程序類型是不相同的。

CentOS5上:是SysV init,配置文件爲:/etc/inittab

CentOS6上:是Upstart init,配置文件爲:/etc/inittab, /etc/init/*.conf

CentOS7上:Systemd,配置文件爲:/usr/lib/systemd/system,/etc/systemd/system

CentOS 5上的/sbin/init :

啓動第一個init程序會讀取init的配置文件/etc/inittab,並依據此文件來進行初始化工作。/etc/inittab文件主要作用是指定運行級別,執行系統初始化腳本(/etc/rc.d/rc.sysinit,啓動相應運行級別下的服務和啓動終端。

(1)Linux的運行級別有7級別:0-6

0:關機

1:單用戶模式root,不需要登錄在此級別下可以修改管理員用戶密碼,維護模式

2:多用戶模式,會啓動網絡功能,但不會啓動NFS;維護模式

3:多用戶模式,正常模式;文本界面

4:預留級別:可同3級別;

5:多用戶模式,正常模式,圖形界面

6:重啓

級別的切換:init #

查看運行級別:runlevel 和 who -r

(2)配置文件:/etc/inittab文件內容的格式和各字段的含義:

/etc/inittab文件中每一行定義一種action和與之對應的process,用冒號隔開如:

id:runlevel:action:process

其中action常用的種類有:

wait:切換至某級別運行一次process

respawn:此process終止的話,就重新啓動之

initdefault:設置默認運行級別的,process省略

sysinit:設定系統初始化方式,此處一般指定爲:/etc/rc.d/rc.sysinit

id:3:initdefault

si::sysinit:/etc/rc.d/rc.sysinit

10:0:wait:/etc/rc.d/rc 0

11:1:wait:/etc/rc.d/rc 1

12:2:wait:/etc/rc.d/rc 2

...

16:6:wait:/etc/rc.d/rc 6

tty1:2345:respawn:/usr/sbin/mingetty tty1

tty2:2345:respawn:/usr/sbin/mingetty tty2

其中rc 2表示要讀取/etc/rc.d/rc2.d目錄下的所有文件,並啓動相應的服務。

/etc/rc.d/目錄下定義着不同運行級別服務啓動腳本所在目錄如:rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d 。這些目錄下的文件都是以KS開頭的文件,格式:K{Number}{ServerName}

其中以S開頭的文件向腳本傳遞start參數服務腳本會在開機時運行此腳本(必須設定開機自啓動的情況下),K開始的文件向腳本傳遞stop參數切換此級別時會關閉服務。

K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常爲依賴到別的服務;

S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常爲被依賴到的服務

chkconfig命令:用來查看,添加和刪除服務

查看服務在所有級別的啓動或關閉設定情形:

chkconfig [--list] [name]

添加服務:在添加時,Server的服務腳本放置在/etc/rc.d/init.d或/etc/init.d/目錄下的。其實在/etc/rc.d/rcX.d/目錄的以S和K開頭的文件都是連接至此的鏈接文件。添加服務命令:

chkconfig --add name

其中服務腳本文件中必須有以下一行:

# chkconfig: LLLL SS KK

LLLL表示運行的級別,就是服務在哪些級別下是啓動的。省略表示2345級別

SS:表示服務運行的次序

KK:表示服務關閉的次序

刪除服務:

# chkconfig --del name

正常級別下,最後啓動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中;

mingettylogin程序,啓動終端程序

 

(3)文件/etc/rc.d/rc.sysinit的作用有:

(1) 設置主機名;

(2) 設置歡迎信息;

(3) 激活udevselinux; 

(4) 掛載/etc/fstab文件中定義的文件系統;

(5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統;

(6) 設置系統時鐘;

(7) 激活swap設備;

(8) 根據/etc/sysctl.conf文件設置內核參數;

(9) 激活lvmsoftware raid設備;

(10) 加載額外設備的驅動程序;

            (11) 清理操作;

CentOS6上的/init/會讀取配置文件/etc/inittab 和 /etc/init/*.conf,文件/etc/inittab設定系統啓動的默認級別,而/etc/init目錄下所有以.conf結尾的文件是進行執行系統初始化腳本,啓動相應運行級別下的服務和啓動終端。如以下文件:

        wKiom1YIEveiOx1jAADXRtTwM70438.jpg

6.到啓動終端之後,提供用戶登錄界面,Linux的啓動過程結束。


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