400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Linux学习-70-启动引导程序(GRUB)加载内核的过程-创新互联

16.8 启动引导程序(GRUB)加载内核的过程

stage1:执行GRUB主程序

第一阶段是用来执行 GRUB 主程序的,这个主程序必须放在启动区中(也就是 MBR 或者引导扇区中)。但是 MBR 太小了,所以只能安装 GRUB 的最小的主程序,而不能安装 GRUB 的相关配置文件。这个主程序主要是用来启动 Stage 1.5 和 Stage 2 的。

stage1.5:识别不同的文件系统

Stage 2 比较大,只能放在文件系统中(分区),但是 Stage 1 不能识别不同的文件系统,所以不能直接加载 Stage 2。这时需要先加载 Stage 1.5,由 Stage 1.5 来加载不同文件系统中的 Stage 2。 Stage 1.5 不是放在文件系统中的吗?如果是,那么 Stage 1 同样不能找到 Stage 1.5。其实,Stage 1.5 没有放在文件系统中,而是在安装 GRUB 时,直接安装到紧跟 MBR 之后的 32KB 的空间中,这段硬盘空间是空白无用的,而且是没有文件系统的,所以 Stage 1 可以直接读取 Stage 1.5。读取了 Stage 1.5 就能识别不同的文件系统,才能加载 Stage 2。

stage2:加载GRUB的配置文件

Stage 2 阶段主要就是加载 GRUB 的配置文件 /boot/grub/grub.conf,然后根据配置文件中的定义,加载内核和虚拟文件系统。接下来内核就可以接管启动过程,继续自检与加载硬件模块了。

16.9 /boot/grub/目录分析
[root@CncLucZK ~]# ll /boot/grub2
total 32
#GRUB中硬盘的设备文件名与系统的设备文件名的对应文件
-rw-r--r--. 1 root root    64 Nov 26  2019 device.map
#ext2/ext3文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 e2fs_stage1_5 
#FAT文件系统的Stage 1文件
-rw-r--r--. 1 root root 13K 4月 10 21:49 fat_stage1_5
#FFS文件系统的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文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 iso9660_stage1_5
#JFS文件系统的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文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 minix_stage1_5
#ReiserFS文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 15K 4 月 10 21:49 reiserfs_stage1_5
#系统启动时,GRUB程序的背景图像
-rw-r--r--. 1 root root 1.4K 11 月 15 2010 splash.xpm.gz
#安装到引导扇区中的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文件系统的Stage 1.
-rw-r--r--. 1 root root 12K 4月 10 21:49 ufs2_stage1_5
#vstafs文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 12K 4 月 10 21:49 vstafs_stage1_5
#XFS文件系统的Stage 1.5文件
-rw-r--r--. 1 root root 14K 4月 10 21:49 xfs_stage1_5
16.10 GRUB磁盘分区表示法
硬 盘分 区Linux中的设备文件名GRUB中的设备文件名
第一块 SCSI 硬盘第一个主分区/dev/sda1hd(0,0)
第二个主分区/dev/sda2hd(0,1)hd(0,1)
扩展分区/dev/sda3hd(0,2)hd(0,2)
第一个逻辑分区/dev/sda5hd(0,4)hd(0,4)
第二块 SCSI 硬盘第一个主分区/dev/sdb1hd(1,0)
第二个主分区/dev/sdb2hd(1,1)hd(1,1)
扩展分区/dev/sdb3hd(1,2)hd(1,2)
第一个逻辑分区/dev/sdb5hd(1,4)hd(1,4)
16.11 /boot/grub/grub.conf(GRUB配置文件)内容
[root@CncLucZK ~]# vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#以上为GRUB的整体设置
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
[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

可以看到"/“分区的 UUID 和 kernel 行中的 UUID 是匹配的。注意一下 grep 后的”/“,在”/"后是有空格的。

16.12 多系统并存的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的启动分区。是第一块硬盘的第一个分区
#rootnoverify是不检测此分区的意思
makeactive
#设定分区为激活状态
chainloader +1
#把启动过程转交给此分区的第一个扇区

title CentOS (2.6.32-279.el6.i686)
root (hd0,5)
#Linux系统的/boot分区安装到了第一块硬盘的第六个分区中
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

参考文献:
Linux启动引导程序(GRUB)加载内核的过程

下一篇:Linux学习-71-GRUB手动安装方法

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:Linux学习-70-启动引导程序(GRUB)加载内核的过程-创新互联
当前链接:http://mzwzsj.com/article/ejhic.html

其他资讯

让你的专属顾问为你服务