啟動引導(dǎo)程序(Boot Loader,也就是 GRUB)會在啟動過程中加載內(nèi)核,之后內(nèi)核才能取代 BIOS 接管啟動過程。如果沒有啟動引導(dǎo)程序,那么內(nèi)核是不能被加載的。在 CentOS 6.x 中,啟動引導(dǎo)程序默認(rèn)是 GRUB,GRUB 是現(xiàn)在最為流行的啟動引導(dǎo)程序,我們也用 GRUB 來說明啟動引導(dǎo)程序的作用, initramfs 這個虛擬文件系統(tǒng)也是要靠啟動引導(dǎo)程序調(diào)用的。
成都創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序設(shè)計,十年建站對自上料攪拌車等多個行業(yè),擁有多年的網(wǎng)站制作經(jīng)驗。早期的 LILO 引導(dǎo)程序已經(jīng)不是很常見了,GRUB 相比來講有很多優(yōu)勢,主要有:
GRUB加載內(nèi)核的過程:GRUB 的作用有以下幾個:
按照啟動流程,BIOS 在自檢完成后,會到第一個啟動設(shè)備的 MBR 中讀取 GRUB。在 MBR 中用來放置啟動引導(dǎo)程序的空間只有 446 Byte,那么 GRUB 可以放到這里嗎?答案是空間不夠,GRUB 的功能非常強(qiáng)大,MBR空間是不夠使用的。那么 Linux 的解決辦法是把 GRUB 的程序分成了三個階段來執(zhí)行。
stage1:執(zhí)行GRUB主程序
第一階段是用來執(zhí)行 GRUB 主程序的,這個主程序必須放在啟動區(qū)中(也就是 MBR 或者引導(dǎo)扇區(qū)中)。但是 MBR 太小了,所以只能安裝 GRUB 的最小的主程序,而不能安裝 GRUB 的相關(guān)配置文件。這個主程序主要是用來啟動 Stage 1.5 和 Stage 2 的。
stage1.5:識別不同的文件系統(tǒng)
Stage 2 比較大,只能放在文件系統(tǒng)中(分區(qū)),但是 Stage 1 不能識別不同的文件系統(tǒng),所以不能直接加載 Stage 2。這時需要先加載 Stage 1.5,由 Stage 1.5 來加載不同文件系統(tǒng)中的 Stage 2。 Stage 1.5 不是放在文件系統(tǒng)中的嗎?如果是,那么 Stage 1 同樣不能找到 Stage 1.5。其實,Stage 1.5 沒有放在文件系統(tǒng)中,而是在安裝 GRUB 時,直接安裝到緊跟 MBR 之后的 32KB 的空間中,這段硬盤空間是空白無用的,而且是沒有文件系統(tǒng)的,所以 Stage 1 可以直接讀取 Stage 1.5。讀取了 Stage 1.5 就能識別不同的文件系統(tǒng),才能加載 Stage 2。
stage2:加載GRUB的配置文件
Stage 2 階段主要就是加載 GRUB 的配置文件 /boot/grub/grub.conf,然后根據(jù)配置文件中的定義,加載內(nèi)核和虛擬文件系統(tǒng)。接下來內(nèi)核就可以接管啟動過程,繼續(xù)自檢與加載硬件模塊了。
16.9 /boot/grub/目錄分析BIOS 在進(jìn)行完成系統(tǒng)檢測之后,就會找到第一個可以啟動的設(shè)備,并讀取該設(shè)備的 MBR(主引導(dǎo)記錄)以及加載 MBR 中的 boot loader(啟動引導(dǎo)程序),這個啟動引導(dǎo)程序可以具有菜單功能、直接加載核心文件以及控制權(quán)移交的功能等。系統(tǒng)必須要借助啟動引導(dǎo)程序,才能加載內(nèi)核,那么問題來了,MBR 只是占據(jù)整個設(shè)備的第一個扇區(qū)中,其大小也就只有 446 字節(jié)而已,但啟動引導(dǎo)程序功能這么強(qiáng)大,光程序代碼即配置數(shù)據(jù)就肯定不止 446 字節(jié),是怎么安裝的嗎?
是這樣的,Linux 系統(tǒng)將啟動引導(dǎo)程序的程序代碼運(yùn)行與配置數(shù)據(jù)加載分為以下 2 個階段:
其中,與 GRUB(啟動引導(dǎo)程序)相關(guān)的配置文件,都放置在 /boot/grub 目錄中。我們來看看這個目錄下到底有哪些文件。
[root@CncLucZK ~]# ll /boot/grub2
total 32
#GRUB中硬盤的設(shè)備文件名與系統(tǒng)的設(shè)備文件名的對應(yīng)文件
-rw-r--r--. 1 root root 64 Nov 26 2019 device.map
#ext2/ext3文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 e2fs_stage1_5
#FAT文件系統(tǒng)的Stage 1文件
-rw-r--r--. 1 root root 13K 4月 10 21:49 fat_stage1_5
#FFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4月 10 21:49 ffs_stage1_5
drwxr-xr-x. 2 root root 4096 Nov 26 2019 fonts
#GRUB的配置文件
-rw-r--r--. 1 root root 4630 Mar 9 2020 grub.cfg
-rw-r--r--. 1 root root 1024 Nov 26 2019 grubenv
drwxr-xr-x. 2 root root 12288 Nov 26 2019 i386-pc
#iso9660文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 iso9660_stage1_5
#JFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 13K 4月 10 21:49 jfs_stage1_5
#GRUB的配置文件。和grub.conf是軟鏈接,所以兩個文件修改哪一個都可以
Irwxrwxrwx. 1 root root 11 4月 10 21:49 menu.lst ->./grub.conf
#MINIX文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 minix_stage1_5
#ReiserFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 15K 4 月 10 21:49 reiserfs_stage1_5
#系統(tǒng)啟動時,GRUB程序的背景圖像
-rw-r--r--. 1 root root 1.4K 11 月 15 2010 splash.xpm.gz
#安裝到引導(dǎo)扇區(qū)中的Stage 1的備份文件
-rw-r--r--. 1 root root 512 4月 10 21:49 stage1
#Stage2的備份文件
-rw-r--r--. 1 raot root 124K 4月 10 21:49 stage2
#UFS文件系統(tǒng)的Stage 1.
-rw-r--r--. 1 root root 12K 4月 10 21:49 ufs2_stage1_5
#vstafs文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 vstafs_stage1_5
#XFS文件系統(tǒng)的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 xfs_stage1_5
Linux 系統(tǒng)分區(qū)的設(shè)備文件名的命名是有嚴(yán)格規(guī)范的,類似于 /dev/sda1 代表第一塊 SCSI 硬盤的第一個主分區(qū)。但是在 GRUB 中分區(qū)的表示方法卻完全不同,采用了類似 hd(0,0) 的方式來表示分區(qū)。
其實也很好理解,其中:
也就是說,hd(0,0) 代表的是第一塊硬盤的第一個分區(qū),和 Linux 系統(tǒng)中 /dev/sda1 的含義類似,只是不再區(qū)分是 SCSI 硬盤還是 IDE 硬盤。我們說明一下 Linux 系統(tǒng)對分區(qū)的描述和 GRUB 中對硬盤的描述。
硬 盤 | 分 區(qū) | Linux中的設(shè)備文件名 | GRUB中的設(shè)備文件名 |
---|---|---|---|
第一塊 SCSI 硬盤 | 第一個主分區(qū) | /dev/sda1 | hd(0,0) |
第二個主分區(qū) | /dev/sda2 | hd(0,1) | hd(0,1) |
擴(kuò)展分區(qū) | /dev/sda3 | hd(0,2) | hd(0,2) |
第一個邏輯分區(qū) | /dev/sda5 | hd(0,4) | hd(0,4) |
第二塊 SCSI 硬盤 | 第一個主分區(qū) | /dev/sdb1 | hd(1,0) |
第二個主分區(qū) | /dev/sdb2 | hd(1,1) | hd(1,1) |
擴(kuò)展分區(qū) | /dev/sdb3 | hd(1,2) | hd(1,2) |
第一個邏輯分區(qū) | /dev/sdb5 | hd(1,4) | hd(1,4) |
[root@CncLucZK ~]# vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#以上為GRUB的整體設(shè)置
title
CentOS (2.6.32-279.el6.i686)
root (hdO,0)
kernel /vmlinuz-2.6.32-279.el6.i686 ro root=OOID=b9a7ala8-767f-4a87-8a2b-a535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel= auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.el6.i686.img
這個文件的內(nèi)容可以分成兩部分:前 4 行為 GRUB 的整體設(shè)置;title 以下 4 行為要啟動的 CentOS 系統(tǒng)的具體配置。這里只安裝了一個系統(tǒng),如果多系統(tǒng)并存,那么每個系統(tǒng)都會有類似的 title 行存在(不一定都是 4 行)。
我們先看整體設(shè)置:
再來介紹 CentOS 系統(tǒng)的具體配置:
査詢分區(qū)的 UUID 最簡單的辦法就查詢 /ec/fstab 文件。命令如下:
[root@CncLucZK ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Nov 26 02:11:36 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9 / ext4 defaults 1 1
/www/swap swap swap defaults 0 0
可以看到"/“分區(qū)的 UUID 和 kernel 行中的 UUID 是匹配的。注意一下 grep 后的”/“,在”/"后是有空格的。
以下禁用都只是在啟動過程中禁用,是為了加速系統(tǒng)啟動的:
除了以上這樣,命令輸出信息中還包含以下內(nèi)容:
GRUB的配置文件的內(nèi)容就是這樣的,主要是 kernel 行較為復(fù)雜。不過,在這個 /boot/gmb/grub.conf 配置文件中,只啟動了一個 Linux 系統(tǒng)。如果在 Linux 服務(wù)器中 既安裝了 Linux 系統(tǒng),又安裝了 Windows 系統(tǒng),那么 GRUB 的配置文件又是什么樣子的呢?
每個系統(tǒng)都是用 title 字段來表示的,如果在服務(wù)器中又多了一個 Windows 系統(tǒng),那么在 GRUB 的配置文件中只不過就是多了一個 title 字段而已。不過要注意,我們一般建議先安裝 Windows 系統(tǒng),后安裝 Linux 系統(tǒng)。原因是 Windows 系統(tǒng)的啟動引導(dǎo)程序無法把啟動過程轉(zhuǎn)交到 Linux 系統(tǒng)的 GRUB 中,自然就不能啟動 Linux 系統(tǒng)了。如果我們后安裝 Linux 系統(tǒng),GRUB 就會安裝到 MBR 中,覆蓋 Windows 系統(tǒng)的啟動引導(dǎo)程序。而 GRUB 是可以把啟動過程轉(zhuǎn)交到 Windows 系統(tǒng)的啟動引導(dǎo)程序中的,所以 Windows 系統(tǒng)和 Linux 系統(tǒng)都可以順利啟動。
當(dāng)然,如果真的是后安裝 Windows 系統(tǒng),則也可以通過手工再安裝一次 GRUB 來覆蓋 MBR 中的 Windows 系統(tǒng)的啟動引導(dǎo)程序
查看Windows 和 Linux 雙系統(tǒng)并存的 GRUB 的配置文件是什么樣子的。命令如下:
[root@CncLucZK ~]#vi /boot/grub/grub.conf
default:0
timeout=-1
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title WinXp
rootnoverify (hd0,0)
#指定Windows XP的啟動分區(qū)。是第一塊硬盤的第一個分區(qū)
#rootnoverify是不檢測此分區(qū)的意思
makeactive
#設(shè)定分區(qū)為激活狀態(tài)
chainloader +1
#把啟動過程轉(zhuǎn)交給此分區(qū)的第一個扇區(qū)
title CentOS (2.6.32-279.el6.i686)
root (hd0,5)
#Linux系統(tǒng)的/boot分區(qū)安裝到了第一塊硬盤的第六個分區(qū)中
kemel/vmlinuz-2.6.32-279.el6.i686 ro
root=UUID=23e5c9d6-77a8-403a-8c0e2bfeffcab5ef rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd/initramfs-2.6.32-279.el6.i686.img
參考文獻(xiàn):
Linux啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章題目:Linux學(xué)習(xí)-70-啟動引導(dǎo)程序(GRUB)加載內(nèi)核的過程-創(chuàng)新互聯(lián)
本文來源:http://vcdvsql.cn/article2/ejhic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、外貿(mào)建站、品牌網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站策劃、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容