一、系统启动的过程
通电
bios初始化
grub2磁盘引导阶段
grub2文件引导街道
指定boot所在分区
启动内核,只读挂载/设备
启动init程序进入初始化阶段
启动systemd初始化进程
读取/etc/systemd/中的文件
启动程序
启动登录环境
grub文件引导阶段
由文件/boot/grub2/grub.cfg控制流程
指定/boot分区位置——>加载内核——>启动系统初始化进程——>grub2-mkconfig
内核引导阶段
检测硬件设备——>设备驱动初始化——>将/只读挂载——> 载入初始化进程systemd——>内核文件丢失请重新安装内核
systemd初始化
开启selinux和systemd-tools——>加载内核参数——>加载系统时钟,键盘,主机名称——>读写挂载/文件系统——>激活raid,lvm设备——>激活系统配额——>启动multi-user.target.wants中的所有服务脚本——>启用虚拟控制台——>启动图形
二、系统启动出错恢复
恢复前必知信息:
系统CentOS Linux release 7.6.1810 (Core),内核版本3.10.0-957.el7.x86_64
查看根目录挂载在哪个设备上
1.引导程序boot损坏
selinux状态调整成disabled
在/etc/selinux/config文件中设置SELINUX=disabled,再执行setenforce 0
使用命令破坏/dev/sda前446字节引导
dd if=/dev/zero of=/dev/sda bs=446 count=1
开机无法引导系统
关闭虚拟机,加入iso镜像光盘,设置从光驱启动
步骤:
Troubleshooting 系统修复
Rescue a Res Hat Enterprise Linux system 选择挽救模式
说明:
1.继续
2.只读挂载
3.跳过shell
4.退出
选择1并回车
再次回车后可得到一个shell,执行命令:
chroot /mnt/sysimage #在光盘启动的shell中/mnt/sysimage是系统的根目录
grub2-install /dev/sda
执行两次exit退出并关机
现在设置虚拟机从硬盘启动,查看恢复成功
2.引导文件/boot/grub2/grub.cfg丢失
重新启动之后:
用命令完成grub引导也可以启动系统,直接在grub>后面执行:
grub> set root='hd0,msdos1' 根据自己的boot分区
grub> linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/sda3 #这里要写根目录所在的设备名称
grub> initrd16 /initramfs-3.10.0-327.el7.x64_64.img
grub> boot #完成引导,执行这条命令回到系统启动过程
启动成功后执行grub2-mkconfig > /boot/grub2/grub.cfg恢复即可
3.内核丢失
vmlinuz-3.10.0-957.el7.x86_64
无法启动:
从光盘启动进入挽救模式
查看镜像挂载在哪里
cd /mnt/sysimage/mnt
rpm2cpio /run/install/repo/Packages/kernel-3.10.0-957.el7.x86_64 | cpio -id
cd boot #将镜像中内核相关的软件包分离出来,包的数字版本视系统版本而定
cp vmlinuz-3.10.0-957.el7.x86_64 /mnt/sysimage/boot/
exit退出后关机,再设置从硬盘启动,启动成功
4.初始化文件丢失
initramfs-3.10.0-957.el7.x86_64.img
无法启动:
光盘(镜像)启动进入挽救模式后执行:
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) #生成启动文件,uname -r命令可以查看内核版本号
执行两次exit,从硬盘启动成功
5.boot分区丢失
无法启动:
进入挽救模式
cd /mnt/sysimage/mnt/
rpm2cpio /run/install/repo/Packages/Kernel-3.10.0-957.el7.x86_64.rpm | cpio -id
#处于拯救模式时,/mnt/sysimage/下的内容就是系统的根目录,chroot /mnt/sysimage/命令的作用就是将当前shell变成处于系统的根目录下的状态,然后执行命令就相当于直接在系统下执行命令
两次exit后,从硬盘启动成功
6.闪退
从光盘启动进入挽救模式
chroot /mnt/sysimage
cp /bin/bash /mnt/sysimage/bin/bash
exit退出即可