文章目录
Linux操作系统引导过程
Linux操作系统的引导过程是一个从计算机开机到操作系统完全加载并准备好接受用户登录和使用的复杂过程。这个过程涉及多个阶段,每个阶段都有其特定的任务和作用。
1. BIOS/UEFI阶段
- BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口):计算机的固件接口,负责系统上电后的初始化工作。
- POST(加电自检):BIOS/UEFI执行一系列硬件自检,确保所有硬件正常工作。
- 加载引导程序:BIOS/UEFI从指定的启动设备(通常是硬盘、光盘或USB驱动器)加载引导程序的第一部分到内存中。引导程序存储在磁盘的MBR(主引导记录)或GPT(GUID分区表)的引导分区中。
- 总结:服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱。
2. MBR/GPT阶段
- MBR(主引导记录):位于磁盘的第一个扇区,大小为512字节。包含引导加载程序的第一阶段和分区表。
- 总结:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区,或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。主要是运行放在MBR扇区里的启动GRUB引导程序
- GPT(GUID分区表):用于大容量硬盘,提供更多和更大的分区。引导加载程序位置在EFI分区中。
3. 引导加载程序阶段
GRUB(GRand Unified Bootloader):常见的引导加载程序,支持多种操作系统和高级引导选项。
- 第一阶段:加载GRUB配置文件(如
/boot/grub/grub.cfg
或/boot/grub2/grub.cfg
),配置文件指定了内核和镜像文件系统的设置和路径。 - 第二阶段:显示引导菜单,允许用户选择操作系统或内核选项。用户选择后,GRUB将控制权转交给所选操作系统的内核。
- CentOs 7 采用的是 GRUB2 启动引导器。
- 总结:GRUB引导程序通过读取GRUB配置文件
/boot/grub2/grub.cfg
,来获取内核和镜像文件系统的设置和路径位置
4. 内核阶段
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
- 加载内核和initrd:根据GRUB的配置文件,将内核(如
/boot/vmlinuz-xxx
)和初始内存盘(initrd或initramfs)加载到内存中。 - 解压内核:内核映像解压到内存中并开始初始化。
- 硬件检测和驱动加载:内核检测硬件并加载必要的驱动程序。
- 挂载根文件系统:内核通过初始内存盘挂载根文件系统(通常是/分区)。
- 总结:把内核和镜像文件系统加载到内存中
CentOS 7系统中,默认的内核文件位于/boot/vmlinuz-3.10.0-514.el7.x86 64
5. init/Systemd阶段
- init进程(CentOS 6及以前):传统的初始化程序,执行启动脚本(位于
/etc/init.d
)以启动系统服务。init进程是系统中第一个用户级进程,PID为1。- 由 Linux 内核加载运行 /sbin/init 程序
- init进程是系统中第一个进程,是所有进程的父进程
- init进程的PID(进程标记)号永远为1
- systemd(CentOS 7及以后):现代化的系统和服务管理器,取代传统init。systemd能够并行启动服务,提高系统启动速度。systemd使用单元(unit)来描述和控制系统服务和资源,单元类型包括服务(
*.service
)、挂载点(*.mount
)、套接字(*.socket
)等。- md是Linux操作系统的一种init软件CentOS7中采用全新的
- Systemd启动方式,取代传统的SysVinit
- CentOS7中运行的第一个init进程是
/ib/systemd/systemd
- 启动服务:根据配置文件(如
/etc/systemd/system/
)启动系统服务。 - 设置系统目标:进入指定的运行级别(systemd使用目标target来替代传统的运行级别)。
6. 用户空间阶段
- 启动登录服务:启动getty或显示管理器(如gdm、lightdm),提供用户登录界面。
- 用户登录:用户通过终端或图形界面登录系统。
- 用户环境初始化:加载用户配置文件(如
.bashrc
、.profile
)并启动用户会话。
总结
Linux操作系统的引导过程可以简略概括为以下几个步骤:
- BIOS/UEFI启动:计算机开机后,BIOS或UEFI固件进行硬件自检(POST),并从预设的启动设备(如硬盘)加载引导程序。
- 引导加载程序(如GRUB):引导加载程序(如GRUB)被加载到内存中,并显示启动菜单,让用户选择要启动的操作系统或内核版本。
- 内核加载:用户选择后,GRUB加载Linux内核到内存中,并可能加载一个初始内存盘(initrd/initramfs)来辅助内核挂载根文件系统。
- 内核初始化:内核开始初始化,检测硬件,加载必要的驱动程序,并挂载根文件系统。
- 系统初始化(init/systemd):根据配置(如
/etc/systemd/system/
),systemd(或传统的init系统)启动系统服务,设置系统进入指定的运行级别或目标状态。 - 用户登录:启动登录服务(如getty或图形登录管理器),等待用户登录。
- 用户环境:用户登录后,加载用户配置文件(如
.bashrc
、.profile
),启动用户会话,进入操作系统的工作状态。
这个过程从硬件自检开始,通过多个阶段的加载和初始化,最终将控制权交给用户,让用户能够使用Linux操作系统。
排除启动类故障实验
1.修复MBR扇区故障实验
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节
- 备份MBR 扇区数据到其它磁盘(/dev/sdb1)
mkdir /backup
mount /dev/sdb1 /backup
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
- 模拟破坏MBR引导扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1
- 引导界面进入急救模式,从备份文件中恢复MBR 扇区数据
- 先加载好光盘镜像,重启操作系统,当出现安装向导界面时,选择Troubleshooting选项,
- 再选择Rescue a CentOS Linux system选项,进入急救模式
- 选择1选择 Continue并按 Enter 键继续
- 再次按 Enter 键后将进入带**sh-4.2#**提示符的 Bash Shell 环境,执行以下操作:
创建目录
sh-4.2# mkdir /backupdir
挂载带有备份文件的分区
sh-4.2# mount /dev/sdb1 /backupdir
恢复备份数据
sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda
执行exit命令退出临时Shell 环境,系统将会自动重启
sh-4.2# exit
2.修复GRUB 引导故障
/boot/grub/
目录下的包是用于启动菜单的背景图片及样式
GRUB配置文件
/boot/grub2/grub.cfg
方法一:硬核记忆模式
加载指定的模块到内核
grub> insmod xfs
内核的名字及位置等信息
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet LANG=zh_CN.UTF-8
镜像系统文件
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img
引导boot
grub> boot
方法二:进入急救模式,恢复GRUB引导程序
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前466字节是主引导记录,分区表保存在MBR扇区中的第477-510字节中。
mkdir /bak
mount /dev/sdb1 /bak
dd if=/dev/sda of=/bak/grub.bak bs=446 count=1
模拟对MRB中的GRUB引导程序的破坏,但并不破坏分区表
dd if=/dev/zero of=/dev/sda bs=446 count=1
引导界面进入急救模式,从备份文件中恢复GRUB引导程序
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir
sh-4.2# dd if=/backupdir/grub.bak of=/dev/sda
sh-4.2# exit
方法三:引导界面进入急救模式,重建GRUB菜单配置文件
删除模拟GRUB故障:
rm -rf /boot/grub2/grub.cfg
进入急救模式,加载系统镜像,切换到系统根环境
先加载好光盘镜像,重启操作系统
当出现安装向导界面时,选择“Troubleshooting”选项
再选择“Rescue a CentOS Linux system”选项,进入急救模式
选择“1”选择 Continue并按 Enter 键继续
再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境:
sh-4.2# chroot /mnt/sysimage
重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区:
bash-4.2# grub2-install /dev/sda
重新构建GRUB菜单的配置文件:
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
退出chroot 环境,并重启:
bash-4.2# exit
sh-4.2# reboot