啟動流程
? POST:
Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、 串并行接口、鍵盤、 CD-ROM光驅等硬件情況的檢測。
ROM: BIOS, Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、 開機加電自檢程序和系統啟動自舉程序等。
RAM: CMOS互補金屬氧化物半導體,保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備為本次啟動設備
? bootloader: 引導加載器,引導程序(因系統而異)
windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把
系統控制權移交給內核
LILO: LInux LOader
GRUB: GRand Unified Bootloader(centos5之后)
GRUB 0.X: GRUB Legacy, GRUB2
磁盤:
? MBR:
446: bootloader(446字節可尋找到bootloader所在位置), 64: 分區表, 2: 55AA
? GRUB:
primary boot loader : 1st stage(加載bootloader,磁盤第1個512字節中), 1.5 stage(boot文件系統,磁盤中第2個512字節中)
secondary boot loader : 2nd stage,分區文件
? kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(可能借助于ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序: /sbin/init
? 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(定義需要加載的驅動,腳本)
? ramdisk:
? 內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
ramdisk –> ramfs 提高速度
CentOS 5: initrd(內存模擬磁盤設備), 工具程序: mkinitrd
CentOS 6: initramfs(內存模擬的文件系統), 工具程序: mkinitrd, dracut
? 系統初始化:
POST –> BootSequence (BIOS) –>
Bootloader(MBR) –> kernel(ramdisk(加載根)) –> rootfs(只讀) —
> init( systemd)
? /sbin/init CentOS6 之前
? 運行級別:為系統運行或維護等目的而設定; 0-6: 7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
? 默認級別: 3, 5
? 切換級別: init #
? 查看級別: runlevel ; who -r
init初始化
?init讀取其初始化文件: /etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
CentOS 5的inittab文件
? 配置文件: /etc/inittab
? 每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別; process省略
sysinit:設定系統初始化方式,此處一般為指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1…
l6:6:wait:/etc/rc.d/rc 6
CentOS 6 /etc/inittab和相關文件
? /etc/inittab
設置系統默認的運行級別
id:3:initdefault:
centos5的是時候,一下配置是放在/etc/inittab文件中定義的,但是從centos6開始,就單獨放在一下路徑的配置文件中
? /etc/init/control-alt-delete.conf
? /etc/init/tty.conf
? /etc/init/start-ttys.conf
? /etc/init/rc.conf
? /etc/init/prefdm.conf
上圖為redhat5
上圖為centos6
? /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) 清理操作
/etc/rc.d/rcN.d/ 文件說明
? 說明: rc N –> 意味著讀取/etc/rc.d/rcN.d/
K*: K##*: ##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
S*: S##*: ##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
詳細可看/etc/rc.d/rc 文件
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
總結:
Linux的啟動過程個文件程序間環環相扣,缺一不可。以centos6為例,假設沒有了boot文件夾里的其中一個文件,就無法正常啟動,視損壞程度,有可能在啟動過程中手動添加配置信息,或者要進入光盤的救援模式進行修復。
原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/46121