CentOS系統啟動流程

1.png 

 

Linux系統的組成部分

  1、動態視角:內核+根文件系統
  2、靜態視角:磁盤分區+文件

Linux運行中的系統環境

  1、用戶空間:應用程序(進程或線程)
  2、內核空間:內核代碼(系統調用)

內核設計流派:

  *單內核設計:把所有功能集成于同一個程序,如:Linux
  *微內核設計:每種功能使用一個單獨的子系統實現,如:windows

Linux內核特點

  1、支持模塊化:.ko(kernel object)
  2、支持模塊運行時動態裝載或卸載

Linux內核的組成

  1、核心文件:/boot/vmlinu-VERSION-release
  2、ramdisk:中間臨時根文件系統,動態創建出來的,使用緩沖和緩存來加速對磁盤上的文件訪問
    CentOS 5:/boot/initrd-VERSION-release.img
    CentOS 6、7:/boot/initramfs-VERSION-release.img
  3、模塊文件:/lib/modules/VERSION-release

CentOS系統初始化流程(內核級別)

  POST –> BootSequence(BIOS)–> BootLoader(MBR)–> kernel(ramdisk)–> rootfs(readonly)–> /sbin/init(/etc/inittab)

第一步、POST:加電自檢,檢查硬件設備是否存在

  1、用于實現POST的代碼在主板上ROM(CMOS)芯片上。
  2、主板上的ROM(CMOS):主板上的一塊可讀寫的并行或串行FLASH芯片,是用來保存BIOS的硬件配置和用戶對某些參數的設定。(BIOS設置程序一般都被廠商整合在芯片中,因此BIOS設置有時也被叫做CMOS設置)  

第二步、Boot Sequence:按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備

  BIOS:Basic Input Output System,基本輸入輸出系統。它保存著計算機最重要的基本輸入輸出的程序、開機后自檢程序和系統自啟動程序,從CMOS中讀寫系統設置的具體信息。 其主要功能是為計算機提供最底層的、最直接的硬件設置和控制 

第三步、BootLoader:引導加載器,程序

  提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核。
    *Windows上的引導加載器:ntloader
    *Linux上的引導加載器:
      LILO:短小精悍的linux加載器,1024柱面之后無法加載,現在多用于安卓手機啟動。
      GRUB:GRand Unified Bootloader,統一引導加載器
         GRUB 0.X(CentOS 5/6):Grub Legacy
         GRUB 1.X(CentOS 7)::Grub2,完全重寫,設計理念上很大改變

MBR:Master Boot Record,主引導記錄

  ext系列及GPT系列的文件系統的bootloader都在MBR中的前446個字節,MBR為該磁盤的第一個扇區(1st stage),共512字節。

    MBR的組成:512bytes
      446bytes:bootloader
      46bytes:fat(GPT文件系統中不同)
      2bytes:55AA(分區表有效性標識)

