這個過程是開機後,BIOS或UEFI進行硬件檢查的階段linux
自檢硬件沒有問題時候,這裏以BIOS爲例,BIOS將會直接去找硬盤的第一個扇區,找到前446字節,將MBR加載到內存中,MBR將告訴程序下一階段去哪裏找系統grub引導。此階段屬於grub的第一階段。grub還有1.5階段和2階段。c#
grub第1.5和2階段,信息默認存放在扇區中,若是使用grub-install生成的2階段的文件是存放在/boot分區中的。
爲了加載內核系統,不得不加載/boot分區,而加載/boot分區,須要有/boot分區的驅動,/boot分區驅動是放在/boot分區中的,啊,咱們好像進入了死循環了,Linux是怎麼解決的呢?就是靠放在1.5階段中的數據,是放在第一個扇區後的後續扇區中,具體佔用多少字節,不太清楚,只知道1.5階段和2階段總共27個扇區。centos
mbr以後的扇區,識別stage2所在的分區上的文件系統bash
開機啓動的時候看到的Grub選項、信息,還有修改GRUB背景等功能都是stage2提供的,stage2會去讀入/boot/grub/grub.conf或者menu.lst等配置文件服務器
讀取grub.conf文件以肯定內核啓動的參數,準備啓動內核post
加載內核,核心開始解壓縮,啓動一些最核心的程序。
由於爲了讓內核足夠輕小,硬件驅動並無放在內核文件裏面,咱們能夠看到內核很小,才4M左右,咱們能夠想象Windows中的驅動,安裝系統時候還須要使用驅動軟件下載好長時間呢
所以須要使用/initramfs-2.6.32-696.el6.x86_64.img來驅動硬件centos7
內核已將啓動起來了,再調用ramdisk文件,嘗試驅動全部的硬件設備,到這一步,內核起來了,全部驅動也裝上了,所以後面的啓動就能夠交給程序了操作系統
grub中默認指定init=/sbin/init程序,能夠在grub.conf中kernel行自定義執行程序init=/bin/bash,此時能夠繞過下面步驟直接進入bash界面。
內核源代碼文件中顯示996行左右,規定了init啓動的順序,/sbin/init->/etc/init->/bin/init->/bin/sh,/bin/bash沒有寫,應該是和/bin/sh同樣code
inittab文件裏面定義了系統默認運行級別,這一步作了一些工做以下:對象
a)初始運行級別(RUN LEVEL) b)系統初始化腳本 c)對應運行級別的腳本目錄 d)定義UPS電源終端/恢復腳本 e)在虛擬控制檯生成getty,以生成終端 f)在運行級別5初始化X
系統初始化一些腳本,主要完成如下工做
a)設置主機名 b)設置歡迎信息 c)激活udev和selinux能夠在grub.conf中,kernel行添加selinux=0以關閉selinux d)掛載/etc/fstab文件中定義的文件系統 e)檢測根文件系統,並以讀寫方式從新掛載根文件系統 f)設置系統時鐘 g)激活swap設備 h)根據/etc/sysctl.conf文件設置內核參數 i)激活lvm及software raid設備 j)加載額外設備的驅動程序 k)清理操做
裏面定義的是各類服務的啓動腳本,能夠ls查看,S開頭表明開機啓動的服務,K開頭的是關機要執行的任務。#表明數字,一個數字表明一個運行級別,共7個運行級別
這裏面能夠自定義開機啓動的命令。
執行/bin/login程序,等待用戶登陸
包括掛載/etc/fstab文件中的系統,此時掛載後,就能夠切換到根目錄了
centos7表面是有「運行級別」這個概念,其實是爲了兼容之前的系統,每一個所謂的「運行級別」都有對應的軟鏈接指向,默認的啓動級別時/etc/systemd/system/default.target,根據它的指向能夠找到系統要進入哪一個模式
模式:
在CentOS6上是被叫作rc.sysint程序,初始化系統及basic.target準備操做系統
getty.target咱們也眼熟,它是啓動終端的systemd對象。若是到此步驟,系統沒有被指定啓動圖形桌面,到此就能夠結束了,若是要啓動圖形界面,須要在此基礎上啓動桌面程序