第一步:POST 加電自檢(Powered On Self-Test)
通過主板上集成RAM中的BIOS程序實現POST
主板上的ROM:CMOS:主板上的一塊可讀寫的並行或串行FLASH芯片,是用來保存BIOS的硬件配置和用戶對某些參數的設定。(BIOS設置程序一般都被廠商整合在芯片中,因此BIOS設置有時也被叫做CMOS設置。)
BIOS:Basic Input and Output System
通過BIOS可以設置按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備.
第二步:加載運行bootloader
bootloader:引導加載器(程序)
Windows中使用的bootloader是:ntloader
Linux:LILO(LIinux LOader)
GRUB:Grand Uniform Bootloader
GRUB 0.X:Grub Legacy(CentOS 6中使用)
GRUB 1.X:Grub2(CentOS 7中使用)
功能:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本; 把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而後把系統控制權移交給內核.
ext系列及GPT系列的文件系統的bootloader都在MBR中的前446個字節,MBR為該磁盤的第一個扇區(1st stage),共512字節。
MBR:Master Boot Record
前446bytes:bootloader
然後64bytes:fat (GPT文件系統中不同)
2bytes:55AA (分區表有效性標識)
加載運行GRUB共可分為三步
1st stage:
Partition:filesystem driver, 1.5 stage
Partition:/boot/grub, 2nd stage
GRUB運行詳細過程可以查看我的另一篇博客:
第三步:加載內核
1,內核加載完成後自身初始化
2,探測可識別到的所有硬件設備;
3,加載硬件驅動程序;(有可能會借助於ramdisk加載驅動,ramdisk文件需要和內核放在同一分區,如果需要用到,需要在前一步grub中指定其位置,如果內核編譯時已經將硬件設備的驅動程序編譯進內核了,就不需要ramdisk了)
注:有關ramdisk可以查看我的另一篇博客:
第四步:以只讀方式掛載根文件系統
第五步:切換根(switchroot)
第六步:運行用戶空間的第一個應用程序:/sbin/init,實現系統初始化,然後設置系統運行級別。
/sbin/init/通過它的配置文件定義了其運行的流程
配置文件:/etc/inittab和/etc/init/目錄下所有以.conf結尾的文件。
/etc/inittab:僅被用於定義默認運行級別(CentOS 6中)
注意:在CentOS 5中此文件不是僅用於定義系統默認運行級別。還用於定義其系統初始化及之後的流程
例如:id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit(設定系統初始化方式)
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1(等到運行級別為1時啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務)
…………
l6:6:wait:/etc/rc.d/rc6
具體請查看CentOS 5系列中的配置文件/etc/inittab
此配置文件設置方式:
每行定義一種action以及與之對應的process
格式 id:runlevels:action:process (共四個字段,以:隔開)
第一個字段:id:一個任務的標識符;
第二個字段:runlevels:在哪些級別啟動此任務;#,###,也可以為空,表示所有級別;
第三個字段:action:在什麼條件下啟動此任務;
第四個字段:process:任務;
action種類:
wait:等待切換至此任務所在的級別時執行一次;
respawn:一旦此任務終止,就自動重新啟動之;
initdefault:設定默認運行級別;此時,process省略;
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;
/etc/init/目錄下所有以.conf結尾的文件 :定義系統初始化及之後的流程
運行流程:
首先讀取/etc/init/rcS.conf配置文件,此配置文件共定義完成兩個功能
1.實現系統初始化
通過運行系統初始化腳本實現系統初始化
系統初始化腳本:/etc/rc.d/rc.sysinit
其功能:(1) 設置主機名;
(2) 設置歡迎信息;
(3) 激活udev和selinux;
(4) 掛載/etc/fstab文件中定義的所有文件系統;
(5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統;
(6) 設置系統時鐘;
(7) 根據/etc/sysctl.conf文件來設置內核參數;
(8) 激活lvm及軟raid設備;
(9) 激活swap設備;
(10) 加載額外設備的驅動程序;
(11) 清理操作;
2.定義系統運行級別
注意:(如果在第二步grub中沒有指定,而且grub的配置文件中也沒有設置系統運行級別此參數的話,系統運行級別會按照/etc/inittab配置文件中設置的定義)
運行級別的意義:為了系統的運行或維護等目的而設定的機制;
0-6:7個級別; 0:關機, shutdown
1:單用戶模式(single user),root用戶,無須認證;維護模式;
2、多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式;
3、多用戶模式(mutli user),完全功能模式;文本界面;
4、預留級別:目前無特別使用目的,但習慣以同3級別功能使用;
5、多用戶模式(multi user), 完全功能模式,圖形界面;
6、重啟,reboot
默認級別:3, 5
級別切換命令:init #
級別查看命令:
who -r
runlevel
示例:
第七步:按照定義的系統運行級別關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務。
在CentOS 5和6中,系統服務都被設計為一個單獨的服務腳本,可以通過運行這些腳本來管理系統服務。
這些服務腳本都在/etc/rc.d/init.d/目錄下。
服務腳本的運行方式:
1.腳本路徑加一個執行參數
# /etc/rc.d/init.d/SRV_SCRIPT{start|stop|restart|status}
# /etc/init.d/SRV_SCRIPT{start|stop|restart|status}
/etc/init.d是/etc/rc.d/init.d目錄的軟鏈接
2.service命令
命令格式:
# serviceSRV_SCRIPT{start|stop|restart|status}
在/etc/rc.d/目錄下面有7個rc#.d格式的子目錄(#為0-6的整數,對應著七個系統運行級別)
這些目錄下面各有很多K##SCRIPT-NAME和S##SCRIPT-NAME的軟鏈接文件,
其鏈接對象都是/etc/rc.d/init.d/目錄下同SCRIPT-NAME的服務腳本文件。
CentOS 5和6中對單個運行級別的服務環境的配置和系統運行中級別切換後的服務環境配置正是基於以上基礎實現的。
單個運行級別的服務環境的配置流程:
1.讀取/etc/init/rc.cof這個配置文件
配置文件中通過運行/etc/rc.d/rc這個腳本來實現單個運行級別的系統服務環境配置,在運行的同時傳遞了一個位置參數 $RUNLEVEL,這個參數就是上一步中已經定義過了的系統運行級別。(注意:系統運行中級別切換後的服務環境配置也是通過此腳本實現)
/etc/rc.d/rc這個腳本執行會按照給定的位置參數($RUNLEVEL)運行對應的/etc/rc.d/rc#.d/目錄下的那些K和S開頭的腳本。其運行方式是先依次運行以K開頭的腳本,順序是##從小到大,運行時會傳遞一個執行參數stop。之後再依次運行以S開頭的腳本,順序是##從小到大,運行時會傳遞一個執行參數start。(注:這只簡要說明,具體執行方式請參照/etc/rc.d/rc腳本代碼)
因此:K表示是該系統級別要停止的服務;##表示優先級,數字越小,越是優先關閉,所以若這個服務依賴於其它服務就應該設置為先關閉,而被其它服務所依賴的服務應該設置為後關閉。
S表示該系統級別要啟動的服務;##表示優先級,數字越小,越是優先啟動;所以若被其它服務所依賴的服務應該設置為先啟動,而這個服務依賴於其它服務就應該設置為後啟動。(##為00-99)
對系統服務的管理可以通過chkconfig命令實現
chkconfig命令:管控/etc/rc.d/init.d/rc.d/下面每個服務腳本在各級別下的啟動或關閉狀態
使用格式
查看:chkconfig--list[name]
修改指定的鏈接類型:chkconfig[--levelLEVELS]name<on|off|reset>
--level LEVELS:指定要控制的級別;默認為2,3,4,5
添加:chkconfig--addname
刪除:chkconfig--delname(只是刪除了服務腳本的那些軟鏈接)
因此如果想增加一個系統服務,可以先寫一個服務腳本,放到/etc/rc.d/init.d/目錄下,再通過chkconfig命令實現。
能被添加的服務的腳本定義格式之一:
#!/bin/bash
#
# chkconfig: LLLNN NN
# description:
注意:在rc2.d,rc3.d,rc4.d,rc5.d中都有一個S99local軟鏈接,即這是幾個級別中最後一個啟動的系統服務。
可以看到它鏈接的並不是/etc/rc.d/init.d/目錄下面的服務腳本,而是/etc/rc.d/rc.local這個腳本。
從腳本注釋中可以看出其功用
因此,如果希望一些程序能開機自動運行時,又想寫服務腳本,可以直接寫入這個腳本中實現。
第八步:啟動終端
讀取/etc/init/start-ttys.conf這個配置文件,完成啟動終端的流程。其中會判定,如果運行級別為5的話,在啟動tty1-6之後會再啟動圖像終端。
自此,系統啟動完成。
注:第六到八步,都是init程序通過配置文件實現。
http://xxxxxx/Linuxjc/1134224.html TechArticle