CentOS 6 系統啟動流程
一、Linux系統簡介
⒈ Linux組成: kernel+rootfs
①kernel主要功能: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
②rootfs:程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用: procedure,無返回值
函數調用: function
程序:二進制執行文件
⒉內核設計流派:
單內核(monolithic kernel): Linux
把所有功能集成於同一個程序
微內核(micro kernel): Windows, Solaris
每種功能使用一個單獨子系統實現
⒊Linux內核特點:
①支持模塊化: .ko(內核對象)
如:文件系統,硬件驅動,網絡協議等
②支持內核模塊的動態裝載和卸載
③組成部分:
核心文件: /boot/vmlinuz-VERSION-release
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
模塊文件: /lib/modules/VERSION-release
二、CentOS 6 啟動流程
CentOS6啟動簡要流程框架:
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控制主機
啟動流程介紹:
POST加電自檢:是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、 串並行接口、鍵盤、 CD-ROM光驅等硬件情況的檢測。
ROM: BIOS, Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、 開機加電自檢程序和系統啟動自舉程序等。
RAM: CMOS互補金屬氧化物半導體,保存各項參數的設定按次序查找引導設備,第一個有引導程序的設備為本次啟動設備。
加載MBR,MBR組成:446: bootloader, 64: 分區表, 2: 55AA,bootloader(引導加載器)提供具有菜單功能,加直接載操作系統中的內核信息,以及相關控制權轉交功能。
Bootloader(CentOS 5、6采用的是GRUB)程序運行與配置項加載分三個階段(stage)來運行
①stage1、安裝bootloader最小主程序,並沒有安裝相關配置文件。
②stage1_5、在MBR隨後的扇區中存放,用於與stage2所在分區的文件系統進行交互。
③stage2、加載所有配置文件及相關環境參數信息(這些信息都存放在磁盤分區的的/boot目錄下),當讀取了這些文件系統所定義的數據後,就能識別文件系統並讀取在該文件系統上的內核文件了。
kernel自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(借助於ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序: /sbin/initramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問,並加載相應的硬件驅動。
ramdisk --> ramfs 提高速度
CentOS 5: initrd
工具程序: mkinitrd
CentOS 6, 7: initramfs
工具程序: mkinitrd, dracutramdisk文件的制作:
(1) mkinitrd命令
為當前正在使用的內核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)/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文件中。
系統初始化:
POST --> BootSequence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --
> init(systemd)
三、配置文件
⒈init程序的類型:
SysV: init, CentOS 5之前
配置文件: /etc/inittab
Upstart: init,CentOS 6
配置文件: /etc/inittab, /etc/init/*.conf
Systemd: systemd, CentOS 7
配置文件: /usr/lib/systemd/system
/etc/systemd/system
2、init處理流程
以Centos 5 系統啟動為例,init通過自上而下讀取inittab文件來依次執行(各處理過程相似)
①去系統默認的運行級別(runlevel)
示例:id:3:initdefault:
②使用/etc/rc.d/rc.sysinit進行系統初始化
③完成初始化腳本後,系統還會啟動對應級別下設定為要啟動的服務,關閉那些設定為要停止的 服務,由於采用的是3級別,因此只進行13:3:wait:/etc/rc.d/rc 3其他忽略。
④配置好[ctrl]+[alt]+[del]組合鍵的功能
⑤配置不間斷電源系統(UPS)pf、pr兩種機制
⑥啟動mingetty6個終端
⑦如果是5級別,則會以/etc/X11/prefdm-nodaemon啟動圖形化界面
3、/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) 清理操作
四、總結系統啟動流程
加電自檢-->
根據在BIOS(基本輸入輸出系統)中定義的Boot Sequence(啟動次序)逐一去搜索擁有啟動功能的設備-->
搜索到後加載存放於MBR中的該設備的Boot Loader(引導加載器),Boot Loader加載完後會顯示一個菜單讓用戶區選擇要啟動的操作系統或內核版本-->
加載用戶選擇的Kernel(內核),此外可能還要加載initrd或initramfs(ramdisk的具體實現),因為Kernel有可能要借助ramdisk(虛擬內存盤,臨時根文件系統)提供的真正根文件系統的所在的設備的驅動去識別該設備 -->
kernel加載並以只讀方式掛載rootfs(真正的根文件系統)-->
kernel進行switchroot(根切換)-->
kernel運行真正根文件系統上的/sbin/init程序-->
/sbin/init程序根據其配置文件/etc/inittab和/etc/init/*.conf設定默認運行級別-->
/sbin/init程序運行系統初始化腳本完成系統初始化-->
/sbin/init程序關閉或啟動對應級別下的服務-->
/sbin/init程序啟動終端並打印登錄提示符或登錄界面;
本文出自 “linux運維” 博客,請務必保留此出處http://arm2012.blog.51cto.com/2418467/1961008
CentOS 6 系統啟動流程