Linux系統啟動流程初識

centos系統啟動流程

本篇僅僅講解centos5和6

centos7并不適用

Linux系統的組成部分:內核+根文件系統

內核功能:

  • 進程管理

  • 內存管理

  • 網絡管理

  • 驅動程序

  • 文件系統

  • 安全功能

有以下目錄結構的文件系統可以被識別為根文件系統,但根文件系統本身不存在

rootfs:/bin/ /sbin /etc/ /sys/ /proc/ /lib /dev/ /sys /tmp /boot/...

內核:

Linux內核特點:

支持模塊化:.ko(內核對象)
    如:文件系統、硬件驅動、網絡協議等
支持內核模塊的動態裝載和卸載

組成部分:

核心文件:/boot/vmlinuz-VERSION-release
    ramdisk:輔助的偽根文件系統
    centos 5:/boot/initrd-Vsersion-release.img
    centos 6:/boot/initramfs-Version-release.img
模塊文件:/lib/modules/VSERSION-release

centos6啟動流程

1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.Init執行運行的各個批處理文件(scripts).
7.Init執行/etc/rc.d/rc.local.
8.執行/bin/login程序,等待用戶登錄。
9.登錄之后開始以Shell控制主機。

Linux系統啟動流程初識

Linux系統啟動流程初識

下面我們來分別介紹上述的步驟

1、POST

power-on-self-test,加電自檢,是BIOS功能的一個主要部分,負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串并行接口、鍵盤、等硬件情況的檢測

    ROM:BIOS,,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啟動自舉程序等。
    RAM::CMOS互補金屬氧化物半導體,保存各項參數的設定

    按次序查找引導設備,第一個有引導程序的設備為本次啟動設備

2、bootloader: 引導加載器,引導程序

windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核
    LILO:LInuxLOader
    GRUB: GRandUnified Bootloader
    GRUB 0.X: GRUB Legacy,GRUB2

    1st stage:位于MBR中,為了引導2nd stage
    1.5 stage:位于mbr之后的扇區,不屬于任何分區,為識別內核文件所在的文件系統提供文件識別擴展
    2nd stage:位于boot基本磁盤分區中,GRUB的引導程序

3、kernel階段

自身初始化
探測可識別到的所有硬件設備
加載硬件驅動程序( 有可能會借助于ramdisk加載 )
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init

ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
ramdisk--> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut

4、init程序類型:

