CentOS系統啟動流程

2021-09-01 05:41:57 字數 4945 閱讀 2152

centos 6啟動流程:

post --> boot sequence(bios) --> boot loader (mbr) --> kernel(ramdisk) --> rootfs(readonly)–> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定預設執行級別 --> 執行系統初始化指令碼,完成系統初始化 --> 關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務 --> 啟動終端並列印登入提示符 [–> 啟**形終端]

(1)post:加電自檢(power on and self testing)

post程式存放在rom晶元的bios(basic input and output system)上,是一種cmos (互補金屬氧化物)晶元。

rom+ram是cpu可訪問的儲存空間,rom和物理記憶體ram

(2)啟動順序boot sequence

按次序查詢各引導裝置,第乙個有引導程式的裝置即為本次啟動要用到的裝置。

(3)bootloader:引導載入器,是乙個引導程式,windows和linux中的bootloader:

windows:ntloader

linux:

lilo:linux loader

grub:grand uniform bootloader(統一引導載入器)

grub 0.x:grub legacy

grub 1.x:grub2

引導程式功能:提供乙個選單,允許使用者選擇要啟動的系統或不同的核心版本,把使用者選定的核心裝載到ram中的特定空間中,解壓、展開,而後把系統控制權移交給核心。

(4)mbr:master boot record,主引導記錄

mbr位於記憶體最初的512bytes,其中前面446bytes是bootloader,中間64bytes是分割槽表,後面2bytes值為55aa,55aa表示該mbr有效,非55aa表示該mbr無效。

(5)grub

grub分為2階段,分別如下:

1)第一階段:載入bootloader;

2)第1.5階段:啟動filesystem驅動;

3)第2階段:依據/boot/grub/grub.conf配置檔案,進行磁碟分割槽。

(6)核心啟動

1)自身初始化

1 探測可識別到的所有硬體裝置;

2 載入硬體驅動程式(有可能會借助於ramdisk載入驅動);

3 以唯讀方式掛載根檔案系統,當啟動沒有問題,再改為讀寫掛載,防止核心有問題,導致資料丟失;

4 執行使用者空間的第乙個應用程式:/sbin/init

(7)init程式的型別:

centos 5-系統之前,叫做sysv init,配置檔案為/etc/inittab;

centos 6系統叫做upstart,是ubuntu研發的,配置檔案:/etc/inittab和/etc/init/ * .conf;

centos 7系統叫做systemd,配置檔案:/usr/lib/systemd/system/和/etc/systemd/system/。

(8)ramdisk

linux核心的特性之一:使用緩衝和快取來加速對磁碟上的檔案訪問。

centos 5的ramdisk叫做initrd,工具程式為mkinitrd,centos 6,centos 7將ramdisk改為ramfs,他們的ramdisk叫做initramfs,工具程式為dracut和mkinitrd,mkinitrd是乙個封裝的shell指令碼,還是利用dracut來建立的。

(9)/sbin/init

centos 5: sysv init

執行級別:為了系統的執行或維護等目的而設定的機制;

0-6:7個級別;

0:關機, shutdown或init 0;

1:單使用者模式(single user),root使用者,無須認證;維護模式;安全模式;

2:多使用者模式(multi user),會啟動網路功能,但不會啟動nfs;維護模式,帶網路功能的安全模式;

3:多使用者模式(mutli user),完全功能模式;文字介面;正常模式;

4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用;

5:多使用者模式(multi user), 完全功能模式,圖形介面;正常模式;

6:重啟,reboot

預設級別:3, 5;

級別切換:init #

級別檢視:who -rrunlevel

配置檔案:/etc/inittab

適用於centos 5系統:

每行定義一種action以及與之對應的process

id:runlevels:action:process

id:乙個任務的識別符號;

runlevels:在哪些級別啟動此任務,#,###,也可以為空,表示所有級別;

action:在什麼條件下啟動此任務;

process:任務;

action:定義任務何時啟動及如何啟動

wait:等待切換至此任務所在的級別時執行一次;

respawn:一旦此任務終止,就自動重新啟動之;

initdefault:設定預設執行級別;此時,process省略;

sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit指令碼;

例如:/etc/inittab檔案中:

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0 傳遞引數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指令碼:接受乙個執行級別數字為引數;

指令碼框架:

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

/etc/init.d/* (/etc/rc.d/init.d/*)(兩個目錄是鏈結)指令碼執行方式:

# /etc/init.d/srv_script

# service srv_script

chkconfig命令:管控/etc/init.d/每個服務指令碼在各級別下的啟動或關閉狀態。

檢視:chkconfig --list [name]

新增:chkconfig --add name

能被新增的服務的指令碼定義格式之一:

#!/bin/bash

## chkconfig: lll nn nn runlevel 啟動優先順序 關閉優先順序

# description:

刪除:chkconfig --del name

–level levels:指定要控制的級別;預設為2345;

注意:正常級別下,最後啟動的乙個服務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

tty7:5:respawn:/etc/x11/

mingetty會呼叫login程式;login是用來登入的程式,開啟虛擬終端的程式除了mingetty之外,還有諸如getty等。

centos 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) 載入額外裝置的驅動程式;

(11) 清理操作。

centos 6的init程式為upstart,但init命令依然為/sbin/init,其配置檔案為/etc/init/*.conf, /etc/inittab(僅用於定義預設執行級別)。

注意: *.conf為upstart風格的配置檔案。

rcs.conf:系統初始化指令碼;

rc.conf:啟動和關閉服務;

start-ttys.conf:啟動虛擬終端。

centos 7的init程式為systemd,配置檔案為/usr/lib/systemd/system/* ,/etc/systemd/system/ *,完全相容sysv指令碼機制,因此,service命令依然可用,不過,建議使用systemctl命令來控**務:

# systemctl name[.service]

CentOS系統啟動流程

centos6 post開機自檢 執行cmos中的bios程式,載入第乙個啟動磁碟的mbr中的bootloader 由bootloader讀取kernel 通過掛載臨時根目錄initramfs載入核心模組 驅動程式 然後解除安裝臨時根目錄,掛載真正的根目錄。啟動init程式 指定 etc initt...

CentOS系統啟動流程

雖然知識很基礎,但是對於我們理解linux的工作機制是有幫助的。因為在centos 5 centos 6以及centos 7使用的初始化程式init各不相同,雖然centos 6和centos 7也都有向後相容,但在工作機制上還是存在一些差異,所以以下主要介紹centos 5 6系統啟動流程。啟動流...

CentOS系統啟動流程詳解(一)

一 linux組成 linux kernel rootfs kernel 程序管理 記憶體管理 網路管理 驅動程式 檔案系統 安全功能 rootfs 程式和glibc 庫 函式集合,function,呼叫介面 標頭檔案負責描述 過程呼叫 procedure,無返回值函式呼叫 function 程式 ...