linux mbr grub是整個linux系統(tǒng)啟動的流程,其中mbr的英文全稱是“Master Boot Record”,表示主引導(dǎo)記錄,mbr存儲于磁盤的頭部,大小為512bytes;grub的英文全稱是“Grand Unified Bootloader”,表示多系統(tǒng)啟動程序。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
linux mbr grub是什么?
詳解Linux開機(jī)流程:BIOS->MBR->GRUB等等…
概述
Linux是一種自由和開放源代碼的類UNIX操作系統(tǒng)。該操作系統(tǒng)的內(nèi)核由林納斯·托瓦茲在1991年10月5日首次發(fā)布。在加上用戶空間的應(yīng)用程序之后,成為Linux操作系統(tǒng)。Linux是自由軟件和開放源代碼軟件發(fā)展中最著名的例子。
下面簡單記錄一下Linux系統(tǒng)從開機(jī)到能使用的整個過程,以作備忘!
LINUX啟動流程
先通過一張圖來簡單了解下整個系統(tǒng)啟動的流程,整個過程基本可以分為POST–>BIOS–>MBR(GRUB)–>Kernel–>Init–>Runlevel。下面會詳細(xì)說明每個過程的作用。
BIOS
BIOS(Basic Input/Output System),基本輸入輸出系統(tǒng),該系統(tǒng)存儲于主板的ROM芯片上,計算機(jī)在開機(jī)時,會最先讀取該系統(tǒng),然后會有一個加電自檢過程,這個過程其實就是檢查CPU和內(nèi)存,計算機(jī)最基本的組成單元(控制器、運(yùn)算器和存儲器),還會檢查其他硬件,若沒有異常就開始加載BIOS程序到內(nèi)存當(dāng)中。詳細(xì)的BIOS功能,這邊就不說了,BIOS主要的一個功能就是存儲了磁盤的啟動順序,BIOS會按照啟動順序去查找第一個磁盤頭的MBR信息,并加載和執(zhí)行MBR中的Bootloader程序,若第一個磁盤不存在MBR,則會繼續(xù)查找第二個磁盤(PS:啟動順序可以在BIOS的界面中進(jìn)行設(shè)置),一旦BootLoader程序被檢測并加載內(nèi)存中,BIOS就將控制權(quán)交接給了BootLoader程序。
MBR
MBR(Master Boot Record),主引導(dǎo)記錄,MBR存儲于磁盤的頭部,大小為512bytes,其中,446bytes用于存儲BootLoader程序,64bytes用于存儲分區(qū)表信息,最后2bytes用于MBR的有效性檢查。
GRUB
GRUB(Grand Unified Bootloader),多系統(tǒng)啟動程序,其執(zhí)行過程可分為三個步驟:
Stage1:這個其實就是MBR,它的主要工作就是查找并加載第二段Bootloader程序(stage2),但系統(tǒng)在沒啟動時,MBR根本找不到文件系統(tǒng),也就找不到stage2所存放的位置,因此,就有了stage1_5
Stage1_5:該步驟就是為了識別文件系統(tǒng)
Stage2:GRUB程序會根據(jù)/boot/grub/grub.conf文件查找Kernel的信息,然后開始加載Kernel程序,當(dāng)Kernel程序被檢測并在加載到內(nèi)存中,GRUB就將控制權(quán)交接給了Kernel程序。
PS:實際上這個步驟/boot還沒被掛載,GRUB直接識別grub所在磁盤的文件系統(tǒng),所以實際上應(yīng)該是/grub/grub.conf文件,該配置文件的信息如下:
grub.conf:
#boot=/dev/sda default=0?#設(shè)定默認(rèn)啟動的title的編號,從0開始 timeout=5?#等待用戶選擇的超時時間 splashimage=(hd0,0)/boot/grub/splash.xpm.gz?#GRUB的背景圖片 hiddenmenu?#隱藏菜單 title?CentOS?(2.6.18-194.el5PAE)?#內(nèi)核標(biāo)題 root?(hd0,0)?#內(nèi)核文件所在的設(shè)備 kernel?/vmlinuz-2.6.18-194.el5PAE?ro?root=LABEL=/?#內(nèi)核文件路徑以及傳遞給內(nèi)核的參數(shù) initrd?/initrd-2.6.18-194.el5PAE.img?#ramdisk文件路徑
Kernel
Kernel,內(nèi)核,Kernel是Linux系統(tǒng)最主要的程序,實際上,Kernel的文件很小,只保留了最基本的模塊,并以壓縮的文件形式存儲在硬盤中,當(dāng)GRUB將Kernel讀進(jìn)內(nèi)存,內(nèi)存開始解壓縮內(nèi)核文件。講內(nèi)核啟動,應(yīng)該先講下initrd這個文件,
initrd(Initial RAM Disk),它在stage2這個步驟就被拷貝到了內(nèi)存中,這個文件是在安裝系統(tǒng)時產(chǎn)生的,是一個臨時的根文件系統(tǒng)(rootfs)。因為Kernel為了精簡,只保留了最基本的模塊,因此,Kernel上并沒有各種硬件的驅(qū)動程序,也就無法識rootfs所在的設(shè)備,故產(chǎn)生了initrd這個文件,該文件裝載了必要的驅(qū)動模塊,當(dāng)Kernel啟動時,可以從initrd文件中裝載驅(qū)動模塊,直到掛載真正的rootfs,然后將initrd從內(nèi)存中移除。
Kernel會以只讀方式掛載根文件系統(tǒng),當(dāng)根文件系統(tǒng)被掛載后,開始裝載第一個進(jìn)程(用戶空間的進(jìn)程),執(zhí)行/sbin/init,之后就將控制權(quán)交接給了init程序。
Init
init,初始化,顧名思義,該程序就是進(jìn)行OS初始化操作,實際上是根據(jù)/etc/inittab(定義了系統(tǒng)默認(rèn)運(yùn)行級別)設(shè)定的動作進(jìn)行腳本的執(zhí)行,第一個被執(zhí)行的腳本為/etc/rc.d/rc.sysinit,這個是真正的OS初始化腳本,簡單講下這個腳本的任務(wù)(可以去看看實際腳本,看看都做了什么):
-
激活udev和selinux;
-
根據(jù)/etc/sysctl.conf文件,來設(shè)定內(nèi)核參數(shù);
-
設(shè)定系統(tǒng)時鐘;
-
裝載硬盤映射;
-
啟用交換分區(qū);
-
設(shè)置主機(jī)名;
-
根文件系統(tǒng)檢測,并以讀寫方式重新掛載根文件系統(tǒng);
-
激活RAID和LVM設(shè)備;
-
啟用磁盤配額;
-
根據(jù)/etc/fstab,檢查并掛載其他文件系統(tǒng);
-
清理過期的鎖和PID文件
執(zhí)行完后,根據(jù)配置的啟動級別,執(zhí)行對應(yīng)目錄底下的腳本,最后執(zhí)行/etc/rc.d/rc.local這個腳本,至此,系統(tǒng)啟動完成。
Runlevel
runlevel,運(yùn)行級別,不同的級別會啟動的服務(wù)不一樣,init會根據(jù)定義的級別去執(zhí)行相應(yīng)目錄下的腳本,Linux的啟動級別分為以下幾種
0:關(guān)機(jī)模式
1:單一用戶模式(直接以管理員身份進(jìn)入)
2:多用戶模式(無網(wǎng)絡(luò))
3:多用戶模式(命令行)
4:保留
5:多用戶模式(圖形界面)
6:重啟
在不同的運(yùn)行級別下,/etc/rc.d/rc這個腳本會分別執(zhí)行不同目錄下的腳本
Run?level?0?–?/etc/rc.d/rc0.d/ Run?level?1?–?/etc/rc.d/rc1.d/ Run?level?2?–?/etc/rc.d/rc2.d/ Run?level?3?–?/etc/rc.d/rc3.d/ Run?level?4?–?/etc/rc.d/rc4.d/ Run?level?5?–?/etc/rc.d/rc5.d/ Run?level?6?–?/etc/rc.d/rc6.d/
這些目錄下的腳本只有K*和S*開頭的文件,K開頭的文件為開機(jī)需要執(zhí)行關(guān)閉的服務(wù),S開頭的文件為開機(jī)需要執(zhí)行開啟的服務(wù)。
相關(guān)推薦:《Linux視頻教程》