按下系統的電源開關,過一會就可以看到linux的登入介面了。
你是否曾經想過,從按下電源開關到登入介面出現,這後面到底發生了什麼?
linux 系統在啟動過程中,首先是韌體(pc 上大多是 cmos/bios)的物理檢測,諸如檢測系統的顯示卡、cpu 和硬碟等,可從系統按下電源後看到此檢測資訊;檢測無問題,將讀取硬碟的mbr(主引導記錄)中的自舉程式,linux 中常用的自舉程式如 lilo 和grub。自舉程式 grub 在系統啟動期間只有乙個作用,就是載入核心,核心在引導期間有兩個主要的作用,乙個是驅動系統硬體,另乙個將啟動系統程序 init;init 程序將讀取其配置檔案/etc/inittab 完成後續所有的引導。
整個過程基本可以分為6個步驟:post-->bios-->mbr(grub)-->kernel-->init-->runlevel。下面會詳細說明每個過程的作用。
bios
bios(basic input/output system),基本輸入輸出系統,計算機開機的時候,細心的童鞋可能會發現這個單詞。該系統儲存於主機板的rom晶元上,計算機在開機時,最先讀取該系統,然後會有乙個加電自檢過程,這個過程其實就是檢查cpu和記憶體,計算機最基本的組成單元(控制器、運算器和儲存器),還會檢查其他硬體,若沒有異常就開始載入bios程式到記憶體當中。詳細的bios功能,這邊就不說了,bios主要的乙個功能就是儲存了磁碟的啟動順序,bios會按照啟動順序去查詢第乙個磁碟頭的mbr資訊,並載入和執行mbr中的bootloader程式,若第乙個磁碟不存在mbr,則會繼續查詢第二個磁碟(ps:啟動順序可以在bios的介面中進行設定),一旦bootloader程式被檢測並載入記憶體中,bios就將控制權交接給了bootloader程式。
mbrmbr(master boot record),主引導記錄,mbr儲存於磁碟的頭部,大小為512bytes,其中,446bytes用於儲存bootloader程式,64bytes用於儲存分割槽表資訊,最後2bytes用於mbr的有效性檢查。
grub
grub(grand unified bootloader),多系統啟動程式,其執行過程可分為三個步驟:
stage1:這個其實就是mbr,它的主要工作就是查詢並載入第二段bootloader程式(stage2),但系統在沒啟動時,mbr根本找不到檔案系統,也就找不到stage2所存放的位置,因此,就有了stage1_5
stage1_5:該步驟就是為了識別檔案系統
stage2:grub程式會根據/boot/grub/grub.conf檔案查詢kernel的資訊,然後開始載入kernel程式,當kernel程式被檢測並在載入到記憶體中,grub就將控制權交接給了kernel程式。
kernel
kernel,核心,kernel是linux系統最主要的程式,實際上,kernel的檔案很小,只保留了最基本的模組,並以壓縮的檔案形式儲存在硬碟中,當grub將kernel讀進記憶體,記憶體開始解壓縮核心檔案。講核心啟動,應該先講下initrd這個檔案,initrd(initial ram disk),它在stage2這個步驟就被拷貝到了記憶體中,這個檔案是在安裝系統時產生的,是乙個臨時的根檔案系統(rootfs)。因為kernel為了精簡,只保留了最基本的模組,因此,kernel上並沒有各種硬體的驅動程式,也就無法識rootfs所在的裝置,故產生了initrd這個檔案,該檔案裝載了必要的驅動模組,當kernel啟動時,可以從initrd檔案中裝載驅動模組,直到掛載真正的rootfs,然後將initrd從記憶體中移除。
kernel會以唯讀方式掛載根檔案系統,當根檔案系統被掛載後,開始裝載第乙個程序(使用者空間的程序),執行/sbin/init,之後就將控制權交接給了init程式。
init
init,初始化,顧名思義,該程式就是進行os初始化操作,實際上是根據/etc/inittab(定義了系統預設執行級別)設定的動作進行指令碼的執行,第乙個被執行的指令碼為/etc/rc.d/rc.sysinit,這個是真正的os初始化指令碼,簡單講下這個指令碼的任務(可以去看看實際指令碼,看看都做了什麼):
1、啟用udev和selinux;2、根據/etc/sysctl.conf檔案,來設定核心引數;3、設定系統時鐘;4、裝載硬碟對映;5、啟用交換分割槽;6、設定主機名;7、根檔案系統檢測,並以讀寫方式重新掛載根檔案系統;8、啟用raid和lvm裝置;9、啟用磁碟配額;10、根據/etc/fstab,檢查並掛載其他檔案系統;11、清理過期的鎖和pid檔案
執行完後,根據配置的啟動級別,執行對應目錄底下的指令碼,最後執行/etc/rc.d/rc.local這個指令碼,至此,系統啟動完成。
runlevel
runlevel,執行級別,不同的級別會啟動的服務不一樣,init會根據定義的級別去執行相應目錄下的指令碼,linux的啟動級別分為以下幾種
0:關機模式
1:單一使用者模式(直接以管理員身份進入)
2:多使用者模式(無網路)
3:多使用者模式(命令列)
4:保留
5:多使用者模式(圖形介面)
6:重啟
rhel系統啟動過程 Linux系統啟動過程簡介
1 bios加電自檢 計算機啟動後,首先會進行韌體bios的自檢,即所謂的post,然後把保持在mbr主引導記錄中的主引導引導程式到記憶體中 2 載入主引導引導程式 mbr 主引導引導程式通過分割槽表查詢活動分割槽,然後將活動分割槽的次引導引導程式從裝置讀入記憶體並執行 3 載入次引導引導程式 gr...
rhel系統啟動過程 Linux 系統啟動過程
linux系統啟動過程 linux啟動時我們會看到許多啟動資訊。核心的引導。執行 init。系統初始化。建立終端 使用者登入系統。init程式的型別 sysv init,centos 5之前,配置檔案 etc inittab。upstart init,centos 6,配置檔案 etc initta...
linux系統啟動過程
裝置上電後linux系統的啟動過程主要包括以下四個步驟 1.bios自檢 識別主機上可以啟動的裝置,一次只能從乙個裝置上啟動,如果乙個啟動裝置失效,就使用下乙個候選啟動裝置。通常是硬碟啟動。啟動駐留在硬碟主引導記錄mbr中的引導程式grub或者lilo。2.grub lilo引導啟動 如果注意中安裝...