(1).BIOS初始化
基本输入/输出系统(BIOS)时内置于标准x86/x86-64硬件的固定接口,将硬件置于已知状态并准备好系统以加载操作系统;用于检测并初始化硬件确定从中引导的设备。
此过程可能出现的错误:
错误或异常的BIOS设置以及错误引导设备顺序
按特定于供应商的健设,使用特定于供应商的配置实用程序
通常,【F12】可以执行一次引导顺序覆盖
(2)grub磁盘引导阶段
MBR的作用是为了记录/boot目录所在分区位置
如下图中所示,当磁盘0磁道1扇区的前446字节被我们用其它数据填充之后,系统将正常启动
dd if=/dev/zero of=/dev/vda bs=446 count=1 ##截取数据填充磁盘
grub2-install /dev/vda ##启动分区所在的硬盘
引导文件
/boot/gurb2/grub.cfg
指定/boot分区位置,加载内核,启动系统初始化进程
(4)内核引导阶段
检测硬件设备,设备驱动初始化,将/只读挂载,载入初始进程systemd
内核文件丢失需要重新安装内核
(5)systemd初始化
开启selinux和systemd-tools
加载内核参数
加载系统时钟键盘,主机名称
读写挂载/文件系统
激活raid,lvm设备
激活系统配额
启动multi-user.target.wants中的所有服务脚本
器用虚拟控制台
启动图形
(6)系统启动级别
runlever0.target->poweroff.target
runlever1.target->rescue.target
runlever2.target->multi-user.target
runlever3.target->multi-user.target
runlever4.target->multi-user.target
runlever5.target->grapical.target
runlever6.target->reboot.target
设定启动级别
systemctl set-defualt + 启动级别
/etc/systemd/system/defualt.target
下面我们根据上述系统的各个阶段来模拟每个启动阶段可能产生的问题,并提供解决方案
(1)破坏开机引导的446字节并重启
模拟问题:
我们首先找到要操作的设备名——/dev/sda ,【/dev/sda1】是它的一个分区
注意:【*】符号表示该设备具有自举功能
dd if=/dev/zero of=/dev/sda bs=446 count=1 ##截取数据填充磁盘
首先强制关闭系统,进入挽救模式:
【小提示:如果在操作过程中鼠标光标消失,可使用contl+alt解决】
添加光盘引导方式,并调整磁盘顺序
启动系统——选择第三项系统修复
选择第二项,进入后选择第一项【继续】
chroot /mnt/sysimage
df
grub2-install /dev/sda ##启动分区所在硬盘
exit
exit
模拟问题:删除引导文件
rm -rf /boot/gurb2/grub.cfg
解决方案:
若删除后系统没有重启,可使用命令直接生成
grub2-mkconfig > /boot/grub2/grub.cfg
set root='hd0,msdos1' ##此位置是不固定的,位置指定boot所在分区
linux16 /vmlinz-3.10.0-123.el7.x86_64 ro root=/dev/sda3 ##写根分区挂载设备名称
initrd16 /initramfs-3.10.0-123.el7.x86_64.img
boot
【部分文件名可以使用tab键补充,准确性更高】
上述操作过后系统正常启动,但只是临时的,因为引导文件并没有恢复,此时我们需要进行前面的操作手动生成引导文件
grub2-mkconfig > /boot/grub2/grub.cfg
模拟问题:
rm -rf /boot/vmlinz-3.10.0-514.el7.x86_64
首先进入挽救模式,具体操作在上面已经讲过
chroot /mnt/sysimage
mkdir /rhel7
mount /dev/sr0 /rhel7
cd /rhel7/Packages
cp kernel-3.10.0-514.el7.x86_64.rpm /mnt
cd /mnt
rpm2cpio kernel-3.10.0-514.el7.x86_64.rpm | cpio -id
cd boot
cp vmlinuz-3.10.0-514.el7.x86_64 /boot
exit
exit
(4)系统初始化镜像文件丢失
模拟问题:删除初始化镜像文件
rm-rf /boot/initramfs-3.10.0-514.el7.x86_64.img
当系统没有重启时——用命名自动生成
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
进入挽救模式
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
模拟问题:
rm -rf /boot/*
进入挽救模式
chroot /mnt/sysimage
mkdir /boot
grub2-install /dev/sda
mount /dev/cdrom/mnt
rpm -ivh /mnt/Packages/kernel-3.10.0-514.el7.x86_64.rpm --force
grub2-mkconfig > /boot/grub2/grub.cfg
(6)开启级别被篡改
模拟错误:
ln -s /lib/systemd/system/reboot.target /etc/systemd/system/default.target
解决方案:
开机后快速按上下键停止读秒,按“e”进入编辑模式
【在initrd16 /initramfs-3.10.0-514.el7.x86_64.img的前一行尾输入 5——设置为内核启动】,然后根据下方提示ctrl+x启动系统。
这样的解决方式是临时的,我们需要修改启动级别的链接指向,否则此次关机后重启,系统依然处于无限重启
解决方案:
在initrd16 /initramfs-3.10.0-514.el7.x86_64.img的前一行尾进行修改,然后根据下方提示ctrl+x启动系统。