1. 程式人生 > >CentOS5、6、7啟動具體流程

CentOS5、6、7啟動具體流程

CentOS5 啟動 具體流程

CentOS5、6系統的啟動流程
基於Intel X86架構平臺的系統啟動流程:
1.POST:Power-On Self Testing,加電自檢;
CMOS:在這裏面有一個EPROM,可擦寫可編程的只讀存儲器;在這裏面保存了一小段程序叫做BIOS程序,全稱為Basic Input Output System,基本輸入輸出系統;

主要目的:對所有的能檢測到的硬件硬件進行功能測試,保證硬件可以正常工作;保證能夠正確的使用各種硬件;
    例如:內存條沒插好或者未識別,BIOS就會一直報警,也就是蜂鳴器會一直嘟嘟的響,原來鍵盤沒插好也會報警,現在不會了都是隨接隨用的USB接口的,像光驅、硬盤、軟盤未被檢測到是不會報警的;

    1]自檢完成各硬件沒有問題以後後,接下來就會按照BIOS當中定義好的啟動順序來完成系統的啟動引導;

2.BIOS程序中,包含有BootSequence(啟動順序) 也就是你的計算機到底是從光盤引導啟動、還是從硬盤引導啟動,還是...

主要目的:決定到底從何種設備上加載操作系統內核;通常可選的設備包括:光驅,硬盤,可移動設備(U盤),網絡接口;

主要方式:按照給定的順序,依次查找各個設備,第一個被找出有引導程序(Bootloader)的設備即為本次啟動要用到的設備;

  Bootloader:引導程序,引導加載器;有一部分保存在MBR當中
    對於Linux來說一般有有兩種引導加載工具:
     1)LILO:Linux Loader;有缺陷:不支持大硬盤,超過1024個柱面的磁盤都不支持;優點:引導速度很快
     2)GRUB:GRand Uniform Bootloader,全球統一引導加載器;
     先裝Windows再裝linux照樣可以使用grub引導啟動,實現兩種系統共存,Windows 8以後就不行了;
      CentOS 6-:
      GRUB 0.x:Legacy GRUB
      CentOS 7+:
      GRUB 1.x:grub2

      GRUB提供的功能:
       1) 為用戶提供了一個可供選擇的菜單,菜單中以列表的方式列舉了各個可以引導啟動的操作系統內核;
       2) 可以將用戶選定的內核核心文件裝載到RAM中,並予以解壓縮,展開之後,將系統的控制權移交給內核;
       3) 可以提供交互式的命令行接口;
       4) 通過私密口令來保證菜單和內核啟動屬性的安全性;

  2]找到引導程序後,引導程序開始負責將內核核心文件解壓縮展開並且移交管理權,接下來就由內核掌管以後的工作了

3.內核被加載後:
進行自身的初始化:
1) 探測能夠識別到的所有的硬件設備;
2) 加載硬件的驅動程序,有可能要借助於ramdisk/ramfs加載驅動程序;
3) 以只讀的方式掛載根文件系統;
4) 在根文件系統中查找並運行第一個用戶空間中的應用程序:/sbin/init

        3]內核的加載完成,文件系統的使用完成,並且找到了真正的init程序的位置,然後管理權移交給init

4.Init:
CentOS 5中的init程序:
SysV Init
配置文件:/etc/inintab ※※※非常重要

CentOS 6中的init程序:
  Upstart Init
  配置文件:/etc/inittab現在只保存了默認的運行級別是什麽樣的這一行,幾乎被廢棄;
           更多的功能會被設置在/etc/init/*.conf

CentOS 7:
  Systemd基本上就與init沒關系了,借鑒了蘋果的MACOS引導加載方式
  配置文件:/usr/lib/systemd/system/*  

CentOS7系統的啟動流程
1.內核啟動流程:
POST(BIOS) --> BootSequence(BIOS) --> Bootloader(GRUB) --> vmlinuz(initrd|initramfs) --> rootfs(ro) --> /sbin/systemd

Init程序:systemd,與經典的init程序完全不同;

systemd的配置文件:
 /etc/systemd/system/*
 /usr/lib/systemd/system/*
  其中保存的文件,統稱為“Systemd的Unit file”

  註:/etc/inittab文件被徹底廢棄;

systemd在設計分隔上完全兼容了SysV風格的Init程序及腳本;因此,service類的命令在CentOS中依然可以被使用,但其結果是執行命令時重定向到systemctl命令上;建議使用CentOS7中systemd的服務管理命令:systemctl,來管理和控制系統服務的關閉和啟動

systemctl命令:
systemctl - Control the systemd system and service manager

  systemctl [OPTIONS...] COMMAND [NAME...]

其中:
COMMAND為子命令了,systemd實現的功能的體現;
NAME:保存了/usr/lib/systemd/system目錄下的UnitFile的文件名:可以寫完整的UnitFile名稱,可以省略後綴名稱,一旦省略後綴名,默認為service後綴;

用法:
使用systemctl系統管理服務:
systemctl {start|stop|restart|reload|status} name[.service]

 設置CentOS 7的默認運行級別
   systemctl ste-default {multi-user.target|graphical.target}

 查看CentOS 7的當前運行級別
  systemctl get-default

systemd程序引導啟動系統的特點:
1.依靠Unit File來啟動所有的服務及功能;
2.每次系統啟動,systemd只啟動自身,其余的程序如果不需要,都不啟動;

小結:
CentOS 7的用戶空間啟動流程:
systemd --> unit file --> 完成啟動

CentOS5、6、7啟動具體流程