您好,登錄后才能下訂單哦!
CentOS系統(tǒng)啟動流程
Linux系統(tǒng)的組成部分
Linux系統(tǒng)的組成部分:內(nèi)核+根文件系統(tǒng)
內(nèi)核:進(jìn)程管理,內(nèi)存管理,網(wǎng)絡(luò)協(xié)議棧,文件系統(tǒng),驅(qū)動程序,安全功能
內(nèi)核設(shè)計流派:
單內(nèi)核設(shè)計:把所有功能集成同一個程序
微內(nèi)核設(shè)計:每種功能使用一個單獨(dú)的子系統(tǒng)實(shí)現(xiàn)
linux內(nèi)核特點(diǎn):支持模塊化: .ko(kernel object)
支持模塊運(yùn)行時動態(tài)裝卸或卸載
組成部分:
核心文件: /boot/vmlinuz-VERSION-release
ramdisk:CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
運(yùn)行中的系統(tǒng)環(huán)境可分為兩層:內(nèi)核空間、用戶空間
用戶空間:應(yīng)用程序(進(jìn)程或線程)
內(nèi)核空間:內(nèi)核代碼(系統(tǒng)調(diào)用)
CentOS 系統(tǒng)的啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設(shè)備
2.讀取第一個啟動設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動信息
3.加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備
4.核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
5.init程序執(zhí)行/etc/rc.d/rc.sysinit文件
6.啟動核心的外掛模塊
7.init執(zhí)行運(yùn)行的各個批處理文件(scripts)
8.init執(zhí)行/etc/rc.d/rc.local
9.執(zhí)行/bin/login程序,等待用戶登錄
10.登錄之后開始以shell控制主機(jī)
詳細(xì)說明啟動流程
1..加載BIOS的硬件信息,獲取第一個啟動設(shè)備:
POST,加電自檢是BIOS功能的一個主要部分,負(fù)責(zé)完成對CPU,主板,內(nèi)存,硬盤子系統(tǒng),顯示子系統(tǒng),串并行接口,鍵盤等硬件情況的檢測
ROM:BIOS,保存著有關(guān)計算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置,開機(jī)加電自檢程序和系統(tǒng)啟動自舉等
RAM:CMOS互補(bǔ)金屬氧化物半導(dǎo)體,保存各項參數(shù)的設(shè)定
按次序查找引導(dǎo)設(shè)備,第一個有引導(dǎo)程序的設(shè)備為本次啟動設(shè)備
bootloader:引導(dǎo)加載器,程序;
Windows:ntloader
Linux:
LILO:LIinux LOader
GRUB:Grand Uniform Bootloader
GRUB 0.X:Grub Legacy
GRUB 1.X:Grub2
功能:提供一個菜單,允許用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本; 把用戶選定的內(nèi)核裝載到RAM中的特定空間中,解壓、展開,而后把系統(tǒng)控制權(quán)移交給內(nèi)核
2.讀取第一個啟動設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動信息
MBR:第一個扇區(qū)
前446字節(jié):bootloader
中間64字節(jié):分區(qū)表
最后2字節(jié):55AA
GRUB:
bootloader:1st stage
Partition:filesystem driver, 1.5 stage
Partition:/boot/grub, 2nd stage
3.加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備
Kernel:
自身初始化:
探測可識別到的所有硬件設(shè)備
加載硬件驅(qū)動程序
以只讀方式掛載根文件系統(tǒng)
運(yùn)行用戶空間的第一個應(yīng)用程序:/sbin/init
init程序的類型:
Centos5-:SysV int
配置文件:/etc/inittab
Centos6:Upstart
配置文件:/etc/inittab
/etc/init/*.conf
CentOS 7:Systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
ramdisk:
Linux內(nèi)核的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問;
ramdisk --> ramfs
CentOS 5: initrd
工具程序:mkinitrd
CentOS 6,7: initramfs
工具程序:dracut, mkinitrd
4.核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
init 程序的類型:
1.SysV: init, 在CentOS 5中的開機(jī)速度是最慢的原因是采用SysV init方式,其特點(diǎn)是啟動用戶空間的服務(wù)程序,通常通過腳本進(jìn)行,有依賴關(guān)系的服務(wù)將被串行啟動。
(1)運(yùn)行級別:為了系統(tǒng)的運(yùn)行或維護(hù)等目的而設(shè)定的機(jī)制;
0-6:7個級別;
0:關(guān)機(jī), shutdown
1:單用戶模式(single user),root用戶,無須認(rèn)證;維護(hù)模式;
2:多用戶模式(multi user),會啟動網(wǎng)絡(luò)功能,但不會啟動NFS;維護(hù)模式;
3:多用戶模式(mutli user),完全功能模式;文本界面;
4:預(yù)留級別:目前無特別使用目的,但習(xí)慣以同3級別功能使用;
5:多用戶模式(multi user), 完全功能模式,圖形界面;
6:重啟,reboot
默認(rèn)級別:3, 5
級別切換:init #
級別查看:
who -r
runlevel
(2)配置文件:/etc/inittab
每行定義一種action以及與之對應(yīng)的process
id:runlevels:action:process
id:一個任務(wù)的標(biāo)識符;
runlevels:在哪些級別啟動此任務(wù);#,###,也可以為空,表示所有級別;
action:在什么條件下啟動此任務(wù);
process:任務(wù);
action:
wait:等待切換至此任務(wù)所在的級別時執(zhí)行一次;
respawn:一旦此任務(wù)終止,就自動重新啟動之;
initdefault:設(shè)定默認(rèn)運(yùn)行級別;此時,process省略;
sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;
2.Upstart: init,CentOS 6 #CentOS 6的開機(jī)速度比5會快一些因?yàn)樗捎玫氖荱pstart的方法雖然你見到的名字還叫做init但是很多機(jī)制都是采用ubuntu開發(fā)的Upstart這個機(jī)制,特點(diǎn)是守護(hù)進(jìn)程間的通信依賴于D-Bus進(jìn)行,因此可基本實(shí)現(xiàn)類似的并行啟動
init程序:upstart,但依然為/sbin/init,其配置文件:
/etc/init/.conf, /etc/inittab(僅用于定義默認(rèn)運(yùn)行級別)
.conf為upstart風(fēng)格的配置文件;
3.Systemd :systemd, CentOS 7 #在7中的啟動速度最快的原因是采用Systemd的方式,其特點(diǎn)是服務(wù)只有第一次被訪問時才會真正的啟動起來
核心概念:unit,unit由其相關(guān)配置文件進(jìn)行標(biāo)識、識別和配置;文件中主要包含了系統(tǒng)服務(wù)、監(jiān)聽的socket、保存的快照以及其它與init相關(guān)的信息;
這些配置文件主要保存在:
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
unit的常見類型:
Service unit:文件擴(kuò)展名為.service,用于定義系統(tǒng)服務(wù);
Target unit:文件擴(kuò)展為.target,用于模擬實(shí)現(xiàn)“運(yùn)行級別”;
Device unit: .device,用于定義內(nèi)核識別的設(shè)備;
Mount unit: .mount,定義文件系統(tǒng)掛載點(diǎn);
Socket unit: .socket,用于標(biāo)識進(jìn)程間通信用到的socket文件;
Snapshot unit: .snapshot, 管理系統(tǒng)快照;
Swap unit: .swap, 用于標(biāo)識swap設(shè)備;
Automount unit: .automount,文件系統(tǒng)自動點(diǎn)設(shè)備;
Path unit: .path, 用于定義文件系統(tǒng)中的一文件或目錄;
關(guān)鍵特性:
基于socket的激活機(jī)制:socket與程序分離;
基于bus的激活機(jī)制;
基于device的激活機(jī)制;
基于Path的激活機(jī)制;
系統(tǒng)快照:保存各unit的當(dāng)前狀態(tài)信息于持久存儲設(shè)備中;
向后兼容sysv init腳本;/etc/init.d/
不兼容:
systemctl的命令是固定不變的;
非由systemd啟動的服務(wù),systemctl無法與之通信;
5.init程序執(zhí)行/etc/rc.d/rc.sysinit文件
系統(tǒng)初始化腳本:/etc/rc.d/rc.sysinit
(1) 設(shè)置主機(jī)名;
(2) 設(shè)置歡迎信息;
(3) 激活udev和selinux;
(4) 掛載/etc/fstab文件中定義的所有文件系統(tǒng);
(5) 檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng);
(6) 設(shè)置系統(tǒng)時鐘;
(7) 根據(jù)/etc/sysctl.conf文件來設(shè)置內(nèi)核參數(shù);
(8) 激活lvm及軟raid設(shè)備;
(9) 激活swap設(shè)備;
(10) 加載額外設(shè)備的驅(qū)動程序;
(11) 清理操作;
6.啟動核心的外掛模塊
7init 執(zhí)行運(yùn)行的各個批處理文件(scripts)
在系統(tǒng)/etc/rc.d/rc.sysinit初始化完成系統(tǒng)之后,此時系統(tǒng)就已經(jīng)可以正常工作了,只是還缺少啟動時所需要的各項服務(wù),這樣主機(jī)才能提供一些我們需要的功能,如網(wǎng)絡(luò)服務(wù)、dhcp服務(wù)等功能這里通過inittab里面提到的l3:3:wait:/etc/rc.d/rc 3配置了,而這里其實(shí)是通過/etc/rc.d/rc3.d/下所有鏈接文件來決定如何啟動或關(guān)閉服務(wù);素有以S開頭的都被傳遞start參數(shù)啟動,所有以K開頭的,都被傳遞stop參數(shù)以停止。
而/etc/rc.d/rc3.d/下的所有鏈接文件都是在/etc/init下面的所有腳本,而這些腳本都必須至少接受四個最基本的參數(shù),{start|stop|status|restart}
意味著去啟動或關(guān)閉/etc/rc.d/rc3.d/目錄下的服務(wù)腳本所控制服務(wù);
K*:要停止的服務(wù);K##*,優(yōu)先級,數(shù)字越小,越是優(yōu)先關(guān)閉;依賴的服務(wù)先關(guān)閉,而后關(guān)閉被依賴的;
S*:要啟動的服務(wù);S##*,優(yōu)先級,數(shù)字越小,越是優(yōu)先啟動;被依賴的服務(wù)先啟動,而依賴的服務(wù)后啟動;
rc腳本:接受一個運(yùn)行級別數(shù)字為參數(shù);
/etc/init.d/* (/etc/rc.d/init.d/*)腳本執(zhí)行方式:
/etc/init.d/SRV_SCRIPT {start|stop|restart|status}
service SRV_SCRIPT {start|stop|restart|status}
chkconfig命令:管控/etc/init.d/每個服務(wù)腳本在各級別下的啟動或關(guān)閉狀態(tài);
查看:chkconfig --list [name]
添加:chkconfig --add name
能被添加的服務(wù)的腳本定義格式之一:
#!/bin/bash
#
# chkconfig: LLL NN NN
# description:
刪除:chkconfig --del name
修改指定的鏈接類型:
chkconfig [--level LEVELS] name <on|off|reset>
--level LEVELS:指定要控制的級別;默認(rèn)為2345;
8.init 執(zhí)行/etc/rc.d/rc.local
注意:正常級別下,最后啟動的一個服務(wù)S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local (/etc/rc.local)腳本;因此,不便或不需寫為服務(wù)腳本的程序期望能開機(jī)自動運(yùn)行時,直接放置于此腳本文件中即可。
? /etc/rc.d/rc.local 在指定運(yùn)行級別腳本后運(yùn)行
? 可以根據(jù)情況,進(jìn)行自定義修改
9執(zhí)行/bin/login 程序,等待用戶登錄
10登錄之后開始以Shell控制主機(jī)
CentOS 6 啟動流程:POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 別 設(shè)定默認(rèn)運(yùn)行級別 --> 系統(tǒng)初始化腳本 rc.sysinit --> 務(wù) 關(guān)閉或啟動對應(yīng)級別的服務(wù) --> 啟動終端
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。