【每日一記3.15】linux啓動流程

   linux的啓動流程:

       1.加載硬件BISO信息,獲取第一個啓動設備的代號。

       2.讀取第一個啓動設備的MBR的引導家在程序(即LILO,GRUB,SPFDISK)的啓動信息。

       3.加載操作系統的核心信息,內核開始解壓,並嘗試驅動硬件設備。

       4.內核執行init程序並獲得運行信息。

       5.init執行/etc/rc.d/rc.sysinit文件。

       6.啓動內核的外掛模塊。(/etc/modprobe.conf)

       7.init執行運行批處理文件。(script)

       8.init執行/etc/rc.d/rc.local文件。

       9.執行/bin/login程序,等待用戶登陸。

       10.登陸之後開始以shell控制主機。


1.linux內核的引導。

   操作系統的內核是放在文件系統中的,要想正確加載內核就必須識別文件系統。系統剛啓動時,需要通過引導加載程序來識別文件系統,引導核心。grub同時支持linux和windows,但windows的家在程序不支持linux文件系統,所以在多系統的時候啓動程序用linux的grub來引導,所以裝機的時候先裝windows後裝linu。

   內核文件的位置在/boot分區裏,命名爲/boot/vmlinz,如果沒有分boot分區,則在/分區的前面放置。

   在加載內核的過程中,系統只會以只讀的方式加載根目錄。在系統啓動的時候,會建立虛擬盤,利用initrd和linxrc。加載initrd的映像文件(boot/initrd-xxx.img),並且利用linuxrc程序來加載模塊。在覈心驅動外部硬件的工作完成後,initrd所建立的虛擬盤會被刪除。


2.第一個程序init的加載。

   在內核加載完成後,系統準備好了等待程序的執行。整個linux系統中,第一個執行的程序是/sbin/init。init程序的工作相當多,除了利用/etc/inittab設置運行級別外,還會運行的登記來啓動不同的服務(就是chkconfig service 的文件),讓linux的使用環境不同。

   在/etc/inittab中的“si::sysinit:/etc/rc.d/rc.sysinit”,表明系統需要主動使用rc.sysinit這個shell腳本來設置系統環境。但這個文件名在各個版本中是不一樣的,需要自行查看。


3.init的初始化流程。(/etc/rc.d/rc.sysinit)

   (1)獲取網路環境和主機名。讀取默認網絡環境的配置文件/etc/sysconfig/network。

   (2)測試與載入內存的設備/proc及usb設備/sys。除了/proc外,系統會主動監測是否有usb設備,並主動加載usb驅動,嘗試載入usb文件系統。

   (3)決定是否啓動SELINUX以及檢測SELINUX標籤。

   (4)設置啓動的banner。

   (5)初始化硬件設備。

   (6)用戶自定義模塊的加載。用戶可以在/etc/sysconfig/modules/*.modules加入自定義的模塊,此時會加載到系統中。

   (7)配置內核參數。

   (8)設置主機名及同步等待存儲。

   (9)設備mapper的初始化。

   (10)設置raid及LVM等硬盤功能。

   (11)檢查硬盤文件系統。

   (12)把根重新掛在爲可讀寫的文件系統。

   (13)啓動quota功能。

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

   (15)配置計算機中必要的信息,如一些需要驗證和加密的文件信息。

   (16)清除啓動過程中的臨時文件。

   (17)啓動swap分區。

   (18)將啓動信息加載到/var/log/dmesg文件中。

   (19)離開rc.sysinit文件。


4.啓動系統服務/etc/rc.d/rc*.d。

   在結束了rc.sysinit之後,系統可以順利工作了,只還需要啓動系統需要的各種服務,這樣主機才能夠提供相關的網絡和主機功能。根據不同的運行級別啓動不同的服務。在指定的rc*.d下啓動服務。

   /etc/rc*.d/目錄下的內容都是以K或S開頭的鏈接文件,都鏈接到/etc/rc.d/init.d/目錄下的各種shell腳本。S表示的是啓動時需要start的服務內容,K表示關機時需要關閉的服務內容。如果需要自己增加啓動內容時,可以在init.d目錄中增加相關的shell腳本,然後在rc*.d目錄中簡歷鏈接文件只想該shell腳本。這些shell腳本的啓動或結束的順序是由S或K字母后面的數字決定的。數字既執行的順序。


5.用戶自定義的引導程序。(/etc/rc.d/rc.local)

   自定義的程序只需要放在rc.local中既可執行,省去了放在/etc/rc.d/rc*.d/的繁瑣。


6.啓動終端和X-Window界面。

   完成了所有啓動任務後,linux會啓動終端或者X-Window來等待用戶登錄。mingetty是啓動終端的命令。/etc/X11/prefdm    -nodaemon主要啓動X-Window。


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