Linux系統啟動流程詳解

Linux系統從按下電源鍵開始到系統啟動要求用戶輸入用戶名,中間究竟發生什么?了解Linux系統的啟動流程,不僅有助于我們更加深入的理解linux底層設計理念,更能幫助我們再出現系統啟動故障時,迅速排查出故障原因。

本節索引:

一、Linux系統啟動流程

二、制定自己的init開機自啟動服務

三、服務相關命令

 

Linux系統從按下電源鍵開始到系統啟動要求用戶輸入用戶名,中間究竟發生什么?了解Linux系統的啟動

流程,不僅有助于我們更加深入的理解linux底層設計理念,更能幫助我們再出現系統啟動故障時,迅速排

查出故障原因。

一、Linux系統啟動流程

以下是CentOS6版本系統啟動流程圖:

注:下文中啟動流程主要適用于CentOS6之前的版本,7版本變動較大,暫不加入討論)

centos6啟動流程_gaitubao_com_watermark

CentOS6啟動流程:

1.加載BIOS的硬件信息,進行POST加電自檢

2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息

3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備

4.核心執行init程序,并獲取默認的運行信息

5.init程序執行/etc/rc.d/rc.sysinit文件

6.啟動核心的外掛模塊

7.init執行運行的各個批處理文件(scripts)

8.init執行/etc/rc.d/rc.local

9.執行/bin/login程序,等待用戶登錄

10.登錄之后開始以Shell控制主機

 

接下來我們對每一項流程詳細講解

1.POST:

Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內

存、硬盤子系統、顯示子系統、串并行接口、鍵盤、CD-ROM光驅等硬件情況檢測。

 

 

2.加載MBR:

MBR:Master Boot Record,主引導記錄

0磁道0扇區:512bytes

446bytes:boot loader

64bytes:分區表

16bytes:標識一個分區(最多4個分區)

2bytes:55AA(分區標識位)

 

bootloader:引導加載器,引導程序

主要功能有:

a)識別、加載操作系統中的核心文件,并提交到內存中運行,進而來啟動對應操作系統。

b)提供菜單信息,并將啟動管理功能轉交給其他加載程序。

 

Linux:GRUB,可引導多種操作系統

windows:ntloader,只能引導windows系統

因此建議:同一臺電腦裝多個操作系統,先裝windows,后裝Linux

 

3.GRUB:

grub0.97(老版本)

第一階段:MBR的前446字節

1.5階段:MBR后續的27個扇區,加載/boot分區文件系統驅動

第二階段:識別文件系統,加載/boot/grub目錄下的文件(備份gurb的文件)

注:grup 修復命令依賴于/boot/grub下的文件

grub-install修復命令不依賴,將自動生產gurb文件下文件,

一旦用grub命令修復后,grub-install也將依賴這些文件。

 

 

/boot/grub/grub.conf??? grub配置文件

default=0????????????????? 定義了默認啟動項

timeout=5??????????????? 定義了菜單超時時長

splashimage=(hd0,0)/grub/splash.xpm.gz??? 定義了菜單背景圖片

password –md5 口令?? 默認無此行,添加此行后需輸入正確口令才能以但用戶模式破解root口令

可用grub-md5-crypt生產md5口令

hiddenmenu???????????? 默認隱藏菜單

title?????????????????? 定義了啟動菜單,有幾個title就有幾個啟動菜單

root(hd0,0)

krenel?????????????? 定義了內核文件位置,掛載目錄

initrd???????????????? 定義了initramfs文件位置

 

 

 

 

4.加載內核Kernel:

探測可識別到的所有硬件設備

加載硬件驅動程序(借助于ramdisk加載驅動)

以只讀方式掛載根文件系統:

/boot/initramfs-VERSION-release.img文件加載根目錄文件系統驅動

? /boot/grup/grup.conf文件定義了根的位置

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

 

內核的核心文件:

/boot/vmlinuz-VERSION-release

ramdisk:輔助的偽根系統,存放輔助性的驅動模塊

CentOS 5: /boot/initrd-VERSION-release.img????? ramdisk虛擬磁盤

CentOS 6,7: /boot/initramfs-VERSION-release.img? ramfs虛擬文件系統

 

mkinitrd /boot/initramfs-`uname -r`.img `uname -r` ? ? ? ?生成新的ramfs文件

 

 

5.啟動init進程:

CentOS5:

SycV:init,redhat開發

特點:啟動服務程序時,有依賴的服務將被串行啟動,因此centos5系統啟動很緩慢

配置文件:/etc/inittab

 

CentOS6:

Upstart:init,ubantu開發

特點:守護進程間通信依賴于D-Bus進行,因此可基本實現類似并行啟動

