目录
Linux系统在使用过程中可能会出现各种各样的引导问题导致系统启动失败。本章将模拟几种最常见的导致系统启动失败的问题。
一、磁盘引导
mbr=主引导记录=0磁道1扇区446
作用:记录grub2引导文件的位置
当mbr数据丢失后,系统会因为找不到启动分区而停止启动
模拟问题:抹掉磁盘引导记录文件
dd if=/dev/zero of=/dev/vda bs=446 count=1 #覆盖掉主硬盘的前446个字节
1、如果出现问题后,还没有关机,可以立即执行<grub2-install /dev/vda>命令恢复磁盘引导记录文件。
grub2-install /dev/vda #恢复磁盘引导文件
2、如果磁盘引导文件丢失,启动时系统会启动失败,卡在“Booting from Hard Disk”界面。
解决办法:
第一步:挂载U盘镜像或CD镜像
这里因为是在虚拟机操作,所以可以在虚拟机里新加一块包含镜像文件的硬盘来模拟U盘,并将添加的启动盘设置为第一启动项。
第二步: 从镜像启动
选择“Troublesbooting”下的“Rescue”选项,意思是“治疗/修复”启动项。
第三步:执行恢复磁盘引导文件的命令
具体操作为:选择"1" >>>>> 按“Enter”键 >>>>> 挂载系统到镜像上“chroot /mnt/sysimages” >>>>>执行“grub2-install /dev/vda” >>>>>安装完成后退出
第四步:调整启动项顺序,重启系统
把镜像启动放在系统启动之后,重新开机就会进入系统了。
注意:修复后第一次启动会很慢很慢,因为系统要检查所有文件,稍后会介绍一个操作不让系统去检查所有文件,来加快启动速度。
二、grub2文件引导
系统中的文件引导有文件有两个位置,其中文件< /boot/grub2/grub.cfg>为主引导文件、文件</boot/loader/entries/******.conf>为子引导文件;
这两个地方的文件有两个作用:(1)指定/boot位置 (2)指定系统启动时加载文件名
这两个地方的引导文件缺少了哪个一系统都无法启动。
模拟问题1:子引导文件丢失
rm -f /boot/loader/entries/******.conf #删除子引导文件
子引导文件丢失后,如果还没有关机,可以执行以下命令立刻恢复:
kernel-install add 内核版本号 内核镜像
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
模拟问题2:主引导文件丢失
rm -f /boot/grub2grub.cfg #删除主引导文件
主引导文件丢失后,如果没有关机,可以使用以下名下立即恢复:
grub2-mkconfig > /boot/grub2/grub.cfg #恢复主引导文件
手动引导修复
如果引导文件丢失后,不小心关机了,再次启动的时候就会出现无法引导的问题,这时候就需要手动引导了。
手动引导步骤如下:
set root=(hd0,msdos1) #设置第0块硬盘的第一个分区
linux16 /vmlinuz-'版本号' ro root=/dev/vda3 #挂载内核到根设备(/dev/vda3就是“/”分区)
initrd16 /initramfs-'版本号'.img #加载系统初始化镜像
boot
'''如果第一步没错的话,后边每个指令都可以用TAB键补齐'''
执行完这些命令后,系统就可以手动引导启动,启动后一定要先检查并修复缺失的文件
这里检查后发现,主引导文件和子引导文件都没有了,所以用上边介绍的方法分别恢复这两个文件。
三、内核加载
加载内核作用:/boot/vmlinuz-‘版本号’
系统初始化硬件设备
只读挂载“ / ”设备
模拟问题:删除内核文件
rm -f /boot/vmlinuz-4.18.0-193.e19.x86_64
1、内核文件丢失后,如果还没有关机,可以直接复制文件到此目录
cp /lib/modules/$(uname -r)/vmlinuz /boot/vmlinuz-$(uname -r)
#复制/lib/modules目录下的内核到/boot引导目录下
2、内核文件丢失后,如果已经关机,可以通过U盘镜像进入挽救模式,复制指定目录文件到此目录下。
第一步:启动时会提示没有内核
第二步:通过U盘镜像进入挽救模式后,进入<chroot /mnt/sysimage>,然后复制"/lib/modules"目录下的文件到“/boot"目录下。
注意:同第一个问题一样,修复后第一次启动会很慢很慢,因为系统要检查所有文件,稍后会介绍一个操作不让系统去检查所有文件,来加快启动速度。
四、系统初始化镜像
系统初始化镜像位置是"/boot/initramfs-4.18.0-193.el8.x86_64.img"
系统初始化镜像的作用是:加载系统时钟、加载selinux、加载系统主机信息、加载/etc/fstab文件中磁盘挂在策略、加载磁盘配额、初始化系统程序开启开机启动服务、开启虚拟控制台、开启图形
模拟问题:删除系统镜像文件
rm -f /boot/initramfs-4.18.0-193.el8.x86_64.img #删除系统镜像文件
系统初始化镜像文件丢失后,如果还没有关机,可以执行以下命令:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) #恢复系统初始化镜像
系统初始化镜像文件丢失后,如果已经关机,可以通过U盘镜像进入挽救模式后,进入<chroot /mnt/sysimages/>后再执行上述命令。
注意:同第一个问题一样,修复后第一次启动会很慢很慢,因为系统要检查所有文件,稍后会介绍一个操作不让系统去检查所有文件,来加快启动速度。
五、系统启动级别
0 | 关机 |
1 | 单用户 |
2 | 无图形网络模式 |
3 | 无图形网络模式 |
4 | 无图形网络模式 |
5 | 有图形网络模式 |
6 | 重启 |
模拟问题:提高重启的优先级
systemctl set-default reboot.target #调整重启命令的优先级
这条命令执行完以后,会发现系统内核启动后的默认选项为“reboot"命令,直观理解起来就是启动内核后无限重启。
为了解决这个问题,就需要在系统内核启动后手动指定系统的启动级别
第一步:在系统启动界面按“e”键,进入选择编辑模式
第二步:在第倒数第二行文字最后加上“5”,即手动设置启动级别为5。然后按<Ctrl+X>重新启动。
注意:手动选择启动级别进入系统后,要在系统中将内核启动后的默认启动项设置为图形模式,否则下次开机仍会一直重启。
重置命令如下:
systemctl set-default graphical.target #设置图形模式为最高启动级别
六、超级用户密码忘记
超级用户密码忘记后,可以按照如下步骤来重置超级用户密码
第一步:在开机选择界面按<e>进入到引导文件编辑模式
第二步:在内核加载选项最后删除到ro选项、更改ro---->rw、加入rd.break参数终止系统启动进入单用户模式
第三步:<Ctrl+x>重启后进入恢复模式
第四步:<chroot /sysroot>后非交互式重置密码<echo hahaha | passwd --stdin root>
第五步:新建</.autorelabel>文件,当这个文件存在时,selinux会重新初始化。
注意:同第一个问题一样,修复后第一次启动会很慢很慢,因为系统要检查所有文件,稍后会介绍一个操作不让系统去检查所有文件,来加快启动速度。
七、引导目录丢失
模拟问题:/boot/目录下的文件全部丢失
rm -fr /boot/* #删除/boot目录下的全部文件
系统的引导目录丢失,重启后将无法进入系统。
恢复步骤如下:
1、如果没关机,可以执行以下三个操作
grub2-install /dev/vda #安装mbr磁盘引导文件
grub2-mkconfig > /boot/grub2/grub.cfg #恢复主引导文件
rpm -ivh kernel-core-****.rpm #重新安装引导内核
2、如果已经关机,就需要借助U盘的启动镜像来恢复了
第一步:通过U盘镜像进入系统挽救模式,安装磁盘引导文件
执行<chroot /sysimages/>命令后,再执行磁盘引导修复命令<grub2-install /dev/vda>。
第二步:退出<chroot>模式后,将<dev/vdb>设备挂载到真机镜像下
mount --bind /run/install/repo/ /mnt/sysimage/media
#把U盘镜像中的安装软件目录挂载到原系统镜像的/media目录下
第三步:重新进入<chroot /mnt/sysimage/>模式,安装内核包
这样就可以从</media>目录下找到U盘镜像解压后的目录,也就可以找到软件源,接着进入</media/BaseOS/Packages/>下,里边有“kernel-core-****rpm"的安装包,重新安装内核就可以了。
第四步:手动引导启动
因为之前的操作只是恢复了/boot目录下的一部分内容,磁盘引导修复了,但是文件引导还没有,所以还需要手动引导启动。(这里需要手动引导启动两次后才能进入系统)
第五步:系统内修复文件引导文件
进入系统后,检查系统的文件引导文件,发现子引导文件已经有了,主引导文件仍然缺失。
执行以下命令后,修复主引导文件:
grub2-mkconfig > /boot/grub2/grub.cfg #修复主引导文件
八、本章总结
1、修复完成后如何取消开机自检来加快启动速度?
之前模拟的很多问题,在修复成功后都会在开机时检查所有文件,启动速度太慢,可以在修复完成尚未重启时做以下操作:
vim /etc/sysconfig/selinux #编辑系统自检文件
在这个文件里把“SELINUX=enforcing”改为“SELINUX=disabled”,保存后重启,就不用自检了。
2、<chroot /mnt/sysimage/>是什么意思
对于主系统来说,U盘镜像就是/mnt下的一个文件。当我们通过U盘镜像进入系统挽救模式后,那么U盘镜像就是“临时的主系统”,而原来的主系统就是U盘主系统在“/mnt/sysimage/”下的一个文件,进入这个文件后,就可以执行一些修复操作了。