1 实验前准备

1)在linux中从光盘启动主机,打开虚拟机管理其,选择AddHardware如下图,在device type处选择CDROM,Manage处选择镜像文件,Bus type处默认是SATA不做更改,选择完成:

在这里插入图片描述
2)添加完成后,硬件信息处出现光驱:

在这里插入图片描述
3)点击boot options,选择boot device order处,勾选sata cdrom,选中,然后点击上键将光驱调在硬盘上面,点击右下角的apply,完成从光盘启动。这种方法是永久的,想从硬盘启动时,再按照上面的步骤,把硬盘调在光驱上面即可:
在这里插入图片描述
4)从光驱启动的界面:
在这里插入图片描述
5)恢复从硬盘启动:
在这里插入图片描述从硬盘启动的界面:
在这里插入图片描述

2 磁盘引导

  • mbr=主引导记录=0磁道1扇区446
  • 其作用是:记录grub2引导文件的位置
  • 当mbr数据丢失系统会因为找不到启动分区而停止启动

系统引导过程中磁盘引导修复步骤:
1)fdisk -l ,可以看到系统的设备,下面有设备的分区,设备的分区后面若有‘ * ’标志,表示该分区所在的设备上,是有引导记录的:
在这里插入图片描述
2)输入dd if=/dev/zero of=/dev/vda bs=446 count=1 ,dd表示截取命令,if表示截取模板,of表示存放数据位置(看‘ * ’所在的设备),bs表示数据块大小,count表示截取快的个数;该命令表示从系统的无限0字节中截取数据放到该硬盘中,截取1快大小为446字节,共截取一块。该命令会破坏系统的mbr,重启系统时,会导致系统无法进行磁盘引导,会出现显示“booting from hard disk”,然后没有下一步的情况。
3)关闭系统,然后从光盘启动。重新开机后,选择troubleshooting:
在这里插入图片描述
选择第二个rescure,进入系统的挽救模式:
选择第二个,rescure
4)进入后,可以看到说明处表示该模式可以找到系统并且把系统挂载到了/mnt/sysimage目录下。也就是真实的系统在硬盘里,把真实系统挂载在该目录下。下面的4个选项分别表示:继续进入挽救模式、只读进入挽救模式、直接开启shell、退出:
在这里插入图片描述
此处选择1,输入即可,显示一个命令: chroot /mnt/sysimage,表示转换系统从光驱到真实系统的磁盘中。直接回车,此时就会得到一个shell:
在这里插入图片描述
输入chroot /mnt/sysimage命令,切换到真实的系统:
在这里插入图片描述
5)输入:grub2-install /dev/vda 表示安装mbr,这里的磁盘是有引导分区的设备名称,可以直接在里面输入fdisk -l 查看哪个是引导分区的设备(带*的),安装成功后,会提示,no error reported:
在这里插入图片描述
在这里插入图片描述
6)输入两次exit即可重启系统,这里重启的时候,还是会从光盘启动。要先关机,选择从硬盘启动,然后启动系统,即可修复磁盘引导:
在这里插入图片描述

3 grub2文件引导

  • 当开启系统时,会看到两行内容,这里的内容就是系统引导文件中的内容
  • /boot/loader/entries/:引导目录所在的文件
  • /boot/grub2/:也是引导文件,grub.cfg作为主引导文件,在引导过程中指定了两个子引导文件,也就是/boot/loader/entries/目录打开后,里面出现的两个文件,这两个文件打开后,里面分别是开机时,看到的那两个系统引导文件
    在这里插入图片描述
    在这里插入图片描述
  • 实验环境准备:将/boot/loader/entries/目录下的两个文件都删除,此时会导致引导文件丢失
  • 进行手动引导,必须要知道根分区(/dev/vda3)及boot分区(/dev/vda1)所在的系统设备

1)当文件引导丢失之后,启动系统就会出现grub>:

在这里插入图片描述
2)输入 set root=‘hd0,msdos1’,指定引导分区,root表示指定引导设备,hd0指定引导分区的位置是第一块硬盘,msdos1是指定引导分区在第一个硬盘的第一个分区:
在这里插入图片描述
3)输入linux16 /vmlinuz-内核版本 ro root=/dev/vda3,前面是内核版本,ro表示只读,root=/dev/vda3表示根分区的设备:
在这里插入图片描述
4)initrd16 /initramfs- tab补齐,加载系统初始化的镜像,然后输入boot,文件引导完成,启动系统:
在这里插入图片描述
系统启动之后,不代表就被修复了,这样之后每次启动时,都需要手动恢复,因为/boot/loader/entries/目录下的文件是没有被恢复的
5)进入系统后(输入uname -r可以看到内核的版本),输入 kernel-install add +内核版本 +/boot/vmlinuz-4.18(内核镜像),此时会报错;cp /usr/lib/modules/4.18.0-193.el8.x86_64/bls.conf /boot/ 解决文件缺失,然后再输入上面的kernel命令,最后重启系统即可:
在这里插入图片描述在这里插入图片描述

