一、系统引导开启过程
从上至下:
- 通电
- biso初始化(BIOS是基本输入输出系统,bios初始化实际上是执行开机电自检和系统启动自举程序)
- grub2磁盘引导(硬盘主引导记录MBR和分区表DPT以及磁盘的有效标志。其中,主引导检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序调入内存加以执行)
- grub2文件引导阶段
- 指定boot所在分区
- 加载内核,只读挂载在 / 设备
- 启动该init程序进入初始化阶段
- 启动systemd初始化进程
- 读取 /etc/systemd/ 中的文件
- 启动程序
- 启动登陆环境
二、系统排错及相应解决措施
1、grub2磁盘引导阶段
假设,我们在虚拟机中执行下面操作让磁盘引导损坏:
dd if=/dev/zero of=/dev/vda bs=446 count=1
reboot //重启虚拟机
重启后会出现如下报错:
解决措施:
(1)首先,准备好虚拟机对应的版本镜像(以7.0的server虚拟机为例);
(2)在真机中以root用户打开虚拟机管理:
virt-manager
(3)添加光驱设备;
(4)打开虚拟机,进入挽救模式;
(5)通过挽救模式,进入系统真实环境;
chroot /mnt/sysimage
grub2-install /dev/vda
vim /etc/sysconfig/selinux //修改selinux为enforcing,为了可以节省加载时间,这步不是必须的
exit
exit
(6)关闭虚拟机,并将光驱驱动改为硬盘驱动;
(7)打开虚拟机,正常启动;
2、grub文件引导阶段
假设,我们在虚拟机中执行下面操作让grub文件丢失:
rm -fr /boot/grub2/grub.cfg
A . 若此时虚拟机未重启,直接执行命令生成文件即可:
grub2-mkconfig > /boot/grub2/grub.cfg
B . 若已经执行了reboot操作后,则开机重启后需要手动引导;
输入内容:
set root='hd0,msdos1' //hd0,msdos1表示第一个磁盘的第一个分区
linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/vda1
initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img
boot //引导完成,启动系统
当虚拟机正常启动后,执行命令重新生成grub2.cfg文件即可,下次开机后可正常启动:
grub2-mkconfig > /boot/grub2/grub.cfg
3、内核引导阶段
假设,我们在虚拟机中执行下面操作让内核文件丢失:
rm -fr /boot/grub2/grub.cfg
思想:将内核文件的安装包拆解,找到内核文件,然后将内核文件复制到/boot/;
A . 当虚拟机并未重启时:
yum whatprovides /boot/vmlinuz-3.10.0-123.e17.x88_64 //查找内核文件所在的安装包
将光驱的packages的kenel-3.10.0-123.e17.x88_64.rpm安装包复制到桌面上;
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //将安装包拆解,拆解后的文件在桌面上
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/ //将boot目录下的内核文件复制到根目录/boot/下
B . 当虚拟机reboot之后,会出现如下图的报错;
进入挽救模式:
df //当前光驱挂载点 /dev/sr0 -> /run/install/rcpo
硬盘挂载在 /dev/vda -> /mnt/sysimage
cd /run/install/repo/Packages
cp kenel-3.10.0-123.e17.x88_64.rpm /mnt/sysimage/mnt
chroot /mnt/sysimage //从挽救环境进入系统真实环境
cd /mnt //进入/mnt下
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id //将安装包拆解
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/
exit //退出系统真实环境
exit //退出挽救环境
4、init程序初始化阶段
假设,我们在虚拟机中执行下面操作让init程序初始化文件丢失:
rm -fr /boot/initramfs-3.10.0-123.e17.x88_64.img
A . 若虚拟机未重启,执行命令重新生成文件即可:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //uname -r 查看内核版本号
$() == `` //当前环境是等价,两个有区别,$()兼容性较好
B . 若虚拟机reboot之后,会出现如下提示:
进入挽救环境:
sh-4.2#chroot /mnt/sysimage //切换至真实的系统环境
bash-4.2#mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //
cat:write error: Broken pipe
bash-4.2#exit
5、启动级别发生错误
启动级别:0-6
0 表示关机
1 表示单用户更改密码
2-4 无图形
5 表示图形开启
6 表示重启
假设,我们在虚拟机中执行下面操作让开机过程中发生错误:
systemctl set-default shutdown.target
reboot
会出现如下报错:
解决办法:
1.在选择进入系统的界面按上下键,'e'进入编辑模式,
2.在第一个linux /vmlinuz*****末尾加启定级别 5;
3.ctrl + x
4.开机后执行命令:
systemctl set-default graphical.target