linux 系統啟動流程:
之前有描述過linux的啟動流程,但還有許多模糊的地方,經過一段時間了學習,查資料,看腳本,比初次理解更深,可以將上次模糊或不足的地方描述得比較清楚一些。
先看一張啟動流程圖。
分析:
linux系統的啟動流程大概可以分為兩大部分:
第一部分為內核空間的啟動
第二部分為用戶空間的啟動
其中,內核空間的啟動主要可為分四個主要的階段:
post –> mbr –> grub –> kernel
用戶空間的啟動,也主要分四個階段:
inittab –> sysinit –> runlevel –> rc.local ; mingetty ;login
下邊我將盡已所能,將每個過程描述清楚。
內核空間啟動的四個階段:
第一個階段 post:
主機通電之后,運行的第一個程序,就是bios,全稱base input output system,這個程序是集成在主板的rom中,運行起來后,就要先跑一次post代碼,進行最基本的檢查,主要檢查主機的硬件是否正常,若不正常,將會報錯并不再進行下一步。
第二階段 裝載MBR:
當post代碼執行完后,就會將bios中設定好的啟動順序,將第一個活動的設備的MBR加載至內存中,MBR前446字節為linux中的主導引程序grub的stage1。至此,bios的任務完成。
第三階段 裝載grub引導啟動程序
當MBR中grub的stage1加載到內存中后,又會繼續讀取第一個扇區512字節后的大概27個扇區,這個范圍內,正是stage1_5所在的階段。stage1_5階段,存儲了/boot分區的文件系統驅動,加載到此驅動后,才能去加載/boot分區中的stage2階段。至此,整個linux的引導啟動程序grub加載完成
第四階段 加載kernel
grub的配置文件grub.conf中,已經指明了kernel的位置以及initramfs的位置,能加載kernel,并且掛載initramfs已經是板上釘釘的事,接下來的事,只需要借助initramfs這個偽根文件系統中存儲的驅動,去掛載真正的“/”文件系統,需要注意的是,此時“/”文件系統是以只讀方式掛載的。下一步,將會啟動系統的第一個程序:/sbin/init,init進程起來之后,下接來要做的事,就歸屬于用戶空間了。
用戶空間啟動的四個階段:
第一階段:
/sbin/init程序運行為init進程后,第一件事,就是去讀取配置文件/etc/inittab和/etc/init目錄下的*.conf文件,按照這些配置文件的定義,去完成系統的初始化。
第二階段:
根據init程序配置文件的定義,在任何運行級別下運行/etc/rc.d/sysinit腳本。此腳本主要完成的工作如下有設置主機名,主機時間,根據/etc/fstab中的定義,掛載指定的文件系統,“/”文件系統也被重新以只讀的方式掛載,激活LVM,sortware raid這些虛擬設備,激活swap設備,加載額外的驅動程序,清理此前這些操作產生的無用的文件。
第三階段:
執行完init程序配置文件中指定運行的sysinit腳本后,將會根據確定的運行級別,運行相應的運行級別下的腳本,啟動對應的服務,關閉對應的服務。
linux每個運行級別下,設置啟動的服務都不相同,大概有幾種級別:
0:關機
1:單用戶模式或救援模式
2:多用戶模式,多用于維護,且沒有NFS
3: 多用戶模式,正常模式,平時用得最多的就是這個
4:保留
5:圖形界面
6:重啟
執行完相應的運行級別的腳本后,還要執行用戶定義在rc.local中的命令。執行mingettty,開啟6個終端,提示用戶輸入用戶名和密碼進行登陸。至此,整個系統啟動流程結束。
原創文章,作者:old_radish,如若轉載,請注明出處:http://www.www58058.com/75713