一、系统引导开启过程
从上至下:
通电
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 //重启虚拟机123
重启后会出现如下报错:
解决措施:
(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 exit12345
(6)关闭虚拟机,并将光驱驱动改为硬盘驱动;
(7)打开虚拟机,正常启动;
2、grub文件引导阶段
假设,我们在虚拟机中执行下面操作让grub文件丢失: rm -fr /boot/grub2/grub.cfg12
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 //引导完成,启动系统1234
当虚拟机正常启动后,执行命令重新生成grub2.cfg文件即可,下次开机后可正常启动:
grub2-mkconfig > /boot/grub2/grub.cfg
3、内核引导阶段
假设,我们在虚拟机中执行下面操作让内核文件丢失: rm -fr /boot/grub2/grub.cfg12
思想:将内核文件的安装包拆解,找到内核文件,然后将内核文件复制到/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/下1234
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 //退出挽救环境12345678910
4、init程序初始化阶段
假设,我们在虚拟机中执行下面操作让init程序初始化文件丢失: rm -fr /boot/initramfs-3.10.0-123.e17.x88_64.img12
A . 若虚拟机未重启,执行命令重新生成文件即可: mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //uname -r 查看内核版本号
$() == `` //当前环境是等价,两个有区别,$()兼容性较好1
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#exit1234
5、启动级别发生错误
启动级别:0-6
0 表示关机
1 表示单用户更改密码
2-4 无图形
5 表示图形开启
6 表示重启
假设,我们在虚拟机中执行下面操作让开机过程中发生错误: systemctl set-default shutdown.target reboot123
会出现如下报错:
解决办法:1.在选择进入系统的界面按上下键,'e'进入编辑模式,2.在第一个linux /vmlinuz*****末尾加启定级别 5;3.ctrl + x 4.开机后执行命令: systemctl set-default graphical.target1234567