系统引导过程概述:
通电——bios初始化——grub2磁盘引导阶段——grub2文件引导阶段——指定boot分区所在位置——启动内核,只读/挂载设备——启动init程序进入初始化阶段——启动systemd初始化进程——取/etc/systemd/中的文件——启动程序——启动登陆环境。
系统启动流程:
一.通电
bios(主板上的只读存储中,basic input or output system)
作用:硬件检测,激活硬件
二.grub系统引导(grub引导分为两个阶段)
- 阶段1 mbr(主引导记录)
主引导记录在硬盘上的0磁道,一扇区,446个字节
dd if=/dev/zero of=/dev/vda bs=446 count=1 可以清空mbr
进入到挽救模式,执行chroot /mnt/sysimage切换到真实/环境,
并执行grub2-install /dev/vda
实验:mbr主引导分区损坏后修复方法。
(1)实验之前首先要关闭selinux。
vim /etc/sysconfig/selinux
如图将其改为disable,然后重新启动系统
(2)破坏掉mbr主引导分区
dd if=/dev/zero of=/dev/vda bs=446 count=1
重新启动系统后发现无法启动
(3)设置光驱启动进入救援模式
(4)如上图输入1回车后会得到一个shell,此时执行df命令查看自己系统的根分区,然后执行
chroot /mnt/sysimage/
转换根分区,此时便切换到了真实的根环境,然后执行
grub2-install /dev/vda
重新恢复mbr分区,接着exit两次退出,关闭虚拟机之后将启动调回硬盘启动,开机后便可正常启动。
2.阶段2 grub文件引导阶段
找到/boot分区
读取/boot/grub2/grub.cfg
文件丢失,grub2-mkconfig >/boot/grub2/grub.cfg
实验:grub文件损坏后修复方法
(1)实验之前执行df命令查看自己的根分区和boot分区
(2)删除grub文件引导
rm -fr /boot/grub2/grub.cfg
(3)重新启动发现无法启动
(4)手动输入引导文件
set root=‘hd0,msdos1’ boot分区所在的位置
linux16 /vmlinuz-3.10.0-327.el7.x86_64 ro root=/dev/vda3 根分区所在的位置
initrd16 /initramfs-3.10.0-327.el7.x86_64.img 执行
boot 启动
此时可以开机,但是这是手动引导,为临时生效,开机后应该恢复/boot/grub2/grub.cfg文件
grub2-mkconfig > /boot/grub2/grub.cfg
恢复文件之后系统就成功复原了。
三.启动内核,只读挂载/设备
检测设备
对设备驱动进行初始化
进入系统初始化阶段
内核丢失,从新安装内核安装包就可以解决
rpm -ivh kernel-xxxxx.rpm --force
实验:内核文件丢失后修复
(1)首先查看启动需要哪些文件
ls /boot 查看启动分区的文件
(2)将内核文件删除后重新启动
rm -fr /boot/vmlinuz-3.10.0-327.el7.x86_64 删除内核文件
reboot
(3)重新启动后发现无法正常开机,提示缺少内核文件
(4)设置光驱启动,进入救援模式,执行df命令可以看到此时自己真实系统的根目录为/mnt/sysimage,而此处显示的根为iso镜像的根。
(5)分解iso镜像中的内核包,并将内核文件拷贝到/mnt/sysimage/boot/
rpm2cpio /run/install/repo/Packages/kernel-3.10.0-327.el7.x86_64.rpm |cpio -id
cp /boot/vmlinuz-3.10.0-327.el7.x86_64 /mnt/sysimage/boot/
(6)exit 并且设置硬盘启动,重新启动。修复完成进入系统
四.系统初始化阶段
系统初始化阶段加载initrd镜像
开启初始化进程systemd
开始selinux
加载内核参数
初始化系统时钟,键盘,主机名称
重新读写挂载/设备
激活raid,lvm
激活配额
启动multi-user.target.wants中的所有服务
开启虚拟控制台
启动图形
initramfs-`uname -r`.img丢失用: mkinitrd initramfs-`uname -r`.img `uname -r` 恢复
实验:系统初始化加载initrd镜像损坏后恢复
(1)删除initrd镜像文件initramfs-3.10.0-327.x86_64.img
rm -fr /boot/initramfs-3.10.0-327.x86_64.img 删除initrd镜像文件
(2)重新启动发现无法进入系统
(3)设置光驱启动,进入救援模式,执行chroot /mnt/sysimage 切换到真实的根环境
(4)mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(5)ls /boot/查看文件是否恢复,exit两次后设置硬盘启动,系统恢复正常