GRUP引導階段:

  這時候就可以看到我們的Centos系統了,但是一般都不需要操作,會自動啟動系統。其實我們也可以自己手動啟動系統的。

  加載運行GRUB共可分為三步: 
    1、bootloader:1st stage,位于MBR中,為了引導2nd stage。
    2、Partition:filesystem driver,1.5stage,mbr之后的扇區,讓stage1中的bootloader能識別stage2所在在分區上的文件系統。
    3、Partition:/boot/grub,2nd stage,位于boot基本磁盤分區中,GRUB的引導程序。

  stage2及內核等通常放置于一個基本磁盤分區
    功用:
    ?。?)提供菜單、并提供交互式接口
        e:編輯模式,用于編輯菜單
        c:命令模式,交互式接口
    ?。?)加載用戶選擇的內核或操作系統
        運行傳遞參數給內核
        可隱藏此菜單
     (3)為菜單提供了保護機制
        為編輯菜單進行認真
        為啟用內核或操作系統進行認證

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

  grub的命令行接口:

	e:編輯模式,用于編輯菜單
	c:命令模式,交互式接口
	
	常用命令:
		help:獲取幫助列表
		help KEYWORD:詳細幫助信息
		find(hd#,#)/PATH/TO/SOMEFILE
		root(hd#,#)
		kernel /PATH/TO/SOMEFILE:設定本次啟動時用到的內核文件,額外還可以添加許多內核支持使用的cmdline參數
			例如:init=/path/to/init,selinux=0
		initrd /PATH/TO/INITRAMFS_FILE:設定為選定的內核提供額外文件的randisk
		boot:引導啟動選定的內核

  手動在grub命令行接口啟動系統:
    grub> root (hd#,#)
    grub> kernel /vmlinuz-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/XPMPICFILE:指明菜單背景圖片文件路徑;
	  hiddenmenu:隱藏菜單;
	  password [--md5] STRING: 菜單編輯認證;
	  title TITLE:定義菜單項“標題”, 可出現多次;用來引導多個內核或者操作系統
	      root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的“根”; 
	      kernel /PATH/TO/VMLINUZFILE [PARAMETERS]:啟動的內核
	      initrd /PATH/TO/INITRAMFSFILE: 內核匹配的ramfs文件;

 

第四步、kernel(ramdisk),加載內核

  內核會自身初始化:
    探測可識別到的所有硬件設備
    加載硬件驅動程序(有可能會借助于ramdisk加載驅動)
    以只讀方式掛載根文件系統
    運行用戶空間的第一個應用程序:/sbin/init

  ramdisk: 
    *Linux內核的特性之一:使用緩存和緩存來加速對磁盤上的文件訪問
    *輔助性文件,并非必須,這取決于內核是否能直接去的rootfs所在的設備
      目標設備驅動,例如SCSI設備的驅動
      邏輯設備驅動,例如LVM設備的驅動
      文件系統,例如xfs文件系統
 
    *ramdisk是一個簡裝版的根文件系統

用戶空間的啟動流程,/sbin/init(/etc/inittab)

  設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務–>設置登錄終端[–>啟動圖形終端]

  init程序的類型:
    CentOS 5-:SysV init
      配置文件:/etc/inittab
    CentOS 6:Upstart
      配置文件:/etc/inittab
           /etc/init/*.conf
    CentOS 7:Systemd
      配置文件:/usr/lib/systemd/system/
           /etc.systemd/system/

第五步、設置默認運行級別

  運行級別:為了系統的運行或維護等目的而設定的機制
    0-6:7個級別
      0:關機,shutdown
      1:單用戶模式(single user),root用戶無需認證,維護模式 
      2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS,維護模式
      3:多用戶模式(multti user),完全功能模式,文本界面
      4:預留級別,目前無特別使用目的,但習慣以同3級別功能使用
      5:多用戶模式(multti user),完全功能模式,圖形界面       

                     6:重啟,reboot
    默認級別:3,5
    級別切換:init #
    級別查看:who -r ,runlevel

第六步、系統初始化

  內核加載完畢,會運行init程序,init進程起來后,系統啟動的控制權移交給init進程

  /sbin/init進程是所有進程的父進程,當init起來之后,它首先會讀取配置文件/etc/inittab,進行以下工作:
    1.執行系統初始化腳本(/etc/rc.d/rc.sysinit),對系統進行基本的配置,以讀寫方式掛載根文件系統及其它文件系統,到此系統基本算運行起來了,后面需要進行運行級別的確定及相應服務的啟動;
    2.確定啟動后進入的運行級別;
    3.執行/etc/rc.d/rc,該文件定義了服務啟動的順序是先K后S,而具體的每個運行級別的服務狀態是放在/etc/rc.d/rcn.d(n=0~6)目錄下,所有的文件均鏈接至/etc/init.d下的相應文件。
    4.有關key sequence的設置
    5.有關UPS的腳本定義
    6.啟動虛擬終端/sbin/mingetty 
    7.在運行級別5上運行X

  配置文件:/etc/inittab

	
	每行定義一直action以及與之對應的process
		id:runlevels:action:process
			id:一個任務的標識符
			runlevels:在哪些級別啟動此任務;#,###,也可以為空,表示所有級別
			action:在什么條件下啟動此任務
			process:任務
		
		action:
			wait:等待切換至此任務所在的級別時執行一次
			respawn:一旦此任務終止,就自動重新啟動之
			initdefault:設定默認運行級別,此時,process省略
			sysinit:設定系統初始化方式,此處一般為指定/etc/re.d/rc.sysinit腳本
	
	例如:
		id:3initdefault:
		si::sysinit:/etc/re.d/rc.sysinit (設定系統初始化方式)
	
		l0:0:wait:/etc/rc.d/rc 0
		l1:1:wait:/etc/rc.d/rc 1 (等到運行級別為1時啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務)
		...
		l6:6:wait:/etc/rc.d/rc 6

  系統初始化腳本:/etc/rc.d/rc.sysinit
    功能:
     ?。?)設置主機名
     ?。?)設置歡迎信息
     ?。?)激活udev和selinux
     ?。?)掛載/etc/fstab文件中定義的所有文件系統
     ?。?)檢測根文件系統,并以大寫方式重新掛載根文件系統
     ?。?)設置系統時鐘
      (8)激活lvm及軟raid設備
     ?。?)激活swap設備
     ?。?0)掛載額外設備的驅動程序
     ?。?1)清理操作

第七步、關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務

在CentOS 5和6中,系統服務都被設計為一個單獨的服務腳本,可以通過運行這些腳本來管理系統服務。在/etc/rc.d/目錄下面有7個rc#.d格式的子目錄(#為0-6的整數,對應著七個系統運行級別)

  rc腳本:接受一個運行級別數字為參數

	腳本框架:
		for srv in /etc/re.c/rc#.d/K*,do
			$srv stop
		done
									
		for srv in /etc/re.c/rc#.d/K*,do
			$srv start
		done	

	K*:要停止的服務;K##*,優先級,數字越小,越是優先關閉,依賴的服務先關閉,然后關閉被依賴的
	S*要啟動的服務;S##*,優先級,數字越小越是優先啟動,被依賴的服務先啟動,而依賴的服務后啟動

	/etc/init.d/*(/etc/rc.d/init.d/*)腳本執行方式:
		# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
		# service SRV_SCRIPT {start|stop|restart|status}

  chkconfig命令:管控/etc/init.d/每個服務腳本在各級別下的啟動或關閉狀態
    查看:chkconfig –list [name]
    添加:chkconfig –add name 
    刪除:chkconfig –del name
    修改指定的鏈接類型:
      chkconfig [–level LEVELS] name <on|off|reset>
        –level LEVELS]:指定要控制的級別,默認為2345

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

第八步:啟動終端

讀取/etc/init/start-ttys.conf這個配置文件,完成啟動終端的流程。其中會判定,如果運行級別為5的話,在啟動tty1-6之后會再啟動圖像終端。

總結:系統啟動流程

  POST –> BootSequence(BIOS)–> BootLoader(MBR)–> kernel(ramdisk)–> rootfs(readonly)–> /sbin/init(/etc/inittab) –> 設置默認運行級別 –> 運行系統初始化腳本,完成系統初始化 –> 關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務 –> 設置登錄終端[–>啟動圖形終端]

 

原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/65225

(0)
641348038@qq.com641348038@qq.com
上一篇 2016-12-30
下一篇 2016-12-30

相關推薦

  • N28-第三周

    1. 列出當前系統上所有已經登入的用戶的用戶名,注意:同一個用戶登入多次,則只顯示一次即可。
    2. 取出最後登入到當前系統的用戶的相關信息。
    3. 取出當前系統上被用戶當做其默認shell的最多的那個shell。
    4. 將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改為大寫後保存至/tmp/maxusers.txt文件中。
    5. 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6. 列出/etc目錄下所有以.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中。
    7. 顯示/var目錄下一級子目錄或文件的總各數。
    8. 取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9. 將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法並完成以下練習:
    (1) 創建組distro,其GID為2016。
    (2) 創建用戶mandriva,其ID號為1005,基本組為distro。
    (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux。
    (4) 給用戶mageia添加密碼,密碼為mageedu。
    (5) 刪除mandriva,但保留其家目錄。
    (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin。
    (7) 修改slackware的默認shell為/bin/tcsh。
    (8) 為用戶slackware新增附加組admins。

    2017-12-19
  • 第二周作業

    linux 文件管理命令 rm、mv、cp rm rm命令:remove rm [OPTION]… FILE… 常用選項: -i:interactive (默認rm是‘rm -i’的別名) -f:force -r: recursive        &nb…

    Linux干貨 2016-12-08
  • 步入LINUX

    初次融入LINUX的環境。。。

    Linux干貨 2018-03-26
  • 基于ansible role實現LAMP平臺批量部署

    前言 作為運維人員,當面對幾十臺或上百臺服務器需要修改某個參數或部署某個平臺,你將從何入手呢?ansible的出現很好的解決了這一困擾,ansible基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。本文帶來的是基于Ansible Role…

    Linux干貨 2015-06-11
  • iptables/netfilter從入門到進階(Blog 17)

    博客作業:iptables/netfilter入門到進階;

    2017-12-20
  • linux grep manual

    名稱    grep – 打印匹配的行語法:     grep [option] pattern [file…]     grep [option] [-e pattern]…

    Linux干貨 2015-08-31
欧美性久久久久