Linux系统的配置文件缺失,或核心文件被篡改(例如:启动级别被篡改),都会导致系统启动的不成功。
为了解决系统启动过程中出现的问题,我们先来了解系统引导启动的过程:
Linux的系统启动过程大致为:
通电——bios初始化——grub2磁盘引导阶段——grub2文件引导阶段——指定boot所在分区——启动内核,只读挂载 / 设备——启动init程序进入初始化阶段——启动systemd初始化进程——读取/etc/systemd/中的文件——启动程序——启动登录程序
1.grub2磁盘引导异常(MBR异常):
磁盘引导阶段 mbr主引导记录如果损坏或者缺失导致系无法正常启动。
模拟问题 :
使用该命令dd if=/dev/zero of=/dev/vda bs=446 count=1 #剪切446个字节的数据放入主引导记录所在的磁盘。通过 fdisk -l 查看系统存储设备,带有*的磁盘为主引导记录所在的磁盘。
[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1
截取446字节覆盖主引导记录 ,模拟其损坏
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000112637 s, 4.0 MB/s
[root@localhost ~]# reboot #重启
1 ##键入1
##回车
chroot /mnt/sysimage/ ##进入shell
df
grub2-install /dev/sda ##安装grub2
exit
exit
##配置完成后,恢复从磁盘启动
2.grub2文件引导异常(引导文件丢失):
问题模拟:为了模拟故障环境,我们删除grub2引导文件:
即删除/boot/gurb2/grub.cfg
首先df查看挂载情况
当系统没有重启的时候
grub2-mkconfig > /boot/grub2/grub.cfg
当系统重新启动以后
可以看到系统的挂载在 / 下的硬盘为/dev/sda3,挂载在/boot下的硬盘为/dev/sda1(也可以进入挽救模式查看挂载情况)
重启系统,可以看到异常,重启不了
set root='hd0,msdos1' ##此位置是不固定的,位置指定boot所在分区
linux16 /vmlinz-3.10.0-123.el7.x86_64 ro root=/dev/sda3 ##写根分区挂载设备名称
initrd16 /initramfs-3.10.0-123.el7.x86_64.img #指定系统初始化文件
boot
配置完后,可以重启成功,但是这只是临时的,再次启动还是会异常无法启动,所以需要用命令生成引导文件
grub2-mkconfig > /boot/grub2/grub.cfg
3、文件引导阶段内核文件丢失
内核文件:/boot/vmlinuz-3.10.0-123.el7.x86_64
模拟问题 rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
首先我们看一下/boot下有哪些文件:
系统启动异常模拟:我们删除/boot下的内核文件,模拟内核文件丢失的情况:
重启电脑,可以看到系统,可以看到系统异常,无法正常启动:
进入挽救模式
chroot /mnt/sysimage #切换正常的跟环境
mount /dev/sr0 /mnt #将带有系统安装包的光驱挂载在任意目录上
cd /mnt #进入系统光盘
cp kernel-3.10.0-123.el7.x86_64.rpm /opt #将系统内核安装包复制到另一个目录
cd /opt # 切换到存放内核安装包的目录
rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm |cpio -id #将压缩的安装包进行解压
ls #显示该安装包分解后产生的文件
cd boot/ # 进入解压后产生的boot目录中,该目录中存在需要的内核文件。
cp vmlinuz-3.10.0-123.el7.x86_64 /boot #将系统丢失的内核文件复制到/boot中
exit
exit #退出
退出挽救模式。选择使用磁盘启动系统 关闭虚拟机后开启,系统正常启动。
4、文件引导阶段系统初始化镜像文件丢失
系统初始化文件:/boot/initramfs-3.10.0-123.el7.x86_64.img
#模拟问题 : rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
重启系统,我们可以看到系统的异常,系统初始化镜像文件找不到
当系统没有重启的时候
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
uname -r #显示当前系统版本
恢复正常
当系统重启之后
进入挽救模式
chroot /mnt/sysimage #切换到正常的跟环境,
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) # 重新生成系统初始化文件
退出挽救模式
使用磁盘启动系统即可
5、无限重启
模拟问题:systemctl set-default reboot.target #默认系统默认开机重启 导致一直在重新启动
开机时候在下图界面按上下键进行选择,然后按e
解决方案:
在进入上面的界面后,我们按上下键,避免自动直接进入系统,而后按e进入可编辑模式,在linux16 /。。。后面加上启动级别为 5 即图像化系统启动界面 就可以正常进入系统。
ctrl+x 继续进行系统启动
正常进入系统后 进行设置systemctl set-default graphical.target ,将默认指向图形模式
6、忘记超级用户密码,进行重新设置
忘记超级用户密码,无法使用超级用户,需重新进行设置。
开机时候在下图界面按上下键进行选择,然后按e
更改上面的字符后得到一个shell
键入 chroot /sysroot
passwd root #改超级用户密码
俩次输入密码
touch /.autorelable #
exit
exit #退出
注意:当selinux关闭时不需要建立该文件;当selinux开启时必须建立该文件