系統啟動流程相關概念

前言:

了解系統內核基本知識

  • 內核功能:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能等 

    • 用戶空間:應用程序其中有進程或者線程

    • 運行中的系統可分為兩層:內核空間、用戶空間 

  • 內核設計流派: 

    • 單內核設計:把每種功能集成于一個程序中;例如:linux

    • 微內核設計:每種功能使用一個單獨的子系統實現;例如:Windows,Solaris

linux內核的特點: 
支持模塊化:.ko(kernel object) 
支持模塊運行時動態裝載和卸載; 

其中linux內核的組成部分: 
核心文件:/boot/vmlinuz-VERSION-release 
ramdisk: 
centos5:/boot/initrd-VERSION-release.img 
centos6和7:/boot/initramfs-VERSION-release.img 
模塊文件:/lib/modules/VERSION-release

系統啟動流程

  • 簡單描述:

    系統初始化流程: 
    內核級別: POST–>Bootsequence(BIOS)–>Bootloader(MBR)–>kernel(ramdisk)–>rootfs(readonly)–>/sbin/init(/etc/inittab) 
    用戶級別: 設置默認運行級別–>運行系統初始化腳本,完成系統初始化rc.sysinit–>關閉對應級別下面要停止的服務,啟動對應級別下面要開啟的服務–>設置登錄終端–>[]啟動圖像終端]

  • 詳細介紹:

    POST:開機自檢<加電自檢>完成對硬件的檢測;是BIOS功能的一個主要部分,負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串并行接口、鍵盤、CD-ROM光驅等硬件情況的檢測;如某些硬件出現錯誤無法通過檢測就導致系統無法啟動,POST完成之后將被清出內存;

    Bootsequence(BIOS):按次序查找引導設備,第一個有引導程序的設備就是本次啟動用到的設備。進行設備的枚舉和初始化,按CMOS的設置所有處于活動狀態并且可引導的設備(floppy、CD-ROM、USB、DISK、NFS),加載主引導記錄(MBR)到內存中,然后BIOS將控制權給下一步BOOTLOADER;BOOTLOADER(MBR):引導加載器,程序;MBR前446bytes; 
    功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開;而后把系統控制權移交給內核;

    kernel 內核自身初始化
    啟動init進程

    init 以守護進程方式存在,是所有其他進程的祖先(PID=1),init 進程非常獨特,能夠完成其他進程無法完成的任務。 
    程序類型: 
    CentOS5-sysv init 
    配置文件:/etc/inittab 
    CentOS6:upstart(并發啟動) 
    配置文件:/etc/inittab/etc/init/*.conf 
    CentOS7systemd 
    配置文件:/usr/lib/systemd/system/ /etc/systemd/system/*

    • 系統進入runlevel

    • 運行系統初始化腳本/etc/rc.d/rc.sysinit

    • 運行指定運行級別對應的目錄下的腳本,/etc/rc.d/rc#.d/目錄下的服務腳本

    • 捕獲組合鍵的定義

    • 定義電源 fail/restore腳本

    • 啟動 getty 和虛擬控制臺

    • 用戶級別:init通過讀取/etc/inittab文件來完成系統初始化過程: 

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

    • 加載設備驅動程序(有可能會借助ramdisk加載驅動);

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

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

    • LILO:LInux LOader (無法支持大硬盤分區)

    • GRUB 0.X:[centos5,6] grub legacy (經典),各種安卓手機使用 ;

    • GRUB 1.X:[centos7] grub2 

    • Windows:ntloader,僅是啟動OS

    • Linux: 

  • linux內核特征之一:使用緩沖和緩存來加速對磁盤上的文件進行訪問;

    • ramdisk-(磁盤)轉換成ramfs(文件系統),提高速度;

    • centos5 :initrd,工具程序:mkinitrd

    • centos6,7initramfs,工具程序:dracut,mkinitrd


工作原理介紹:

MBR(master boot record)主引導記錄

MBR共有512bytes,其中446bytes為主引導記錄bootloader,另外的64bytes為分區表fat,其中包含4個分區表記錄,以16bytes為一個分區劃分記錄,最后2bytesMBR的有效性檢測55AA

GRUB(bootloader)

grub:Grub unified bootloader,grub向用戶提供了更好的開機體驗,加入了開機的菜單、開機圖片等更多的功能,而這種功能bootloader不能提供,grub分為三個階段(grub legacy):

  • 一階段: primary boot loader1st stage 分區引導加載 
    功能:此階段在bootloader中,bootloader不在直接加載內核,而是加載grub的第二階段;bootloader備份在了/boot/grub/stage1

  • 二階段:paritionfilesystem driver1.5stage 文件系統接口。功用:提供文件系統驅動,方便虛擬系統的生成,讓stage1中的bootloader能識別stage2所在分區上的文件系統;

  • 三階段:partition /boot/grub2nd stage,分區文件,不支持復雜邏輯軟raid等,僅支持基本分區(內核文件只能放在基本磁盤分區上),通過讀取 /etc/grub.conf 文件,顯示出內核列表,指定了內核鏡像和 initrd所在的分區為root,設定內核參數,并加載vmlinuzinitramfs這兩個文件到內存中。在這一階段可以編輯啟動項目。如指定根分區root,內核kernel,initrd鏡像等;也可以進入grub command line手動寫啟動信息。 
    功用:1、提供菜單、并提供交互式接口;[e:編輯模式,用于編輯菜單;c:命令接口];2、加載用戶選擇的內核或操作系統允許傳遞參數給內核,可隱藏此菜單;3、為菜單提供保護機制,為編輯菜單進行認證,為啟動內核或操作系統進行認證;

GRUB管理開機啟動的過程分成了三個階段.。tage1主要負責BIOSGRUB之間的交接。這部分才是真正放在MBR中的bootloader。而后stage1.5是連接stage1stage2之間的通道,起著過渡的作用。最后才是GRUB中真正核心的部分stage2,它可以讓用戶以選項的方式將操作系統加載、修改選項和內核參數。

kernel工作方式:

工作原理:當內核映像被加載到內存中,并且stage2 的引導加載程序釋放控制權之后,內核階段就開始了,內核在完成自身的初始化之后進行探測可識別的所有硬件設備,由于內核中只包含了少量的硬件驅動,此時會借助內存中的initrd根文件系統加載相關驅動程序。當內核具備訪問根文件系統功能時(rootfs),initrd根文件系統將被卸載,并掛載真正的根文件系統。這就是內核的初始化過程,系統已經脫離了 /boot 分區,獨立存活在內存中。

  • vmlinuz-xxx內核鏡像是一個 zImage(壓縮映像,小于 512KB)或一個 bzImage(較大的壓縮映像,大于 512KB),它是使用zlib 進行壓縮過的內核文件。

  • initramfs-xxx.img是由stage2 引導加載程序加載到內存中的,它會被復制到 RAM 中并掛載到系統上。這個 initrd 會作為 RAM 中的臨時根文件系統使用,并允許內核在沒有掛載任何物理磁盤的情況下完整地實現引導。initrd文件包括可加載模塊的驅動程序,為內核提供可訪問磁盤和磁盤上的文件系統的接口,并為其他硬件提供了驅動程序。由于根文件系統是磁盤上的一個文件系統,因此內核通過initrd取得根分區的訪問,并掛載真正的根文件系統。這是一個解包的initramfs鏡像文件。


用戶級別啟動

  • 首先系統通過讀取/etc/inittab文件來完成系統的初始化過程;

  • inittab文件 

inittab文件表示的為系統init初始化程序用到的配置文件。這個文件負責設置init初始化程序初始化腳本在哪里;每個運行級初始化時運行的命令; 開機、關機、重啟對應的命令;各運行級登陸時所運行的命令。 
inittab文件中,每一行定義一種action以及與之對應的process. 

  • 基本格式idrunlevelsactionprocess 

  • ID:一個任務的標識符; 

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

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

  • process:執行的任務;

runlevel :Sysvinit 讀取 /etc/inittab 文件中是否含有 initdefault’項,有則init 將啟動默認運行的模式。如果沒有默認的運行模式,將進入系統控制臺,手動決定進入何種運行模式。

  • 一共有7個(0-6)運行級別: 
    0:關機,shutdown; 
    1:單用戶模式(singler user),root用戶無須認證,此為維護模式; 
    2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS,維護模式; 
    3:多用戶模式(Full multiuser mode),完全功能模式,文本界面; 
    4:預留級別:目前無特別適合目的,但習慣以同3級別功能使用; 
    5:多用戶模式(multi user),完全功能,圖形界面; 
    6:重啟,reboot; 
    其中默認級別35 
    級別切換:init命令 
    級別查看:who -r、runlevel

  • 其中ACTION常見的有4中動作: 
    1、wait:等待切換至此任務所在的級別時執行一次; 
    2、respawn:一旦此任務終止,就自動重新啟動之; 
    3、initdefault:設定默認運行級別; 
    4、sysinit:設定系統初始化方式,此處一般指定/etc/rc.d/rc.sysinit

系統初始化腳本:/etc/rc.d/rc.sysinit

此文件初始化過程中主要功用:

  1. 設置主機名

  2. 設置歡迎信息

  3. 激活UDEVSELINUX

  4. 掛載/etc/fstab文件中定義的所有文件系統

  5. 檢測根文件系統,并以讀寫方式重新掛載根文件系統

  6. 設置系統時鐘

  7. 根據/etc/sysctl.conf文件的設置,來設置內核參數

  8. 激活lvm軟raid設備

  9. 激活swap設備(此操作在fstab中以執行)

  10. 加載額外設備的驅動文件

  11. 清理操作(過去的lockpid文件)

/etc/rc.d/rc 和/etc/rc.d/rc#.d/ 介紹

  1. rc是個腳本,后面接參數。如: 
    l5:5:wait:/etc/rc.d/rc 5 
    wait意味著init系統將等待rc啟動服務腳本 
    i0:0:wait:/etc/rc.d/rc3 
    意味著去啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務

  2. rc 根據 runlevel 執行rc#.d目錄下啟動腳本。每個 runlevel 都有一個對應的 rc#.d 目錄; 
    其中在這些目錄下存放著很多不同的腳本,文件名以 S 開頭的腳本表示在當前runlevel中啟動,K開頭的腳本表示不在當前runlevel中啟動; 
    K*:要啟動的服務;K##*,優先級,數字越小,越先關閉;依賴的服務先關閉,而后關閉被依賴的; 
    S*:要啟動的服務;S##*,優先級,數字越小,越是優先啟動;被依賴的服務先啟動,而依賴的服務后啟動;

  3. /etc/rc.d/rc#.d 目錄下的腳本其實都是一些軟鏈接文件,真實的腳本文件存放在/etc/init.d目錄下,也就是說在/etc/init.d目錄下的文件會自動以S##scriptK##script的軟鏈接存在于各 runlevel 的目錄下

  4. /etc/rc.d/rc.local 
    正常級別下,最后啟動的一個服務S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local(/etc/rc.local)腳本;因此,不便或不需為服務腳本的程序期望能開機自動運行時,直接放置此腳本文件中即可;

init在等待/etc/rc.d/rc執行完畢之后,將在指定的各個虛擬終端上運行/sbin/mingetty,等待用戶的登錄。 至此,Linux的啟動完成
  • tty1:2345:respawn:/usr/sbin/mingetty tty1 
    … 
    tty6:2345:respawn:/usr/sbin/mingetty tty6 
    注意: 
    1、mingetty調用login程序; 
    2、打開虛擬終端的程序出了mingetty之外,還有諸多getty等;


命令行中的操作:

gurb的命令行接口操作

help:獲取幫助列表 
help KEYWORD:獲取詳細幫助信息 
find (hd#,#) /path/to/somefile 
root (hd#,#) 
kernel /path/to/kernel_file:設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數 
例如: 
init=/path/toinitselinux=0 
initrd:/path/to/initramfs_file:設定為選定的內核提供額外文件的ramdisk; 
boot:引導啟動選定的內核;

  • 如何識別設備: 
    (hd#,#) 
    hd#:磁盤編號,用數字標示:從0開始編號 
    #:分區編號,用數字標示;從0開始編號 

手動在grub命令行接口啟動系統: 
grub> root(hd#,#) 
grub> kernel /vmlinuxz-VERSION-RELEASE ro root/dev/DEVICE 
grub> initrd /initramfs-VERSION-release.img 
grub> boot


在配置文件中操作: 
配置文件:/boot/grub/grub.conf 
配置項: 
default=#:設定默認啟動的菜單項:菜單項(title)編號從0開始 
timeout=#:指定菜單項等待選項選擇的時長; 
splashimage=(hd#,#)/PATH/TO/XPAM_PIX_FILE:指明菜單背景圖片文件路徑; 
hiddenmenu:隱藏菜單; 
password [--md5] STRING:菜單編輯認證; 
title TITLE:定義菜單項”標題”,可出現多次; 
root(hd#,#):grub查找stage2kernel文件所在設備分區;為grub的”” 
kernel /PATH/TOVMLINUZ_FILE [PARAMETERS]:啟動的內核 
initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件; 
password [--md5] STRING:啟動選定的內核或操作系統時進行認證;(grub-md5-crypt)

進入單用戶模式:
  1. 編輯grub菜單(選定要編輯的title,而后使用e命令);

  2. 在選定的kernel后附加

  3. sSsingle都可以

  4. kernel所在行,鍵入b命令

安裝grub

  1. 在系統中安裝: 
    grub-install 
    grub-install --root-directory=ROOT /dev/DISK

  2. 在grub表中安裝: 
    grub 
    grub> root (hd#,#) 
    grub> setup (hd#)

原創文章,作者:N22-白蟻,如若轉載,請注明出處:http://www.www58058.com/47130

(0)
N22-白蟻N22-白蟻
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • LNMP安裝過程中出現的問題及解決方法

    一、背景介紹    操作系統版本:centos6.8    nginx版本:nginx-1.10.2            mysql版本:mysql5.7.16    php版本:php5.6.28   由于mysql和php的…

    Linux干貨 2016-11-23
  • shell腳本編程之補充知識點

    一、處理用戶輸入   shell中使用read命令來實現與用戶的交互輸入。   格式:read [options] 變量    常用選項:      -p “提示信息”:顯示提示信息;      -t #:等待用戶輸入的秒數;     &n…

    Linux干貨 2016-02-14
  • 高級文件系統管理

    高級文件系統管理 配置配額系統 在內核中執行 以文件系統為單位啟用 對不同組或者用戶的策略不同 根據快或者節點限制,軟限制 soft 硬限制hart 初始化 分區掛載選項 usrquota,grgquota 初始化數據庫:quotacheck 執行配置 開啟或者取消 quotaon ,quotaoff 直接編輯配額 edquota username 在she…

    Linux干貨 2017-05-03
  • Linux中基礎且常用的指令介紹及示例

    首先需要明確的是:Linux中無論是指令還是選項或者參數,請認真對待字母大小寫。Linux中通用的命令使用方式是:命令 [選項] [參數] 1. pwd pwd:print name of current/working directory,即打印當前的目錄(工作目錄),光桿處于哪個目錄下就會在終端上輸出當前路徑的絕對路徑。用法示例: [lanti…

    Linux干貨 2016-10-30
  • LINUX 下正確關機方法

    Linux下正確關機方法 Table of Contents 1關機前 1.1觀察系統使用 1.2通知在線使用者關機 2關機 2.1 sy 2.2 shutdo 2.3 rebo 2.4 ha 2.5 powero 3執行 3.1等級 3.2等級 1關機前準備 1.1觀察系統使用狀態 誰在線:who 聯網狀態:netstat -a 后臺執行的程序:ps -a…

    Linux干貨 2017-08-21
  • http加速器varnish

    一、web緩存概述       緩存,又稱加速器,用于加速運行速度較快的設備與較慢設備之間的通信?;诔绦虻倪\行具有局部性特征其能實現加速的功能:       時間局部性:一個數據被訪問之后,在隨后較短的時間內有可能被訪問。   &nbsp…

    2016-11-18
欧美性久久久久