13 linux系統啟動流程2

2021-08-27 00:14:01 字數 2964 閱讀 5950

前面講到了linux系統初始化的流程:

post-->bootsequence(bios)-->bootloader(mbr)-->kernel(ramdisk)-->rootfs(唯讀)-->init

這裡介紹/sbin/init如何運作?

以centos5為例:

不同的安全模式載入不同的驅動,只滿足基本的執行要求。

執行級別:為了系統的執行或維護等應用目的而設定,由init決定

0-6:7個級別

0:關機

1:單使用者模式(root,無需登陸),single,維護模式

2:多使用者模式,會啟動網路功能,但不會啟動nfs網路檔案系統,維護模式

3:多使用者模式,正常模式,文字介面(預設),

4:多使用者模式,預留級別,可同3級別

5:多使用者模式,正常模式,圖形介面

6:重啟

預設級別:

3,5切換級別:

init #

檢視級別:

who -r

runlevel 顯示上次的級別

關於配置檔案:/etc/inittab

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

id:runlevel:action:process

常用action:

wait 切換至此級別執行一次

respawn 此process終止,就重新啟動之

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

說明:rc 0 --->意味著讀取/etc/rc.d/rc0.d/

k* k##*按檔名排序,數字越小越先執行,數字越小的服務,通常為依賴到別的服務

s* s##*按檔名排序,數字越小越先執行,數字越小的服務,通常為被依賴到的服務

依賴的先執行

大概指令碼形式如下:

for srv in /etc/rc.d/rc0.d/k*;do

/etc/rc.d/rc0.d/$srv

$srv stop

done

for srv in /etc/rc.d/rc0.d/s*;do

/etc/rc.d/rc0.d/$srv

$srv start

done

一些檔案通過建立鏈結的形式存在於檔案目錄中,在每個級別中都存在相應的鏈結。

chkconfig命令:

檢視服務在所有級別的啟動或關閉設定情形

chkconfig --list可以檢視各服務在各級別下的運**況。

可以通過--level指定級別進行修改。

每個服務的配置檔案中,default-start和default-stop引數中可以對服務啟動情況進行定義

新增:sysv的服務指令碼放置於/etc/rc.d/init.d(/etc/init.d)

chkconfig --add name

格式#!/bin/bash

## chkconfig: llll nn nn

(寫到的為l,沒寫的為k)

例項:#!/bin/bash

## chkconfig: 345 66 33

# description: test srv script

echo "hello srv"

在345級別執行,啟動為第6級別,關閉為第3級別

刪除:chkconfig --del name

修改指定的鏈結型別

chkconfig [--level levels] name

--level llll:指定要設定的級別,省略時表示2345

注意:正常級別下,最後啟動乙個服務s99local沒有鏈結至/etc/rc.d/init.d乙個服務指令碼,而是指向了/etc/rc.d/rc.local指令碼,因此,不便或不需寫為服務指令碼放置於/etc/rc.d/init.d目錄,且又想開機時自動執行的命令,可直接放置於/etc/rc.d/rc.local(/etc/rc.d/rc3.d/s99local開機執行到最後一步的命令,即開機前如果需要執行的指令,直接寫在此指令碼)

到開機介面時,設定登陸終端

tty1:2345:respawn:/usr/sbin/mingetty tty1

tty2:2345:respawn:/usr/sbin/mingetty tty2

...tty6:2345:respawn:/usr/sbin/mingetty tty6

mingetty會呼叫login程式

/etc/rc.d/rc.sysinit:系統初始化指令碼

(1)設定主機名

(2)設定歡迎資訊

(3)啟用udev和selinux

(4)掛載/etc/fstab檔案中定義的檔案系統

(5)檢測根檔案系統,並以讀寫方式重新掛載根檔案系統

(6)設定系統時鐘

(7)啟用swap裝置

(8)根據/etc/sysctl.conf檔案設定核心引數

(9)啟用lvm及software raid裝置

(10)載入額外裝置的驅動程式

(11)清理操作

init流程總結:/sbin/init-->(/etc/inittab)-->設定預設執行級別--》執行系統初始指令碼,完成系統初始化-->關閉對應下需要關閉的服務,啟動需要啟動服務-->設定登陸終端

關於centos6的啟動

init程式為:upstart(ubuntu研發),其配置檔案

/etc/inittab,/etc/init/*.conf

注意:/etc/init/*.conf檔案語法遵循upstart配置檔案語法格式

Linux系統啟動流程

這是看linuxcast的筆記 linux系統啟動 使用grub引導 順序是 bios通電自檢,並找到512位元組的mbr 是grub引導的第一階段 把控制權交給mbr grub分兩個階段引導系統 第一階段mbr中的主引導引導程式加次引導載程式 第二階段次引導引導程式載入核心映像 核心映像建立進第乙...

Linux系統啟動流程

載入 bios 的硬體資訊與進行自我測試,並依據配置取得第乙個可啟動的裝置 讀取並執行第乙個啟動裝置內 mbr 的 boot loader 亦即是 grub,spfdisk 等程式 依據 boot loader 的配置載入 kernel kernel 會開始偵測硬體與載入驅動程式 在硬體驅動成功後,...

linux系統啟動流程

核心空間啟動主要流程 1 init main.c start kernel 2 init main.c rest init 3 init main.c kernel init 4 init main.c init post 核心至使用者空間啟動主要流程 openwrt使用者空間啟動主要流程 1 et...