#23 centos5(RHEL)系列操作系統的啟動流程、與命令mkinitrd、dracut的使用
centos(RHEL)系列操作系統的啟動流程:Intel x86兼容架構;
Linux的系統組成:內核 + 應用程序 GUN/Linux:單純的指Linux內核;
從硬盤存儲和啟動操作系統的角度:
Linux的系統組成:內核 + 根文件系統(rootfs)
內核功能:進程管理,文件系統管理,內存管理,網絡協議,驅動程序,安全功能,...
Linux系統的系統運行環境可以分為兩部分;
內和空間:內核代碼(系統調用)
就是內核進程占用的CPU和內存資源的總和;
用戶空間:應用程序(進程或線程)
就是各種存儲於文件系統中的應用程序,在發起為進程或線程之後,占據的CPU和內存資源的總和;
操作系統內核的設計流派:
單內核設計:
所有的功能全部集中於同一個程序;運行時表現為一個進程;
Linux就是單內核設計
Linux,我們不需要他成為最先進的,我們只是要使用它;
微內核設計:
每種功能使用一個單獨的子系統來實現;
Windows,Solaris都是微內核審計
Linux內核的特點:
單內核 + 模塊化:內核之中的功能更 + 各種模塊提供的功能之和;
為了能夠提高工作效率,會為速度比較慢的iO設備提供緩沖和緩存;
Linux內核的組成部分:
內核核心文件:
/boot/vmlinuz-VERSION-release
centos5:
/boot/vmlinuz-2.6.18-398.el5
centos6:
/boot/vmlinuz-2.6.32-573.el6.x86_64
centos7:
/boot/vmlinuz-3.10.0-327.el7.x86_64
最新的內核版本:4.13-rc1
內核模塊文件:
/lib/modules/KERNEL_VERSION/kernerl/
ramdisk:
centos 5:
/boot/initrd-2.6.18-398.el5.img
centos 6/7:
/boot/initramfs-2.6.32-573.el6.x86_64
/boot/initramfs-3.10.0-327.el7.x86_64.img
centos 5/6:
生成ramdisk的工具:mkinitrd
centos 7:
生成ramdisk的工具:dracut mkinitrd
rd和ramfs:
ramdisk:雙緩沖和雙緩存;
ramfs:提高效率,避免雙緩沖和雙緩存;
centos系列操作系統的啟動流程(2)
基於x86架構兼容平臺研究系統啟動流程;
1.post:power-on self test,加電自檢;
ROM:read-only memory,只讀存儲器;
CMOS:BIOS,basic input and output system,基本輸出輸出系統;
X76架構的CPU可以線性尋址的物理孔村空間:ROM + RAM
2.bootsequence:啟動順序;
作用:決定到何種硬件設備上加載操作系統;
方式;按照指定的次序查找各個引導設備,第一個被找出有引導程序的設備即為本次啟動要用到的設備;
BootLoader:引導加載器,程序;
MBT:
master(main)boot recorn:
0磁道0扇區:
446byte:BootLoader
64byte:fat,file allocation table;
2byte:magic-number,55AA,表示MBR有效;
GPT:
Windows:NTLDR
Linux:
Lilo:Linux loader,有缺陷,不能支持大硬盤;不超過1024柱面;
grub:grand uniform BootLoader,全球統一引導加載器;
centos 6-:
grub 0.x:grub legacy
centos 7:
grub 1.x:grub2
grub提供的功能:
1.為用戶提供一個菜單,菜單中列舉的是各個可以啟動的操作系統內核;
2.可以將用戶選定的內核核心文件裝載到RAM中,解壓縮並展開,將系統控制權移交給內核;
3.交互式的命令行接口;
4.菜單及內核啟動的安全保障;
3.內核的啟動:
自身初始化:
1.探測能夠識別到的所有的硬件設備;
2.加載硬件的驅動程序,有可能會借助於ramdisk加載驅動;
3.以只讀的方式掛載根文件系統;
4.運行用戶空間的第一個應用程序:/sbin/init
4.init:
init程序的類型:
centos 5:sysV init
配置文件:
/etc/inittab
centos 6:upstart init
配置文件:
/etc/inittab(幾乎被廢棄);
/etc/init/*.conf
centos 7:systemd
配置文件:
/usr/lib/systemd/system/*
/etc/systemd/system/*0
小結:
系統初始化流程(內核級別)
post --> bootsequence(BIOS)--> BootLoader(MBR)--> kernel(內核核心文件,只能放置在基本分區上)-->
[ramdisk] --> rootfs(read-only)--> /sbin/init
centos 5的sysV init的工作過程;
centos 5 sysV init:
運行級別(run level):為了系統的運行或維護等目的而設置的管理機制;
0-6:七個運行級別;
# 0 - 關機,halt,shutdown;
# 1 - 單用戶模式(single user mode),root,無需驗證;維護模式;
# 2 - 多用戶模式(multiuser),會啟動網絡功能;但是不會啟動NFS,維護模式;
# 3 - 多用戶模式(full multiuser mode),完全的功能模式,僅使用CLI,不激活GUI;
# 4 - 預留級別,目前無特別使用的目錄;但是習慣上認為與3運行級別相同;
# 5 - 多用戶模式(full multiuser mode),完全的功能模式,默認激活GUI和CLI,默認使用的是GUI;
# 6 - 重啟,reboot
通常會使用3,5運行級別作為此次系統啟動的默認運行級別;
查看當前系統的運行級別;
who -r
runlevel
切換運行級別:
init [0-6]
init的配置文件:/etc/inittab,此配置文件有如下功能:
1.在整個系統初始化的過程中要做那些任務;
啟動或關閉哪些後臺服務;
如何進行系統初始化;
在驗證用戶的身份無誤之後,如何為用戶提供登錄提示符,還要區分是圖形界面還是文件界面;
當備用電源失效或重新生效時,如何指揮系統操作;
定義了按下“Ctrl + Alt + delete”組合鍵時,系統將采取什麽行為;
2.所有規定的任務如何執行;
每一行定義一種操作,格式如下:
id:runlevels:action:process
id:一種操作的唯一標識符;
l#,id,pf,pr,#,x,
runlevel:指定任務執行所依賴的運行級別;
####,#,留空,
action:在何種條件下啟動此任務;
wait:等待切換至此任務所在的運行級別時,運行一次;
respawn:一旦此任務結束,就自動重新啟動此任務;
initdefault:用於設定默認的運行級別,通常後面的process省略
sysinit:設置系統初始化的方式,一般情況下此處運行/etc/rc.d/rc.sysinit腳本;
powerfail:
powerokwait:
ctrlaltdel:
/etc/rc.d/rc.sysinit:
1.設置主機名稱;
2.設置啟動的歡迎信息;
3.激活udev和selinux;
4.掛載/etc/fstab文件中定義的所有有效文件系統;
5.激活各個swap設備;
6.檢測rootfs,並且以讀寫的方式重新掛載rootfs;
7.設置系統時間;
8.根據/etc/sysctl.conf文件設置內核參數;
9.激活lvm和軟raid等高級邏輯設備;
10.加載額外的設備的驅動程序;
11.完成清理工作;
/etc/rc.d/rc:
根據特定的運行級別,啟動或關閉/etc/rc.d/rc$runlevel.d/*
K*:要停止的服務;K後面的兩位數字表示優先級;數字越小優先級越高;依賴其他服務的服務應該優先關閉,被其他服務依賴的服務應該稍後關閉;
S*:要啟動的服務;S後面的兩位數字表示優先級;數字越小優先級越高;被其他服務依賴的服務應該優先開啟,依賴其他服務的服務應該稍後開啟;
rc腳本實際上可以接收一個運行級別作為其參數運行內容的;
腳本框架:
for i in /etc/rc.d/rc#.d/K* ; do
$i stop
done
for i in /etc/rc.d/rc#.d/S* ; do
$i start
done
mkinitrd:建立要載入ramdisk的映像文件,以供Linux開機時載入ramdisk。
選項:
-f:若指定的映像問家名稱與現有文件重復,則覆蓋現有的文件;
-v:執行時顯示詳細的信息;
--omit-scsi-modules:不要載入SCSI模塊;
--preload=<模塊名稱>:指定要載入的模塊;
--with=<模塊名稱>:指定要載入的模塊;
--version:顯示版本信息。
例子:
mkinitrd -v -f myinitrd.img $(uname -r)
dracut:建立要載入ramdisk的映像文件,以供Linux開機時載入ramdisk。
例子:
dracut /boot/initramfs-$(uname -r).img $(uname -r)
#23 centos5(RHEL)系列操作系統的啟動流程、與命令mkinitrd、dracut的使用