理解操作系统的引导顺序是系统管理员进行故障排查和性能优化的基石,对于CentOS 6这一经典版本而言,其引导流程具有鲜明的时代特征,主要依赖于GRUB Legacy引导加载器和Upstart初始化系统,本文将详细解析从按下电源键到系统登录提示符出现的完整过程。
第一阶段:POST与BIOS初始化
当计算机通电后,首先执行的是开机自检(Power-On Self-Test, POST),此阶段由主板上的BIOS(基本输入/输出系统)或UEFI固件负责,主要任务是检测硬件设备(如CPU、内存、显卡等)是否正常,POST完成后,BIOS会根据预设的引导顺序(Boot Sequence)查找可引导设备,这个顺序通常可以在BIOS设置中进行调整,常见的引导设备包括硬盘、光驱、U盘或网络。
当BIOS找到第一个可引导的硬盘时,它会读取该硬盘的第一个物理扇区,即主引导记录(MBR),并将其加载到内存中,然后将控制权交给MBR中的代码。
第二阶段:MBR与GRUB引导加载器
MBR的大小仅为512字节,空间非常有限,它包含两部分内容:一部分是分区表(DPT),用于记录硬盘的分区信息;另一部分是引导程序代码,在CentOS 6中,这部分代码是GRUB(GRand Unified Bootloader)的第一阶段引导程序(Stage 1)。
Stage 1的主要任务非常单纯:找到并加载GRUB的第二阶段引导程序(Stage 2),由于Stage 1无法识别文件系统,它通常会在MBR之后的扇区(或称为“MBR gap”)中查找Stage 2。
Stage 2是GRUB的核心,它能够读取文件系统,它会去解析/boot/grub/grub.conf
配置文件,根据此文件的内容在屏幕上显示操作系统选择菜单(如果配置了多个系统),用户可以选择要启动的内核,或者在倒计时结束后自动启动默认项。
grub.conf
是CentOS 6引导配置的核心,一个典型的示例如下:
default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenuCentOS (2.6.32-754.el6.x86_64) root (hd0,0) kernel /boot/vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_LVM_LV=vg_centos6/lv_swap rd_NO_MD quiet initrd /boot/initramfs-2.6.32-754.el6.x86_64.img
default
: 指定默认启动的title条目(从0开始计数)。timeout
: 菜单等待时间(秒)。: 定义一个启动项的名称。kernel
: 指定内核文件路径(vmlinuz
)以及传递给内核的参数,如根文件系统位置(root=
)。initrd
: 指定初始RAM磁盘文件路径。
第三阶段:内核加载与initramfs
根据用户的选择或默认配置,GRUB将指定的内核文件(vmlinuz
)和初始RAM磁盘镜像(initramfs
)从硬盘加载到内存中,随后,内核开始解压并运行。
内核首先会进行硬件初始化,然后挂载initramfs
。initramfs
是一个临时的根文件系统,它包含了访问真实根文件系统所必需的驱动程序和工具,如果真实的根文件系统位于LVM逻辑卷或RAID阵列上,那么相应的驱动和工具就必须包含在initramfs
中,内核利用initramfs
中的工具挂载真实的根文件系统(如/dev/mapper/vg_centos6-lv_root
)。
第四阶段:启动进程与Upstart
当真实根文件系统成功挂载后,内核会执行其中的第一个进程——/sbin/init
,在CentOS 6中,init
进程是Upstart,一个基于事件的、用以替代传统SysV init的初始化系统。
Upstart启动后,会首先读取/etc/inittab
文件,尽管Upstart是事件驱动的,但它仍然使用inittab
来设置系统的默认运行级别(runlevel)。id:5:initdefault:
表示系统默认启动到图形化多用户模式(运行级别5)。
第五阶段:系统服务启动
确定了默认运行级别后,Upstart会触发相应的事件,并执行/etc/rc.d/rc
脚本,并将运行级别作为参数传递给它(例如/etc/rc.d/rc 5
),该脚本会进入/etc/rc.d/rcN.d/
目录(N为运行级别),并按照文件名顺序执行其中的所有启动脚本。
这些脚本是符号链接,指向/etc/init.d/
目录下的实际服务脚本,文件名以S
(Start)开头的表示启动该服务,以K
(Kill)开头的表示停止该服务,后面的数字决定了执行顺序,数字越小越早执行。
当所有指定运行级别的服务脚本都执行完毕后,系统引导过程基本结束,用户将看到登录界面(字符或图形)。
下表小编总结了CentOS 6中常见的运行级别及其用途:
运行级别 | 描述 |
---|---|
0 | 关机 |
1 | 单用户模式,用于系统维护 |
2 | 多用户模式,无NFS网络文件系统 |
3 | 完全多用户模式(字符界面) |
4 | 未使用,用户可自定义 |
5 | 图形化多用户模式 |
6 | 重启 |
相关问答 (FAQs)
问题1:如果忘记了CentOS 6的root密码,如何利用引导顺序来重置?
解答: 可以通过进入单用户模式来重置密码,步骤如下:
- 重启服务器,在GRUB引导菜单出现时,按任意键暂停倒计时。
- 使用上下箭头键选中要启动的CentOS系统,然后按
e
键编辑启动参数。 - 移动光标到以
kernel
开头的那一行,再次按e
键进入行编辑模式。 - 在行末尾输入一个空格,然后添加
single
或init=/bin/bash
,按回车保存。 - 返回到编辑界面,按
b
键启动系统。 - 系统会进入一个没有密码的root shell,此时根文件系统可能是只读的,需要执行
mount -o remount,rw /
将其重新挂载为读写模式。 - 执行
passwd root
命令,根据提示设置新密码。 - 重启系统(
reboot
或exec /sbin/init
),即可使用新密码登录。
问题2:CentOS 6使用的GRUB Legacy和CentOS 7/8使用的GRUB2在引导配置上有什么核心区别?
解答: 核心区别在于配置方式、文件结构和功能性。
- 配置文件: GRUB Legacy使用
/boot/grub/grub.conf
(或menu.lst
),这是一个简单、直观的文本文件,直接定义菜单项和内核参数,GRUB2使用/boot/grub2/grub.cfg
,这个文件通常由脚本自动生成,不建议手动编辑,管理员应修改/etc/default/grub
和/etc/grub.d/
目录下的脚本,然后运行grub2-mkconfig
命令来更新grub.cfg
。 - 模块化: GRUB2是高度模块化的,支持更多的文件系统、硬件设备(如GPT分区表)和安全功能(如密码保护),它按需加载模块,更加灵活,GRUB Legacy的功能相对固定。
- 设备命名: GRUB Legacy使用
(hd0,0)
这样的格式表示第一块硬盘的第一个分区,GRUB2则使用更清晰的hd0,gpt1
(GPT分区)或(hd0,msdos1)
(MBR分区)格式。 - 动态配置: GRUB2能够动态检测系统内核和内存盘的变化,并自动更新引导菜单,而GRUB Legacy则需要手动维护
grub.conf
。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复