基於Intel X86架構平臺的CentOS 5/6啓動過程

Linux系統的系統運行環境包括兩部分:

    通過系統調用來運行內核代碼的內核空間;存儲於文件系統中的應用程序被髮起爲進程或線程後的應用程序的代碼所佔有的用戶空間。(佔用的空間是指發起的進程或線程使用的CPU和內存資源空間)

    

Linux發行版系統centos系統,第五版和第六版的啓動流程如下:

    首先先啓動內核,畢竟一切應用程序都是基於內核來執行的;內核啓動完成後就應該啓動用戶空間。

        內核啓動流程:POST(BIOS) --> BootSequence(BIOS) --> Bootloader(GRUB) --> vmlinuz(initrd|initramfs) --> rootfs(ro) --> /sbin/init

        用戶空間啓動流程:/sbin/init --> /etc/inittab(/etc/init/*.conf) --> 設置默認的運行級別 --> /etc/rc.d/rc.sysinit,完成系統初始化 --> /etc/rc.d/rc,關閉或啓動相應的運行級別下的各系統服務 --> Ctrl+Alt+Delete組合熱鍵功能 --> UPS備用電源失效或恢復之後的操作 -->/etc/rc.d/rc.local腳本 --> 生成登錄界面,打印登錄提示符



詳細的啓動流程:

    

第一步(加電自檢)POST:保證硬件可以正常工作,實現自檢功能是CMOS上的BIOS(Basic Input Output System,基本輸入輸出系統)程序;BIOS會檢測CPU、Memory以及I/O設備,之後對硬件設備進行初始化。


第二步(MBR引導,順序啓動階段BootSequence)

BIOS程序中有各個設備的啓動順序

這個過程的目的是找出到底從何種設備(光驅,硬盤,可移動設備(U盤),網絡接口)上加載操作系統內核;按照給定的順序查找設備,首次被找出帶有引導程序(Bootloader)的設備即爲本次啓動要用到的設備;

(Bootloader:引導程序,引導加載器;在centOS6及之前的發行版本中主要是Legacy GRUB引導程序;)

 legacy grub:

    第一步:stage1,主要指存儲於MBR前446Byte的內容,用於加載第1.5步;

    第1.5步:stage1_5,主要儲存於MBR之後的若干扇區之中;讓stage1中的bootloader程序能夠識別stage2所在分區的文件系統;

    第二步:stage2,主要存儲於磁盤設備中的啓動分區之上,必須與內核核心文件放在同一個基本磁盤分區之中用於加載內核文件;

        stage2提供的功能:

            1.加載操作系統內核核心文件;

            2.提供了一個菜單以及一個交互式接口;

            3.爲用戶提供菜單的編輯方法;

            4.以口令的方式驗證用戶身份,保證單用戶模式和菜單編輯工作的安全使用;


    {legacy grub的配置文件:

    /boot/grub/grub.conf

        default=0

        //設定默認的菜單啓動項,對於整個配置文件中的所有的title段進行依次編號,第一個title段編號爲0,第二個爲1,以此類推;

        timeout=5

        //用戶在系統引導過程中實施操作的最大延遲時間;一旦在這段時間內沒有任何操作,意味着grub會自動引導啓動默認內核啓動項;

        splashimage=(hd0,0)/grub/splash.xpm.gz

        //grub的背景圖片文件的存放路徑;

        hiddenmenu

        //隱藏grub的啓動菜單;

        password --md5 CRYPTED_PASSWORD

        //爲了保護菜單而設置的安全口令,也可以限制用戶隨意進入單用戶模式;

        title CentOS 6 (2.6.32-573.el6.x86_64)

        //定義菜單項中的各個"標題",可以定義多個;但至少要保留一項;

        password --md5 CRYPTED_PASSWORD

        想要引導此內核啓動,需要輸入口令;

        root (hd0,0)

        指定grub的根設備,通常是安裝grub的stage2的分區;

        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=5ebb0e76-bb19-4a80-9c70-0d101c0778e1 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

        指定要啓動的內核核心文件及傳遞給內核運行的內核參數;

        initrd /initramfs-2.6.32-573.el6.x86_64.img

        內核所對應的ramdisk(ramfs)文件;}

    

第三步(內核引導階段)

內核在得到系統控制權之後,首先進行自身初始化,作用是:

1.首先探測可識別到的所有硬件設備:

bootloader將系統控制權移交給內核,內核首先要檢查一下有哪些是Legacy GRUB所留下的,如果自己可以用留下,反之刪除;

2.加載硬件驅動程序:

加載根文件系統所在設備的驅動程序(可能藉助於ramdisk加載驅動) ;且在內存中釋放kernel使用的file system;

3.以只讀方式掛載根文件系統:

如果有藉助於ramdisk這個臨時文件系統,則在這一步之後會執行根切換;沒有則不執行根切換;

4.最後運行用戶空間的第一個應用程序:/sbin/init.


以上流程是內核空間的啓動流程;下面是用戶空間的啓動流程:


第四步(init初始化階段,用戶空間啓動階段):

    流程:/etc/inittab(/etc/init/*.conf) --> 設置默認的運行級別 --> /etc/rc.d/rc.sysinit,完成系統初始化 --> /etc/rc.d/rc,關閉或啓動相應的運行級別下的各系統服務 --> Ctrl+Alt+Delete組合熱鍵功能 --> UPS備用電源失效或恢復之後的操作 -->/etc/rc.d/rc.local腳本 --> 生成登錄界面,打印登錄提示符


對於CentOS 5來說,初始化程序init是SysV init,其配置文件爲:/etc/inittab;

對於CentOS 6來說,初始化程序init是upstart,其配置文件爲:/etc/inittab(幾乎被廢棄),/etc/init/*.conf;

Init程序:

運行級別(Run-level):爲了系統的運行和維護等目的而設置的管理機制;所有的管理類操作都必須依靠shell腳本來實現;

七個運行級別(0-6)

0 - halt (Do NOT set initdefault to this)   //關機

1 - Single user mode   //單用戶模式,無需密碼認證,維護和調試;

2 - Multiuser, without NFS (The same as 3, if you do not have networking)   //多用戶模式,不會啓動NFS,維護模式;

3 - Full multiuser mode  //完全的多用戶模式;僅使用CLI;

4 - unused //預留級別,目前無特殊使用目的;但其設置習慣上與運行級別3保持相同;

5 - X11  //完全的多用戶模式,默認激活GUI和CLI,默認使用GUI;

6 - reboot (Do NOT set initdefault to this)  //重啓;

其中0和6不能設置爲默認;


init 的切換命令和配置解析

 (1)init #:一般模式級別爲3,5,#爲級別編號;

 (2)runlevel:查看當前運行級別與最近一次切換前的級別;

 (5)who -r:類似與runlevel


修改運行級別:

    實時修改:init [0-6]    

    永久修改:修改init的配置文件:/etc/inittab   id:#:initdefault:

    

執行/etc/inittab文件下所有腳本的作用:

在整個系統初始化的過程中決定執行哪些操作:

啓動或關閉哪些後臺服務;

如何進行系統初始化;

在驗證用戶身份無誤之後,如何爲用戶提供登錄提示界面;

當備用電源失效或重新生效後,如何指揮系統操作;

定義了"Ctrl+Alt+Delete"組合鍵被同時按下時,系統將採取的行爲;


之後執行/etc/rc.d/rc.sysinit下所有腳本的作用:

1.設置主機名;

2.設置啓動時的歡迎信息;

3.激活udev和SELINUX;

4.掛載/etc/fstab文件中定義的所有有效的文件系統;

5.激活swap設備;

6.檢測rootfs,並以重新以讀寫的方式掛載rootfs;

7.設置系統時間;

8.根據/etc/sysctl.conf設置內核參數;

9.激活lvm和軟件RAID等高級邏輯設備;

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

11.完成初始化之後的清理工作;


再然後執行/etc/rc.d/rc腳本

1.根據特定的運行級別啓動或關閉對應目錄中的系統服務進程;

K*:要停止的系統服務進程;*表示關閉次序,數字越大越先運行,數字越小的服務,通常爲依賴比人的服務;

S*:要啓動的系統服務進程;*表示啓動次序,數字越小越先運行,數字越小的服務,通常爲被別人依賴的服務;

2.rc腳本可以接受一個運行級別的數字標識作爲參數;

3.有rc腳本關聯的/etc/rc.d/rc#.d中的文件其實是鏈接文件,其鏈接的目標路徑爲:/etc/rc.d/init.d目錄中的各服務管理腳本;


    管理此類系統服務的鏈接文件:

    chkconfig命令:更新和查詢系統服務的運行級信息;

        查看系統服務在各運行級別下的啓動與關閉的情況:

        chkconfig --list

        根據腳本文件中設置的chkconfig: runlevel Slevel Klevel設置系統服務在各個運行級別下的默認啓動或關閉的狀態:

            chkconfig --del SERV_NAME

            chkconfig --add SERV_NAME

        實時調整各個服務在各個運行級別的運行狀態:

            chkconfig --level runlevel SERV_NAME on|off

    

最後執行/etc/rc.d/rc.local腳本:

是在init程序引導用戶空間進程的過程中,所執行的最後一個腳本;因此不便於或不需要寫在系統服務相關的腳本中的內容,但又期望可以開機運行的功能,可以直接寫在此腳本中;


最終會打印登錄提示符:/sbin/mingetty $TTY

mingetty程序會調用login程序,打開虛擬終端;除了mingetty之外,諸如getty等之類的程序也可以完成此類生成虛擬控制檯的功能;

如果默認的運行級別爲5,則需要/etc/X11/prefdm腳本打開圖形用戶界面終端;



至此,CentOS 5/6啓動過程完成。

    

    




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