配置文件:/etc/inittab,/etc/init/*.conf

 

CentOS7:

Systemd:systemd–>init? redhat開發

特點:服務只有在第一次被訪問到才會啟動,因此centos7系統啟動過程非???/p>

配置文件:/usr/lib/systemd/system

???????? /etc/systemd/system

 

/sbin/init CentOS6版本之前

運行級別:為系統運行或維護等目的而設定;0-6:7個級別

0:關機

1:單用戶模式(root自動登錄), single, 維護模式

2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式

3:多用戶模式,正常模式;文本界面

4:預留級別;可同3級別

5:多用戶模式,正常模式;圖形界面

6:重啟

默認級別: 3, 5

切換級別:init #

查看級別:runlevel ; who -r

 

6.讀取/etc/inittab文件

CentOS5:?????

1.定義默認啟動運行級別為3

2.定義了使用/etc/rc.d/rc.sysinit進行系統初始化

3.定義了每個運行級別執行的rc#文件

4.定義Ctrl-Alt-Delete組合鍵重啟

5.配置不斷電系統pf、pr兩種機制

6.定義了終端數量,默認6個

7.如果是5級別,則會啟動圖形化界面

注意:可利用#加注釋方法減少5選項中的終端數量,也可復制增加可登陸終端數量

建議:生產中建議關閉6選項組合鍵重啟功能,防止誤操作

 

CentOS6:

僅定義了系統默認啟動運行級別,其他項分割為單個文件執行,原來與5版本一致。

/etc/init/control-alt-delete.conf

/etc/init/tty.conf

/etc/init/start-ttys.conf

/etc/init/rc.conf

/etc/init/prefdm.conf

 

 

7.讀取/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) 清理操作

 

/etc/init.d/

存放對應服務腳本

是rc.d文件軟連接的源文件

通過執行init.d腳本,確定運行級別開啟和關閉的服務

 

8.運行/etc/rc.d/ rc[0-6].d/對應級別目錄下服務

K##*:運行級別為N時,關閉K開頭的服務;##運行次序;數字越小,越先運行;數字越小的服務,通常

為依賴到別的服務

S##*:運行級別為S時,打開S開頭的服務;##運行次序;數字越小,越先運行;數字越小的服務,通常

為被依賴到的服務

 

 

/var/lock/subsys

存放已啟動的服務名稱

 

9.運行/etc/rc.d/rc.local文件

rc.local會在所有服務啟動后作為一個兜底的服務進行啟動

注意:(1)正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個

服務腳本,而是指向了/etc/rc.d/rc.local腳本

(2)不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行

的命令,可直接放置于/etc/rc.d/rc.local文件中

(3)/etc/rc.d/rc.local在指定運行級別腳本后運行

(4)可以根據情況,進行自定義修改

 

10、執行/bin/login程序

此時,系統完成啟動,顯示請輸入用戶名、密碼

 

 

二、制定自己的init服務腳本:

方法1:

第一步:編寫服務腳本

#!/bin/bash

#chkconfig:???? 345/-???? 95???? 5???????????? 關鍵一行

生效模式:345或all? S編號? K編號

#description:test service

source /etc/init.d/functions??????????????????? 調用函數庫

case $1 in

start)

[ -f /var/lock/subsys/testsrv ] && action “testsrv is started ”

touch /var/lock/subsys/testsrv

action starting testsrv

;;

stop)

rm -f /var/lock/subsys/testsrv

action testsrv is stopped

;;

status)

[ -f /var/lock/subsys/testsrv ]&&echo testsrv is starting||echo testsrv is stopped

*)

echo “Usage:service testsrv start|stop|status”

esac

 

第二步:放入服務目錄

/etc/init.d/???????????????????????????????????????? 放入服務目錄

 

第三步:添加腳本至服務

chkconfig –add testsrv??????????????????????????? 將testsrv腳本添加至服務

 

方法2:

也可以將開機啟動服務代碼添加到:

/etc/rc.d/rc[0-6]/99Slocal中執行

 

 

三、服務相關命令

chkconfig???????? 服務狀態控制

查看服務狀態:

–list????????????????? 列出所有獨立服務

–list [name]???????????? 列出指定服務各運行模式狀態

添加腳本到服務:

–add? name?????????????????? 添加腳本到服務

注:SysV服務腳本要放置于/etc/rc.d/init.d(/etc/init.d)

#!/bin/bash

#LLLL 表示初始在哪個級別下啟動,-表示都不啟動

# chkconfig: LLLL nn nn

刪除服務:???

–del? name??????????? 刪除指定服務

修改服務狀態:?

–level 35 atd off|on?????? 將3,5模式atd服務默認開機關閉服務,不添加模式:默認2,3,4,5

 

 

 

ntsysv?????????????? 查看當前模式服務啟動狀態,*代表開機啟動

–level=3????????? 修改指定運行模式的啟動服務

 

 

 

service????????????? 手動管理服務

[name]? start|stop|restart ? ? 管理服務狀態

–status-all?????????????? 當前所有服務狀態

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98057

(0)
wangxczwangxcz
上一篇 2018-05-10
下一篇 2018-05-10

相關推薦

  • LFS實驗第一次——第一章

    環境準備:Centos6.8虛擬機 2G內存 2顆CPU 200G硬盤分區情況:/ 50G ?/boot 1G ?/swap 2G /data 30G 安裝時吧開發工具安裝上(gcc)

    2018-03-29
  • centos 7.4 實現二進制安裝mariadb-10.2.15-linux-x86_64.tar.gz mysql 數據庫

    實驗:centos 7.4 實現二進制安裝mariadb-10.2.15-linux-x86_64.tar.gz mysql 數據庫 1,檢查相應的壞境 查看下防火墻iptables和selinux 是否關閉,沒關閉先關閉。 再查看下原來主機上是否已有 mariadb 數據庫,如果有先卸載在進行安裝。 2,下載對應的二進制文件 3,準備用戶賬號,mysql,…

    Linux筆記 2018-06-05
  • K8S的安裝

    使用kubeadm安裝部署kubernetes集群: 前提:1、各節點時間同步;2、各節點主機名稱解析:dns OR hosts;3、各節點iptables及firewalld服務被disable; 一、設置主節點安裝程序包 1、生成yum倉庫配置: 主管理節點上的yum倉庫的配置: 先配置安裝docker倉庫: [docker]name=dockerbas…

    2018-08-08
  • joke

    后續進行修改

    Linux筆記 2018-04-08
  • 第七周

    總結

    Linux筆記 2018-05-13
  • 第四周博客作業

    用戶權限和正則表達式grep相關

    Linux筆記 2018-03-29
欧美性久久久久