CentOS 5和6的啟動(dòng)流程
CentOS 5和6的啟動(dòng)流程:
Linux:kernel + rootfs
kernel:進(jìn)程管理,內(nèi)存管理,網(wǎng)絡(luò)管理,驅(qū)動(dòng)程序,文件系統(tǒng),安全功能
rootfs:glibc(gun c 標(biāo)準(zhǔn)庫(kù))
庫(kù):
函數(shù)集合,function,調(diào)用接口(功能名)
過(guò)程調(diào)用:procedure,無(wú)返回值
函數(shù)調(diào)用:function,有返回值
程序:
內(nèi)核設(shè)計(jì)流派:
單內(nèi)核設(shè)計(jì):Linux,把所有功能集成同一個(gè)程序
微內(nèi)核設(shè)計(jì):Windows,Solaris,每種功能使用一個(gè)單獨(dú)子系統(tǒng)實(shí)現(xiàn)
liunx內(nèi)核特點(diǎn):
支持模塊化:.ko(被內(nèi)核調(diào)用) .so(用戶空間庫(kù)名)
支持模塊的動(dòng)態(tài)裝載和卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release
模塊文件:/lib/modules/VERSION-release
ramdisk:基于內(nèi)存的磁盤(pán),輔助內(nèi)核驅(qū)動(dòng)磁盤(pán)
CentOS 5:/boot/initrd_VERSION-release.img (模擬成硬盤(pán))
CentOS 6:/boot/initramfs-VERSION-release.img (模擬成文件系統(tǒng))
CentOS系統(tǒng)啟動(dòng)流程:
POST:加電自檢:
ROM:CMOS
BIOS:Basic Input and Output System
ROM + RAM
BOOT Sequence:
按次序查找各引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備即為本次啟動(dòng)用到的設(shè)備
bootloader:引導(dǎo)加載器,程序
windows:ntloader
Linux:
LILO:LInux LOader
GRUB:GRand Uniform Bootloader
GRUB 0.x:GRUB legacy (CentOS 5,6)
GRUB 1.x:GRUB2 (CentOS 7)
引導(dǎo)加載器:找到操作系統(tǒng)所在的磁盤(pán)分區(qū),把內(nèi)核加載至內(nèi)存中,并將控制權(quán)正常轉(zhuǎn)交給內(nèi)核的程序,以硬盤(pán)為例,引導(dǎo)加載器放在其MBR中
(提供一個(gè)菜單,允許用戶選擇要啟動(dòng)的系統(tǒng)或不同的內(nèi)核版本,把用戶選定的內(nèi)核裝載到內(nèi)存中的特定空間中,解壓展開(kāi)并把系統(tǒng)控制權(quán)移交給內(nèi)核)
MBR:
446:bootloader
64:fat 文件分配表
2:55AA
GRUB:
bootloader:1st stage (找到硬盤(pán)中的第二階段)
disk:2nd stage
kernel:
自身初始化:
探測(cè)可識(shí)別到的所有硬件設(shè)備
加載硬件驅(qū)動(dòng)程序:(有可能會(huì)借助于ramdisk加載驅(qū)動(dòng))
以只讀方式掛載根文件系統(tǒng)
運(yùn)行用戶空間的第一個(gè)應(yīng)用程序:/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:
內(nèi)核中的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤(pán)上文件的訪問(wèn):
啟動(dòng)時(shí)內(nèi)核加載根文件系統(tǒng),但根文件系統(tǒng)所在設(shè)備,
內(nèi)核可能無(wú)法驅(qū)動(dòng),因?yàn)轵?qū)動(dòng)程序在根文件系統(tǒng)上,
所以借助于ramdisk協(xié)助完成對(duì)于所需要和依賴的驅(qū)動(dòng)程序的加載,
加載完成后,切換到真正的根
ramdisk -> ramfs
由于ramdisk模擬成硬盤(pán),所以有可能被緩沖兩次,內(nèi)核認(rèn)為任何磁盤(pán)都比較慢,
所以會(huì)把ramdisk緩存到內(nèi)存中,但ramdisk本身就在內(nèi)存中,
等于存了兩次,所以CentOS 6采用ramfs
ramdisk在CentOS 5:initrd,利用mkinitrd生成
ramfs在CentOS 6:initramfs 工具程序:mkinitrd(不怎么用),dracut(一般使用此工具)
系統(tǒng)初始化:
POST--Bootsequence(BIOS)--Bootloader(MBR)--kernel(ramdisk)--rootfs(以只讀方式加載根文件系統(tǒng))--init
/sbin/init
CentOS 5:
運(yùn)行級(jí)別:為了系統(tǒng)的運(yùn)行或維護(hù)等應(yīng)用目的而設(shè)定
0-6:7個(gè)級(jí)別
0:關(guān)機(jī)
1:?jiǎn)斡脩裟J?,single,維護(hù)模式,root,無(wú)須登陸
2:多用戶模式,會(huì)啟動(dòng)網(wǎng)路功能,但不會(huì)啟動(dòng)NFS,維護(hù)模式
3:多用戶模式,正常模式,文本界面
4:預(yù)留級(jí)別,可同3級(jí)別
5:多用戶模式,正常模式,圖形界面
6:重啟
默認(rèn)級(jí)別:3,5
切換級(jí)別:init #(級(jí)別數(shù)字)
查看級(jí)別:runlevel;who -r
配置文件:/etc/inittab
每一行定義一種action以及與之對(duì)應(yīng)的process
id:runlevel:action:process (id可以使用任意名稱,保證每行不一樣就成)
例:id:3:initdefault:
action:
wait:切換至此級(jí)別運(yùn)行一次
respawn:此process終止,就重新啟動(dòng)之
initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別:process省略
sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定/etc/rc.d/rc.sysinit
# si::sysinit:/etc/rc.d/rc.sysinit 運(yùn)行級(jí)別為空,表示所有級(jí)別
# l0:0:wait:/etc/rc.d/rc 0
# l1:1:wait:/etc/rc.d/rc 1
.
.
.
# l6:6:wait:/etc/rc.d/rc 6
說(shuō)明:rc 0 -- 意味著讀取/etc/rc.d/rc0.d
K*:K##* K開(kāi)頭意味著此級(jí)別關(guān)閉 K后數(shù)字越小,越先運(yùn)行,數(shù)字越小的服務(wù),為越依賴別的服務(wù)的服務(wù)
S*:S##* S開(kāi)頭意味著此級(jí)別開(kāi)啟 S后數(shù)字越小,越先運(yùn)行,數(shù)字越小的服務(wù),為越被依賴的服務(wù)
在/etc/rc.d/init.d中有對(duì)應(yīng)的腳本,在每個(gè)級(jí)別的rc.d文件中都有選擇開(kāi)啟和關(guān)閉的腳本
chkconfig命令:
查看服務(wù)在所有級(jí)別下的啟動(dòng)或關(guān)閉設(shè)定情形:
chkconfig [--list] [name]
添加:
sysV的服務(wù)腳本放置于/etc/rc.d/init.d(/etc/init.d)
chkconfig --add name
#!/bin/bash
#
# chkconfig: L mm nn
L:0-6 寫(xiě)那個(gè)數(shù)那個(gè)級(jí)別為S,如果為"-"表示所有級(jí)別都不為S
mm:為S后數(shù)字
nn:為K后數(shù)字
刪除:
chkconfig --del name ?腳本還在只是在各運(yùn)行級(jí)別中刪除
修改指定的鏈接類型:
chkconfig [--level levels] name <on|off|reset>
--level L:指定要設(shè)置的級(jí)別,默認(rèn)為2345
注意:想在開(kāi)機(jī)時(shí)運(yùn)行但不方便寫(xiě)成腳本放在/etc/rc.d/init.d中的使用chkconfig控制,但又想開(kāi)機(jī)運(yùn)行的命令,
可以寫(xiě)在/etc/rc.local或/etc/rc.d/rc.local
注意:正常級(jí)別下,最后啟動(dòng)的一個(gè)服務(wù)S99local沒(méi)有鏈接至/etc/rc.d/init.d中的一個(gè)服務(wù)腳本,
而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫(xiě)為服務(wù)腳本放置于/etc/rc.d/init.d目錄中,
且又想開(kāi)機(jī)自動(dòng)運(yùn)行的命令,可以寫(xiě)入/etc/rc.d/rc.local文件中
啟動(dòng)虛擬終端:
tty1:2345:respawn:/usr/sbin/mingetty ?tty1
tty2:2345:respawn:/usr/sbin/mingetty ?tty2
.
.
.
tty6:2345:respawn:/usr/sbin/mingetty ?tty6
mingetty會(huì)調(diào)用login程序
/etc/rc.d/rc.sysinit:系統(tǒng)初始化腳本
(1)設(shè)置主機(jī)名
(2)設(shè)置歡迎信息
(3)激活udev和seLinux
(4)掛載/etc/fstab文件中定義的文件系統(tǒng)
(5)檢測(cè)根文件系統(tǒng),并以讀寫(xiě)方式重新掛載根文件系統(tǒng)
(6)設(shè)置系統(tǒng)時(shí)鐘
(7)激活swap設(shè)備
(8)根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
(9)激活lvm及software raid設(shè)置
(10)加載額外設(shè)備的驅(qū)動(dòng)程序
(11)清理操作
總結(jié):/sbin/init -- (/etc/inittab)-- 設(shè)置默認(rèn)運(yùn)行級(jí)別 -- 運(yùn)行系統(tǒng)初始腳本,完成系統(tǒng)初始化 -- 關(guān)閉對(duì)應(yīng)級(jí)別下需要關(guān)閉
的服務(wù),啟動(dòng)需要啟動(dòng)的服務(wù) -- 設(shè)置登陸終端
CentOS 6:
init程序?yàn)椋?/p>
upstart
配置文件:
/etc/inittab,/etc/init/*.conf
注意:
/etc/init/*.conf 文件語(yǔ)法遵循upstart配置文件語(yǔ)法格式