centos 5:sysV init
配置文件:/etc/inittab
centos 6:upstart
配置文件:/etc/inittab   /etc/init/*.conf

    運行級別:為了系統的運行或維護等目的而設定的機制
        0-6:7個級別
            0:關機,shutdown # init 0
            1:單用戶模式(signal user),root用戶,無須認證;維護模式
            2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式
            3:多用戶模式(multi user),完全功能模式;文本界面
            4:預留級別:目前無特別適用目的,但習慣以同3級別功能使用
            5:多用戶模式(multi user),完全功能模式,圖形界面
            6:重啟,reboot

    默認級別:3,5
    級別切換:# init #
        級別查看:
            # who -r
            # runlevel


init初始化
    init讀取其初始化文件:/etc/inittab
    初始運行級別(RUN LEVEL)
    系統初始化腳本
    對應運行級別的腳本目錄
    捕獲某個關鍵字順序
    定義UPS電源終端/恢復腳本
    在虛擬控制臺生成getty
    在運行級別5初始化X

/etc/inittab文件:
每行定義一種action以及與之對應的process
        id:runlevels:action:process

            id:一個任務的標識符
            runlevels:在那些級別啟動此任務;#,###,標識所有級別
            action:在什么條件下啟動此任務
            process:任務

        action:
            wait:等待切換至此任務所在的級別時執行一次;
            respawn:一旦此任務終止時,就自動重新啟動之
            initdefault:設定默認運行級別;此時,process省略
            sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本

Linux系統啟動流程初識

5、系統初始化腳本:/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、關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務

    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    l2:2:wait:/etc/rc.d/rc 2
            ...
    l6:6:wait:/etc/rc.d/rc 6
        意味著去啟動或關閉/etc/rc.d/rc#.d/目錄下的服務腳本所控制的服務
            K*:要停止的服務;K##,優先級,數字越小,越是先關閉,依賴的服務先關閉,而后關閉被依賴的
            S*:要啟動的服務;S##;優先級;數字越小,越是優先啟動,被依賴的服務先啟動,而依賴的服務后啟動

                rc腳本:接受一個運行級別數字為參數

                    腳本框架:
                        for srv in /etc/rc.d/rc#.d/K*; do
                            $srv stop
                        done

                        for srv in /etc/rc.d/rc#.d/S*; do
                            $srv start
                        done

                    /etc/init.d/* (/etc/rc.d/init.d/*)腳本執行方式:
                        # /etc/init.d/SRV_SCRIPT { start | stop restart | status }
                        # service SRV_SCRIPT  { start | stop restart | status }

7、/etc/rc.d/rc.local

注意:正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中

/etc/rc.d/rc.local在指定運行級別腳本后運行
可以根據情況,進行自定義修改

8、執行/bin/login程序,等待用戶登錄。

9、登錄

用戶輸入正確的用戶名和密碼后便可以以shell控制主機

下面來進行下簡單的總結:

內核級別的初始化流程:

POST --> bootsequence(BIOS) --> bootloader(MBR) --> kernel(ramdisk) --> rootfs(readonly) --> /sbin/init

(用戶空間的啟動流程):/sbin/init(/etc/inittab)

設置默認運行級別 --> 運行系統初始化腳本,完成系統初始化 --> 關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務 --> 
設置登錄終端 --> [ 啟動圖形終端(如果設定的話) ]

原創文章,作者:sixijie,如若轉載,請注明出處:http://www.www58058.com/45395

(0)
sixijiesixijie
上一篇 2016-09-11
下一篇 2016-09-11

相關推薦

  • Linux網站架構系列之Mysql—-部署篇

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1321079   MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle公司。MySQL所使用的SQL語言是用于…

    Linux干貨 2015-04-01
  • 基于Python和MoviePy庫實現數據的動態展示

    基于Python和MoviePy庫實現數據的動態展示 (翻譯:以馬內利)  原文鏈接:Data Animations With Python and MoviePy   Python擁有很多實現數據可視化的庫,但是很少可以展示GIFs的動態視圖。 這篇博客主要介紹怎樣使用MoviePy庫作為一個其他可視化庫的通用插件。 Movi…

    2015-03-26
  • CPU 處理器架構知識

    CPU處理器架構: 主要有ARM、X86/Atom、MIPS、PowerPC,其中ARM在智能手機上面一枝獨秀;其中ARM/MIPS/PowerPC均是基于精簡指令集機器處理器的架構;X86則是基于復雜指令集的架構,Atom是x86或者是x86指令集的精簡版。 Android在支持各種處理器的現狀: ARM+Android 最早發展、完善的支持,主要在手機市…

    Linux干貨 2015-08-03
  • Linux基礎(四)——用戶管理&grep命令

    1、  復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp /etc/skel/ /home/tuser1 –r chmod -R 700 /home/tuser1/ 2、  編輯/etc/group文件,添加組hadoop。 echo "ha…

    Linux干貨 2016-11-08
  • linux用戶權限管理

       在linux文件系統中使用ls -l命令可以查看文件的屬性,但是我們明白其中屬性各自代表的意思嗎?下面我們就來看一看,這其中的奧義。。。 文件屬性 使用ls命令查看文件,可以發現列表分為幾個部分,各自所代表的意義如圖所示: 文件屬性操作     chown 設置文件的所有者  &nb…

    Linux干貨 2016-08-04
  • 8-2 作業

    8-2作業     1.在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 2.創建組sales,gid 3000,passwd:centos,sales admins:user2?!?/p>

    Linux干貨 2016-08-05

評論列表(1條)

  • 1613827154
    1613827154 2016-09-13 01:44

    總結的好清楚 學習了

欧美性久久久久