系统引导过程概述:
通电——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。
1
|
vim
/etc/sysconfig/selinux
|
如图将其改为disable,然后重新启动系统
(2)破坏掉mbr主引导分区
1
|
dd
if
=
/dev/zero
of=
/dev/vda
bs=446 count=1
|
重新启动系统后发现无法启动
(3)设置光驱启动进入救援模式
(4)如上图输入1回车后会得到一个shell,此时执行df命令查看自己系统的根分区,然后执行
1
|
chroot
/mnt/sysimage/
|
转换根分区,此时便切换到了真实的根环境,然后执行
1
|
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文件引导
1
|
rm
-fr
/boot/grub2/grub
.cfg
|
(3)重新启动发现无法启动
(4)手动输入引导文件
1
|
set
root=‘hd0,msdos1’ boot分区所在的位置
|
1
|
linux16
/vmlinuz-3
.10.0-327.el7.x86_64 ro root=
/dev/vda3
根分区所在的位置
|
1
|
initrd16
/initramfs-3
.10.0-327.el7.x86_64.img 执行
|
1
|
boot 启动
|
此时可以开机,但是这是手动引导,为临时生效,开机后应该恢复/boot/grub2/grub.cfg文件
1
|
grub2-mkconfig >
/boot/grub2/grub
.cfg
|
恢复文件之后系统就成功复原了。
三.启动内核,只读挂载/设备
检测设备
对设备驱动进行初始化
进入系统初始化阶段
内核丢失,从新安装内核安装包就可以解决
rpm -ivh kernel-xxxxx.rpm --force
实验:内核文件丢失后修复
(1)首先查看启动需要哪些文件
1
|
ls
/boot
查看启动分区的文件
|
(2)将内核文件删除后重新启动
1
|
rm
-fr
/boot/vmlinuz-3
.10.0-327.el7.x86_64 删除内核文件
|
1
|
reboot
|
(3)重新启动后发现无法正常开机,提示缺少内核文件
(4)设置光驱启动,进入救援模式,执行df命令可以看到此时自己真实系统的根目录为/mnt/sysimage,而此处显示的根为iso镜像的根。
(5)分解iso镜像中的内核包,并将内核文件拷贝到/mnt/sysimage/boot/
1
|
rpm2cpio
/run/install/repo/Packages/kernel-3
.10.0-327.el7.x86_64.rpm |cpio -
id
|
1
|
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
1
|
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两次后设置硬盘启动,系统恢复正常
本文转自 lulu2017 51CTO博客,原文链接:http://blog.51cto.com/13132425/1954643