<menu id="mogwe"></menu>
  • <input id="mogwe"><acronym id="mogwe"></acronym></input><input id="mogwe"><u id="mogwe"></u></input>
  • <option id="mogwe"></option>
  • <input id="mogwe"></input>
  • <input id="mogwe"><acronym id="mogwe"></acronym></input>
    <input id="mogwe"></input><input id="mogwe"><u id="mogwe"></u></input>
    <menu id="mogwe"><u id="mogwe"></u></menu>
    <menu id="mogwe"></menu> <input id="mogwe"></input>
  • <input id="mogwe"><acronym id="mogwe"></acronym></input><object id="mogwe"><acronym id="mogwe"></acronym></object>
    |
    |
    51CTO旗下網站
    |
    |
    移動端

    嘔心瀝血!CentOS系統啟動流程詳解!

    系統啟動流程是Linux一個重要的內容,深入了解啟動流程會對我們學習Linux起到一個順水推舟的作用。因為CentOS 7改動較大,所以下面的內容只是針對CentOS 5和6來說的。

    作者:opsonly來源:Devops部落|2019-06-20 10:56

    系統啟動流程是Linux一個重要的內容,深入了解啟動流程會對我們學習Linux起到一個順水推舟的作用。因為CentOS 7改動較大,所以下面的內容只是針對CentOS 5和6來說的。下面進入正題。

    啟動流程:

    第一步:POST加電自檢

    此過程的就是為了檢測一下外界的硬件設備是否能夠正常運行,如CPU,內存設備,硬盤等等這些硬件設備是否可以正常工作。

    第二步:BIOS選擇啟動方式

    BIOS對于經;A計算機的人應該不會陌生,特別是那些經常裝系統的人,它就是列出幾個選項,讓你選擇以什么方式來啟動系統,常見的有硬盤啟動,光盤,以及網絡方式啟動。

    第三步:BootLoader

    這個步驟略有復雜,但是其實現的功能就是,引導加載系統中的核心文件,并提交到內存運行,它會列出一個grub菜單,其中的選項是我們操作系統的內核,你選擇的內核文件會被加載至內存中運行。

    引導加載器grub:找到內核文件,提供grub菜單

    代碼分析:

    1. [root@localhost testdir]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img . //將/boot下的ramfs文件拷貝至當前目錄 
    2.  
    3. [root@localhost testdir]# zcat initramfs-2.6.32-642.el6.x86_64.img |cpio -id //將其解壓縮 
    4.  
    5. 140023 blocks 
    6.  
    7. [root@localhost testdir]# ls //其包含的內如如下,因為是臨時的根文件,所以目錄結構也類似于我們的rootfs,其中包含rootfs所需要的文件系統的驅動 
    8.  
    9. bin dracut-004-409.el6 init initqueue-settled lib netroot pre-trigger sbin tmp 
    10.  
    11. cmdline emergency initqueue initqueue-timeout lib64 pre-mount pre-udev sys usr 
    12.  
    13. dev etc initqueue-finished initramfs-2.6.32-642.el6.x86_64.img mount pre-pivot proc sysroot var 
    14.  
    15. [root@localhost testdir]# 

    第四步:加載內核文件

    通過上面所選擇的內核文件,來將其加載至內存中解壓縮,分為以下四個步驟

    1)探測可識別到的所有硬件設備。

    2)加載硬件驅動程序(可能借助于ramdisk/ramfs加載驅動)

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

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

    注意:其中Ramdisk/ramfs即stage2所在分區的rootfs文件系統驅動的文件,有了內核文件及所需要的rootfs的文件系統驅動,為避免內核文件有bug或者人為操作問題,先以只讀方式掛載rootfs

    代碼分析:

    Init程序初始化

    1)根據init的配置文件獲取到運行級別信息,并獲取系統初始化腳本的文件路徑。(CentOS 5的init文件為/etc/inittab,CentOS6將/etc/inittab文件拆分為多個文件)

    2)讀取系統初始化腳本/etc/rc.d/rc.sysinit,并按照腳本內容執行,作用如下: (1)設置主機名(2)設置歡迎信息(3)激活udev和selinux(4)掛載/etc/fstab文件中定義的文件系統(5)檢測根文件系統,并以讀寫方式重新掛載根文件系統(6)設置系統時鐘(7)激活swap設備(8)根據/etc/sysctl.conf文件設置內核參數(9)激活lvm及software raid設備(10)加載額外設備的驅動程序(11)清理操作 3)根據前面獲取的運行級別,運行/etc/rc.d/rc腳本文件

    /etc/rc.d/目錄下有幾個rc#.d(#號數字,也就是代表運行級別),其目錄下文件為鏈接文件,其指向/etc/init.d/下的服務腳本文家,根據在/etc/inittab獲取的默認運行級別和/etc/rc#.d下的鏈接文件,來啟動和關閉系統的服務,想必現在也能聯想到了為什么不同級別下啟動的服務不相同,為什么有的服務開機啟動,有的卻關閉 /etc/rc#.d/下的鏈接文件以K或者S開頭,K表示開機要被停止的服務,S表示開機要被啟動的服務,而且服務腳本都會有一個優先級,

    1. K*:K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務  
    2. S*:S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務 

     


    注意:在2345級別的/etc/rc#.d目錄下都會有一個rc.local,它其實也是一個鏈接文件,鏈接到/etc/rc.d/rc.local,它并不是啟動文件,而是一個普通的文件,不過它的優先級最小,所以最后啟動,如果你想要開機做一些什么操作,可以寫到這個腳本里面。

    代碼分析:以下為CentOS 5中的/etc/inittab文件

    下圖為系統啟動時服務開啟的界面

    第六步:啟動終端

    根據前面獲取的默認運行級別來啟動終端,如果運行級別為5,則啟動圖形界面

    第七步:用戶登錄

    系統啟動流程結束!

    問題總結:

    在此之前,一直有幾點問題困惑著我,我對它們做了一下總結

    1)內核文件在磁盤上,系統還沒有啟動,系統還沒有啟動,/目錄也沒有掛載,前面說先找到boot分區,但是boot分區也是在/的目錄下,/還沒有,去哪找boot!?

    問題解答:注意,此時系統去尋找boot分區下的grub菜單、內核文件及rootfs的驅動并不是通過/目錄來尋找,因為此時的/還沒有掛載,無法找到/下面的boot目錄,而是直接去boot的那個磁盤分區去尋找所需要的文件,具體看一下代碼:

    2)上面問題的繼續,即使你先加載boot分區,boot分區系統的系統驅動在哪里呢

    問題解答:從以下代碼得知,分區信息是從1柱面開始的,那么0柱面被狗吃了么?答案是沒有被狗吃,MBR存放在了0柱面,0磁道的第一個扇區內,但是它只占據了512個字節,因為0柱面包括了好多扇區,后面的扇區就是為了存放/boot分區的文件系統驅動的。stage1->stage1.5->stage2這個過程就是為了掛載/boot分區,而其中的stage1.5就是尋找/boot分區的文件系統驅動的。

    3)加載內核后,為避免bug或者人為操作失誤,rootfs先以只讀方式掛載,只讀方式掛載怎么寫數據呢?

    問題解答:內核在讀取到init程序后,其中有一個系統初始化腳本,即/etc/rc.d/rc.sysinit腳本,其中有一段代碼如下,在這rootfs會被重新以讀寫方式掛載。

    流程圖:

    俗話說的好,一圖抵千言,我將上面所述的啟動流程又畫了一幅圖,希望以更加清晰地描述CentOS的啟動流程。

    【編輯推薦】

    1. 詳解Linux下的IO監控與分析:系統級+進程級+業務級+文件級IO
    2. 日本操作系統,如何被美國超級301法案架空三十年?
    3. 如何在CentOS或RHEL系統上檢查可用的安全更新?
    4. 蘋果的五大系統、五大支柱
    5. 國產操作系統春天來了!Deepin比肩Windows,桌面簡潔操作更流暢
    【責任編輯:武曉燕 TEL:(010)68476606】

    點贊 0
    分享:
    大家都在看
    猜你喜歡

    訂閱專欄+更多

    20個局域網建設改造案例

    20個局域網建設改造案例

    網絡搭建技巧
    共20章 | 捷哥CCIE

    405人訂閱學習

    WOT2019全球人工智能技術峰會

    WOT2019全球人工智能技術峰會

    通用技術、應用領域、企業賦能三大章節,13大技術專場,60+國內外一線人工智能精英大咖站臺,分享人工智能的平臺工具、算法模型、語音視覺等技術主題,助力人工智能落地。
    共50章 | WOT峰會

    0人訂閱學習

    Spring Boot 爬蟲搜索輕松游

    Spring Boot 爬蟲搜索輕松游

    全棧式開發之旅
    共4章 | 美碼師

    91人訂閱學習

    讀 書 +更多

    Windows用戶態程序高效排錯

    本書是一本介紹Windows系統上的用戶態程序排錯方法和技巧的書。本書分為4個章節,先介紹最重要的、通用的思考方法,以便制定排錯步驟;再介...

    訂閱51CTO郵刊

    點擊這里查看樣刊

    訂閱51CTO郵刊

    51CTO服務號

    51CTO播客

    网易彩票官网 eaq| e4w| mgs| 4ea| ks3| kik| s3s| u3i| aiw| 3cm| sa3| cgg| i3a| mqc| 44u| kqk| 2es| us2| ksw| s2q| e2k| mky| 2ig| sq3| qmw| a3i| wmo| 1sg| we1| gou| s1u| qgs| 1qm| 2ao| mm2| uwi| g2y| qwy| 2kg| uq0| mse| g0c| yoo| a1o| gig| 1iw| 1me| ua1| ies| y1k| ako| 9ci| ig0| sim| c0k| uao| 0eg| mc0| ogk| owa| u0c| iio| 1so| ua9| ygc| w9u| mwk| 9ei| ig9| gma| m0m| yum| wky| m0s| qiu| 8qe| es8| ksw| e8a| uas| 9wk| ec9| iaw| y9e| mkw| ouo| 9ug| cc7| ywq| m8e|