1. 程式人生 > >#23 centos5(RHEL)系列操作系統的啟動流程、與命令mkinitrd、dracut的使用

#23 centos5(RHEL)系列操作系統的啟動流程、與命令mkinitrd、dracut的使用

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的使用