CentOS系統啟動流程
·Linux系統的組成部分:內核+根文件系統
內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能
IPC:Inter Process Communication
消息隊列、semerphor、shm
socket
·運行中的系統環境可分為2層:內核空間、用戶空間
用戶空間:應用程序 ( 進程或線程 )
內核空間:內核代碼 ( 系統調用 )
·內核設計流派:
·單內核設計:把所有功能集中于同一個程序
Linux
·微內核設計:每種功能使用一個單獨的子系統實現 ( 模塊 )
Windows,Solaris
·Linux內核特點:
支持模塊化:.ko(kernel object)
支持模塊運行時動態裝載或卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release
vmlinuz –> z表示壓縮的意思
ramdisk:
CentOS5:/boot/initrd-VERSION-release.img
CentOS6,7:/boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
CentOS系統的啟動流程:
·POST:加電自檢
ROM :CMOS
BIOS:Basic Input and Output System
ROM+RAM
·Boot Sequence:
按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用的設備
·bootloader:引導加載器,程序
·Windows :ntloader
·Linux:
LILO:LInux LOader
GRUB:Grand Uniform Bootloader
GRUB 0.x:Grub Legace
GRUB 1.x:Grub2
·功能:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權轉交給內核
·MBR:Master Boot Record
512bytes:
446bytes:bootloader
64bytes:磁盤分區
2bytes:55AA(表示此磁盤為主引導盤或系統盤)
·GRUB:
bootloader:1st stage (在mbr中)
Partition:filesystem driver 1.5 stage (mbr之后的扇區)
Partition:/boot/grub 2nd stage (在/boot/grub中)
·Kernel:
·自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序:( 有可能會借助于randisk加載驅動 )
以只讀方式掛載跟文件系統
運行用戶空間的第一個應用程序:/sbin/init
·init程序的類型
CentOS5:SysV init
配置文件:/etc/inittab
CentOS6:Upstart
配置文件: /etc/inittab
/etc/init/*.conf
CentOS7:Systemd
配置文件: /usr/lib/systemd/system
/etc/systemd/systemd
·ramdisk:
Linux內核的特性之一:使用緩存和緩存來加速對磁盤文件的訪問
ramdisk –> ramfs
CentOS5:initrd
工具程序:mkinitrd
CentOS6,7:initramfs
工具程序:dracut,mkinitrd
系統初始化流程(內核級別):POST –> Boot Sequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> rootfs(readonly) –> /sbin/init
/sbin/init:
CentOS5:SysV init
·運行級別:為了系統的運行或維護等目的而設定的機制
·0-6:7個級別
0:關機 shutdown
1:單用戶模式(single user),只能root用戶登錄,無須認證(可用與忘記root密碼);維護模式
2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式(multi user),完全功能,文本界面
4:預留級別;目前無特別使用目的,但習慣以3級別功能使用
5:多用戶模式(multi user),完全功能模式,圖像界面
6:重啟,reboot
·默認級別:3 ,5
·級別切換:# init NUM
·級別查看:
who -r
runlevel
·配置文件:/etc/inittab
·每行定義一種action以及與之對應的process
id:runlevels:action:process
·id:一個任務的標識符
·runlevels:在哪些級別啟動此任務;#,###,也可以為空:表示所有級別
·action:在什么條件下啟動此任務
·process:任務
·action:
wait:等待切換至此任務所在的級別時執行一次
respawn:一旦此任務終止,就自動重新啟動之
initdefault:設定默認運行級別;此時,process省略
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本
·例如:
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
·意味著去啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務
K*:要停止的服務;K##*,表示優先級,數字越小,越是優先關閉,依賴的服務先關閉,而后關閉被依賴的服務
s*:要啟動的服務,S##*,表示優先級,數字越小,越優先開啟,被依賴的服務先啟動,而依賴的服務后啟動
·rc腳本接收一個運行級別數字為參數
1.腳本框架:
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
2./etc/init.d/*(/etc/rc.d/init.d/*)腳本執行方式:
# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
# service SRV_SCRIPT {start|stop|restart|status}
3.chkconfig命令:管控/etc/init.d/每個服務在各級別下的啟動或關閉狀態
·查看:chkconfig –list [name]
·添加:chkconfig –add name
能被添加的服務的腳本定義格式之一:
#!/bin/bash
#
#chkconfig: LLL(默認在那些級別啟動) NN(啟動優先級) NN(關閉優先級)
#description:
#LLLL :表示初始在哪個級別下啟動,- 表示所有級別都不啟動
·刪除:chkconfig –del name
·修改指定的服務運行級別:
chkconfig [–level LEVELS] name <on|off|reset>
–level LEVELS:指定要控制的級別;默認為2345
默認: chkconfig name on
修改了服務優先級當前不會立即生效,下一次啟動生效
服務腳本示例: [root@CentOS6 ~]# cat /etc/init.d/testsrv.sh #!/bin/bash #chkconfig: 35 88 22 #description:testsrv script case $1 in start) echo testsrv start ;; stop) echo testsrv stop ;; status) echo testsrv status ;; *) echo 'testsrv start | stop | status' ;; esac [root@CentOS6 ~]# chkconfig --add /etc/rc.d/init.d/testsrv //添加服務腳本開機啟動 [root@CentOS6 ~]# chkconfig --list //查看所有服務腳本 [root@CentOS6 ~]# chkconfig --level 35 testsrv off //在35模式下關閉服務腳本的開機啟動 [root@CentOS6 ~]# chkconfig --level 345 testsrv on //在345模式下開啟服務腳本的開機啟動 [root@CentOS6 ~]# chkconfig --del testsrv //刪除服務腳本的開機啟動
·注意:正常級別下,最后啟動的一個服務S99local沒有鏈接至/etc/init.d下的某個文件,而是鏈接至了/etc/rc.d/rc.local(/etc/rc.local)腳本;因此,不便或不需寫為服務腳本的程序期望能開啟自動運行時,直接放置于此腳本文件中即可
tty1:2345:respawn:/usr/sbin/mingetty tty1
……
tty6:2345:respawn:/usr/sbin/mingetty tty6
(1)mingetty會調用login程序
(2)打開虛擬終端的程序除了mingetty之外,還有諸如getty等
x:5:respawn:/etc/X11/prefdm -nodaemon
啟動圖像終端X11,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)加載額外設備的驅動程序
總結(用戶空間的啟動流程):/sbin/init(/etc/inittab)
設置默認運行級別 –> 運行系統初始化腳本,完成系統初始化 –> 關閉對應級別下需要停止的服務,啟動對應級別下要啟動的服務 –> 設置登錄終端 [ –> 啟動圖像終端 ]
CentOS 6:Upstart
·init程序:Upstart,但依然被封裝成了/sbin/init,
其配置文件:/etc/init/*.conf ,/etc/inittab (僅用于定義默認運行級別)
注意:*.conf為upstart風格的配置文件
重要的文件
/etc/init/control-alt-delete.conf:快捷鍵重啟的腳本,建議注釋掉,防止誤操作
/etc/init/tty.conf:重啟終端腳本
/etc/init/start-ttys.conf:登錄終端腳本
/etc/init/rc.conf:啟動腳本
/etc/init/prefdm.conf:圖像界面腳本
CentOS 7:Systemd
·init程序:Systemd
其配置文件:/usr/lib/systemd/system/* ,/etc/systemd/system/*
·完全兼容SysV腳本機制;因此,service命令依然可用;不過,建議使用systemctl命令來控制服務
# systemctl {start|stop|restart|status} name[.service]
CentOS 6系統啟動流程:
POST –> Boot Sequence(BIOS) –> Boot Loader(MBR) –> Kernel(ramdisk) –> rootfs(ro) –> switch-root –> /sbin/init –> (/etc/inittab ,/etc/init/*.conf)–> 設定默認運行級別 –> 系統初始化腳本 –> 關閉或啟動對應級別下的服務 –> 重啟終端
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/45480