CentOS系統啓動流程

CentOS系統啓動流程
Linux系統的組成部分
Linux系統的組成部分:內核+根文件系統
內核:進程管理,內存管理,網絡協議棧,文件系統,驅動程序,安全功能
內核設計流派:
單內核設計:把所有功能集成同一個程序
微內核設計:每種功能使用一個單獨的子系統實現
linux內核特點:支持模塊化: .ko(kernel object)
支持模塊運行時動態裝卸或卸載
組成部分:
核心文件: /boot/vmlinuz-VERSION-release
ramdisk:CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
運行中的系統環境可分爲兩層:內核空間、用戶空間
用戶空間:應用程序(進程或線程)
內核空間:內核代碼(系統調用)

CentOS 系統的啓動流程
1.加載BIOS的硬件信息,獲取第一個啓動設備
2.讀取第一個啓動設備MBR的引導加載程序(grub)的啓動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,並嘗試驅動所有的硬件設備
4.核心執行init程序,並獲取默認的運行信息
5.init程序執行/etc/rc.d/rc.sysinit文件
6.啓動核心的外掛模塊
7.init執行運行的各個批處理文件(scripts)
8.init執行/etc/rc.d/rc.local
9.執行/bin/login程序,等待用戶登錄
10.登錄之後開始以shell控制主機
詳細說明啓動流程
1..加載BIOS的硬件信息,獲取第一個啓動設備:
POST,加電自檢是BIOS功能的一個主要部分,負責完成對CPU,主板,內存,硬盤子系統,顯示子系統,串並行接口,鍵盤等硬件情況的檢測
ROM:BIOS,保存着有關計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序和系統啓動自舉等
RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備爲本次啓動設備
bootloader:引導加載器,程序;
Windows:ntloader
Linux:
LILO:LIinux LOader
GRUB:Grand Uniform Bootloader
GRUB 0.X:Grub Legacy
GRUB 1.X:Grub2
功能:提供一個菜單,允許用戶選擇要啓動的系統或不同的內核版本; 把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而後把系統控制權移交給內核
2.讀取第一個啓動設備MBR的引導加載程序(grub)的啓動信息

MBR:第一個扇區
前446字節:bootloader
中間64字節:分區表
最後2字節:55AA

GRUB:
bootloader:1st stage
Partition:filesystem driver, 1.5 stage
Partition:/boot/grub, 2nd stage
3.加載核心操作系統的核心信息,核心開始解壓縮,並嘗試驅動所有的硬件設備

Kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
init程序的類型:
Centos5-:SysV int
配置文件:/etc/inittab
Centos6:Upstart
配置文件:/etc/inittab
/etc/init/*.conf
CentOS 7:Systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
ramdisk:
Linux內核的特性之一:使用緩衝和緩存來加速對磁盤上的文件訪問;
ramdisk --> ramfs
CentOS 5: initrd
工具程序:mkinitrd
CentOS 6,7: initramfs
工具程序:dracut, mkinitrd
4.核心執行init程序,並獲取默認的運行信息
init 程序的類型:

1.SysV: init, 在CentOS 5中的開機速度是最慢的原因是採用SysV init方式,其特點是啓動用戶空間的服務程序,通常通過腳本進行,有依賴關係的服務將被串行啓動。

(1)運行級別:爲了系統的運行或維護等目的而設定的機制;
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
(2)配置文件:/etc/inittab
每行定義一種action以及與之對應的process
id:runlevels:action:process
id:一個任務的標識符;
runlevels:在哪些級別啓動此任務;#,###,也可以爲空,表示所有級別;
action:在什麼條件下啓動此任務;
process:任務;
action:
wait:等待切換至此任務所在的級別時執行一次;
respawn:一旦此任務終止,就自動重新啓動之;
initdefault:設定默認運行級別;此時,process省略;
sysinit:設定系統初始化方式,此處一般爲指定/etc/rc.d/rc.sysinit腳本;
2.Upstart: init,CentOS 6 #CentOS 6的開機速度比5會快一些因爲他採用的是Upstart的方法雖然你見到的名字還叫做init但是很多機制都是採用ubuntu開發的Upstart這個機制,特點是守護進程間的通信依賴於D-Bus進行,因此可基本實現類似的並行啓動
init程序:upstart,但依然爲/sbin/init,其配置文件:
/etc/init/.conf, /etc/inittab(僅用於定義默認運行級別)
.conf爲upstart風格的配置文件;
3.Systemd :systemd, CentOS 7 #在7中的啓動速度最快的原因是採用Systemd的方式,其特點是服務只有第一次被訪問時纔會真正的啓動起來
核心概念:unit,unit由其相關配置文件進行標識、識別和配置;文件中主要包含了系統服務、監聽的socket、保存的快照以及其它與init相關的信息;
這些配置文件主要保存在:
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
unit的常見類型:
Service unit:文件擴展名爲.service,用於定義系統服務;
Target unit:文件擴展爲.target,用於模擬實現“運行級別”;
Device unit: .device,用於定義內核識別的設備;
Mount unit: .mount,定義文件系統掛載點;
Socket unit: .socket,用於標識進程間通信用到的socket文件;
Snapshot unit: .snapshot, 管理系統快照;
Swap unit: .swap, 用於標識swap設備;
Automount unit: .automount,文件系統自動點設備;
Path unit: .path, 用於定義文件系統中的一文件或目錄;
關鍵特性:
基於socket的激活機制:socket與程序分離;
基於bus的激活機制;
基於device的激活機制;
基於Path的激活機制;
系統快照:保存各unit的當前狀態信息於持久存儲設備中;
向後兼容sysv init腳本;/etc/init.d/
不兼容:
systemctl的命令是固定不變的;
非由systemd啓動的服務,systemctl無法與之通信;
5.init程序執行/etc/rc.d/rc.sysinit文件

系統初始化腳本:/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) 清理操作;
6.啓動核心的外掛模塊
7init 執行運行的各個批處理文件(scripts)

    在系統/etc/rc.d/rc.sysinit初始化完成系統之後,此時系統就已經可以正常工作了,只是還缺少啓動時所需要的各項服務,這樣主機才能提供一些我們需要的功能,如網絡服務、dhcp服務等功能這裏通過inittab裏面提到的l3:3:wait:/etc/rc.d/rc 3配置了,而這裏其實是通過/etc/rc.d/rc3.d/下所有鏈接文件來決定如何啓動或關閉服務;素有以S開頭的都被傳遞start參數啓動,所有以K開頭的,都被傳遞stop參數以停止。
    而/etc/rc.d/rc3.d/下的所有鏈接文件都是在/etc/init下面的所有腳本,而這些腳本都必須至少接受四個最基本的參數,{start|stop|status|restart}
    意味着去啓動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務;
            K*:要停止的服務;K##*,優先級,數字越小,越是優先關閉;依賴的服務先關閉,而後關閉被依賴的;
            S*:要啓動的服務;S##*,優先級,數字越小,越是優先啓動;被依賴的服務先啓動,而依賴的服務後啓動;
  rc腳本:接受一個運行級別數字爲參數;
        /etc/init.d/* (/etc/rc.d/init.d/*)腳本執行方式:
                /etc/init.d/SRV_SCRIPT  {start|stop|restart|status}
              service  SRV_SCRIPT   {start|stop|restart|status}
    chkconfig命令:管控/etc/init.d/每個服務腳本在各級別下的啓動或關閉狀態;
                                        查看:chkconfig  --list   [name]
                                        添加:chkconfig  --add  name
            能被添加的服務的腳本定義格式之一:
                                 #!/bin/bash
                                 #
                                 # chkconfig: LLL  NN NN
                                # description:  
                                 刪除:chkconfig  --del  name
            修改指定的鏈接類型:
                    chkconfig  [--level  LEVELS]  name  <on|off|reset>
                 --level LEVELS:指定要控制的級別;默認爲2345;

8.init 執行/etc/rc.d/rc.local
注意:正常級別下,最後啓動的一個服務S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local (/etc/rc.local)腳本;因此,不便或不需寫爲服務腳本的程序期望能開機自動運行時,直接放置於此腳本文件中即可。
• /etc/rc.d/rc.local 在指定運行級別腳本後運行
• 可以根據情況,進行自定義修改
9執行/bin/login 程序,等待用戶登錄
10登錄之後開始以Shell控制主機

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

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