1. 程式人生 > >centos7啟動過程及systemd祥細說明

centos7啟動過程及systemd祥細說明

引導 ica 中斷 use level swa lock 允許 mct

開機啟過程

POST—>BOOT SEQUENCE—> BOOTLOADER—>KERNEL + INITRAMFS(INITRD)—>ROOTFS—>/sbin/init

POST:加電自檢

當開機按下電源按鈕後,計算機開始加電,主板上的BIOS或UEFI基本輸入輸出程序開始對硬件進行檢查,檢查內存,CPU等等吧,當檢測到錯誤的時候機器會中斷或者啟動不了,這個做過電腦維護的人都知道,內存氧化可導至開不了機,還有的機器如果沒插鼠標鍵盤自檢也不會通過卡在那裏了,不會繼續往下走。

Boot sequence:選擇引導順序

當自檢通過後,接著就要選擇引導介質或方式,是通過光盤啟動,硬盤啟動,網絡啟動,還是U盤啟動,這些也是在BIOS中設定的,所以設定的第一啟動項是哪個就從那個開始引導,這個裝過WINDOWS的都很熟悉了。

Bootloader:引導加載器

確定引導介質後便開始從介質中裝載引導程序如grub2,這個是一個微小程序,我們知道MBR引導記錄大小為512字節,其中前446個字節就是Bootloader,主要用來引導用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,解壓,展開,而後把系統控制權移交給內核。

grub2就是Linux中Bootloader程序,由於MBR記錄限制,所以grub2分為兩個部分:

1.在MBR引導記錄中,大小為446字節,主要功能是引導啟動介質的grub主體文件

2.partition,/boot/grub[2],此為grub的主體。

KERNEL + INITRAMFS(INITRD)—>ROOTFS :加載內核

這時候kernel開始初始化,探測可識別的硬件設備,加載硬件啟動程序。以只讀方式加載根文件系統

kernel在內存中加載時,為了模擬系統環境,會生成一個ramdisk文件,來進行下一步操作,等到加載到真正的根文件系統時,就會退出ramdisk,切換到真正的根文件系統中去。

ramdisk:內存上臨時虛擬的系統

ramdisk(虛擬磁盤,雙緩沖,雙緩存)----> ramfs(虛擬文件系統)

centos5:initrd

工具程序:mkinitrd

centos6,7:initramfs

工具程序:dracut,mkinitrd

/sbin/init:運行用戶空間的第一個應用程序

init:

Centos 5: SysV init 配置文件:/etc/inittab

Centos 6: Upstart 配置文件:/etc/inittab;/etc/init/*.conf(主要)

Centos 7: systemd 配置文件:/etc/systemd/system;/usr/lib/systemd/system

至此,內核空間就已經啟動完畢,內核啟動完成接著開始啟動用戶態啟動過程。systemd是個守護進程,pid號為1,後面所有啟動的服務或進程都是systemd的子進程及子進程的子進程。

那麽用戶態的啟動順序又是什麽樣的呢?

設置默認允許級別—>初始化腳本,完成系統初始化--->關閉及啟動對應級別下的服務----->設置登錄終端----->[啟動圖形終端]


Systemd新特性:

系統引導時實現服務並行啟動,沒有順序之分

按需激活進程

支持系統狀態快照

基於依賴關系定義服務控制邏輯

關鍵特性:

基於socket的激活機制:socket與服務程序分離;按需激活程序或服務,可並行啟動

基於bus的激活機制:

基於device的激活機制:當某個硬件設備變得可用時就可激活某設備

基於path的激活機制

系統快照:保存各unit的當前狀態信息於持久存儲設備中

向後兼容sysv init腳本

不兼容:

systemctl命令固定不變,非由systemd啟動的服務,systemctl無法與之通信

核心概念:unit

配置文件進行標識和配置,文件中主要包含了系統服務,監聽socket,保存的系統快照以及其它與init相關的信息,保存至:

/usr/lib/systemd/system

/run/systemd/system

/etc/systemd/system

unit的類型

Service unit:文件擴展名為.service 無需執行權限,用於定義系統服務

Target unit:文件擴展名為.target,用於模擬實現“運行級別”

Device unit:文件擴展名為.device,用於定義內核識別的設備

Mount unit:文件擴展名為.mount,定義文件系統掛載點

Socket unit:文件擴展名為.socket,用於標識進程間通信用的socket文件

Snapshot unit:文件擴展名為.snapshot,管理系統快照

Swap unit:文件擴展名為.swap,用於標識swap設備

Automount unit:文件擴展名為.automount,文件系統的自動掛載點

Path unit:文件擴展名為.path,用於定義文件系統中的一個文件或目錄

管理系統服務

啟動:systemctl start name.service

停止:systemctl stop name .service

重啟:systemctl restart name.service

重載:systemctl reload name.service

條件式重啟:systemctl try-restart name.service

查看某服務當前是否運行:systemctl is-active name.service

查看所有已經激活的服務:systemctl list-units –type service systemctl list-units –type service –-all

開機自啟動:systemctl enable name.service

開機不啟動:systemctl disable name.service

查看所有服務開機自啟動狀態:systemctl list-unit-files –-type service

查看服務是否開機自啟:systemctl is-enabled name.service

查看服務的依賴關系:systemctl list-dependencies name.service

禁止設定為開機自啟:systemctl mask name.service

取消禁止設定為開機自啟:systemctl unmask name.service


Target units:(模擬運行級別)

unit配置文件,以.target後輟名結尾

關機:runlevel0.target,poweroff.target

救援:runlevel1.target,rescue.target

多用戶:multi-user.target

圖形:graphical.target

重啟:reboot.target

級別切換:systemctl isolate name.target

查看級別:systemctl list-units –-type target systemctl get-default

設置級別:systemctl set-default name.target

切換至緊急救援模式:systemctl rescue

切換至emergency模式:systemctl emergency(服務不加載不啟動,驅動不加載,更徹底)

其它常命令

關機:systemctl halt,systemctl poweroff

重啟:systemctl reboot

掛起:systemctl suspend

快照:systemctl hibernate

快照並掛起:systemctl hybrid-sleep

centos7啟動過程及systemd祥細說明