4 内核加载

1)cd /boot 就可以看到内核文件"vmlinux-版本号",删除后会导致文件丢失,重启时系统无法启动:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2)从光盘和前面一样的操作进入挽救模式:

在这里插入图片描述在这里插入图片描述进入真实主机的shell:
在这里插入图片描述
3)挂载 mount /dev/cdrom /meida,进入 /meida/BaseOS/Packages,cp kernel-core-版本号 /mnt将内核的安装包复制到/mnt:

在这里插入图片描述
4)进入/mnt里面查看,对该安装包进行解压;解压完查看会出现lib目录,进入查看有一个modules目录,进入该目录查看:
在这里插入图片描述5)进入/boot/loader/entries/目录中查看4.18那个文件,看内核的名字vmlinuz-4.18…… :

在这里插入图片描述
6)复制该内核文件到/boot,复制时,名字要和查看到的名字一致,复制完成输入两次exit退出。注意,e后面时l不是1:
在这里插入图片描述
7)完成后是从光盘启动,需要关机然后调整为成从硬盘启动,再重新启动系统即可:
在这里插入图片描述

5 系统初始化镜像

1)系统读完内核之后,就会加载系统初始化镜像,也就是/boot里面的initramfs-4.18.0-80.el8.x86_64.img
在这里插入图片描述
2)删除该文件后,reboot系统将出错:
在这里插入图片描述在这里插入图片描述
3)进入挽救模式,输入 chroot /mnt/sysimage/进入真机:
在这里插入图片描述
在这里插入图片描述
4)进入/boot查看,可以使用mkinitrd --help查看该命令用法:

输入mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)命令,然后输入ls /boot,可以看到系统初始化镜像恢复,然后exit两次退出:

在这里插入图片描述
5)换回硬盘启动:
在这里插入图片描述

6 系统启动级别

1) /etc/systemd/system/,系统启动脚本都在该目录中:

在这里插入图片描述
该目录下的default.target 表示系统启动级别的脚本链接;multi-user.target.wants 表示系统所有服务的启动脚本链接。
2)系统开机服务启动的原理是当我们设定服务开机启动或不启动时,系统会在/etc/systemd/system/multi-user.target.wants中建立或删除链接
eg:[root@localhost system]# systemctl disable sshd
Removed /etc/systemd/system/multi-user.target.wants/sshd.service.

3)ls /lib/systemd/system/*.target,里面的链接0-6,分别表示:0-关机、1-单用户、2-无图形网络模式、3-无图形网络模式、4-无图形网络模式、5-有图形网络模式、6-重启:
在这里插入图片描述在这里插入图片描述
4)systemctl set-default reboot.target,系统开机时进入无限重启模式:
在这里插入图片描述
5)使用上下健让页面停止在开机处,按e进行编辑,上下键选择:
在这里插入图片描述
首先按e进入编辑模式,显示的一共有5行:
在这里插入图片描述
更改第四行,在第四行最后面指定系统启动级别为5:
在这里插入图片描述
6)按下ctrl+x开启系统,进入系统后执行systemctl set-default graphical.target命令进行修复,然后重启检查是否修复成功:
在这里插入图片描述

7 超级用户密码忘记

1)开机按上下键停止住页面,然后按e进入编辑模式;将第四行的ro–>rw,再输入rd.break,表示从只读挂载根设备变成读写挂载,rd.break表示在系统内核加载完成后,终止系统启动:
在这里插入图片描述
2)ctrl+x启动系统,会自动进入单用户模式:
在这里插入图片描述
3)当前模式下默认使用root用户登陆,输入chroot /sysroot进入真实系统;输入 echo liu | passwd --stdin root修改密码;修改完后要建立一个文件 touch /.autorelabel,作用是让系统内核级加强型火墙重新初始化,如果更改密码后,selinux未被重新初始化则会阻止新密码生效,注意,此操作只有在selinux开启时需要,一般建立上,防止出现问题;最后输入两次exit重启:

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