前言
本节内容主要讲的是系统的引导及修复。首先在启动Linux系统时,需要先通电,接着系统会自动进行bios初始化,然后依次进行磁盘引导、grub2文件引导、内核加载、系统初始化镜像、系统启动级别等过程。
1、通电
由于通电导致的系统障碍与系统本身无关。
2、bios初始化
bios初始化功能:对硬件进行检测、初始化硬件时钟。
bios界面:
3、磁盘引导
磁盘引导区记录着磁盘的一些最基本的信息,磁盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)以及磁盘的有效标志。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。
在总共512字节的主引导扇区里MBR占446个字节(偏移0—偏移1BDH),DPT占64个字节(偏移1BEH —偏移 1FDH),最后两个字节“55AA”(偏移1FEH—偏移1FFH)是硬盘有效标志。
简述即:
mbr=主引导记录=0磁道1扇区446个字节
作用:
记录grub2引导文件的位置
当mbr数据丢失系统会因为找不到启动分区而停止启动
问题模拟:
系统磁盘/dev/sda
fdisk -l ###查看系统分区所在的磁盘 带*表示有引导程序的
dd if=/dev/zero of=/dev/vda bs=446 count=1 ##清空系统/dev/sda上的mbr数据
修复方式:
用光盘作为引导盘进入系统挽救模式。
1.先为此虚拟机添加光驱,配置镜像文件,要在关闭的情况下进行操作。
2.选择优先使用光盘启动系统
3.开机选择排错,按enter,选择挽救Linux系统
4.进入挽救界面,目前在光盘系统
5.回车,获得一个shell,此时光驱设备挂载在/下。使用chroot /mnt/sysimage切换到真实环境,安装grub2文件系统在启动分区的磁盘/dev/vda来恢复主引导mbr
6.将selinux状态设置为disable,目的是修复系统后重新初始化,否则会导致启动很慢。
7.修复完成后,选择虚拟磁盘进行系统启动。
4、grub2文件引导
RHEL8中,系统文件引导需要用到的文件:
主引导文件:/boot/grub2/gtub.cfg
子引导件:/boot/loader/entries/xxxxxxxxx.conf
主引导文件指定/boot位置;子引导文件指定系统启动时加载文件名称。
模拟问题1:
rm -fr /boot/grub2/grub.cfg
修复:
手动引导
set root='hd0,msdos1' ##指定boot分区所在磁盘位置,hd0=系统第一块磁盘,msdos1=hd0的第一块分区
linux16 /vmlinuz-4.18.0-193.el8.x86_64 ro root=/dev/vda3 ##启动内核,读取根分区资源
initrd16 /initramfs-4.18.0-80.el8.x86_64.img ##加载系统初始化镜像
boot
完成以上操作系统启动成功,但丢失文件依旧不在。用以下命令重新生成主引导文件。
grub2-mkconfig > /boot/grub2/grub.cfg
模拟问题2
子引导文件丢失
修复:
手动引导
同问题1,进入系统后使用命令恢复
kernel-install add 4.18.0-193.el8.x86_64 /usr/lib/modules/4.18.0-193.el8.x86_64/vmlinuz ##添加内核(vmlinuz==内核)
$(uname -r)==4.18.0-193.el8.x86_64 ##内核版本号
5、内核加载
加载内核作用: 系统初始化硬件设备
只读挂载/设备
问题模拟
删除系统内核
修复:
断电虚拟机后为此虚拟机添加光驱配置镜像—选择光驱启动系统----系统开启后选择排错修复----选择挽留系统—进入挽救界面----获得一个shell
cp /lib/modules/4.18.0-193.el8.x86_64/vmlinuz /boot/vmlinuz-4.18.0-193.el8.x86_64 ##复制光驱中的内核文件至boot分区中
修复操作完成后,选择虚拟机优先选择虚拟磁盘进行启动且启动后内核文件也恢复。
6、系统初始化镜像
系统启动时需要系统初始化镜像来加载系统时钟、selinux、系统主机信息、磁盘挂载策略(/etc/fstab)、磁盘配额情况等,也会使用其初始化系统程序开启各自的开机自启服务,开启虚拟控制台、图形等等;所以系统初始化镜像丢失后会导致无法启动系统。
问题模拟:
rm -fr /boot/initramfs-xxxxx.img
修复:
断电虚拟机后为此虚拟机添加光驱配置镜像—选择光驱启动系统----系统开启后选择排错修复----选择挽留系统—进入挽救界面----获得一个shell
mkinitrd /boot/initramfs-4.18.0-193.el8.x86_64.img 4.18.0-193.el8.x86_64 ##创建/boot下的系统初始化镜像文件
修复完成
7、系统启动分区
系统在启动时需要首先读取/boot分区下的信息,其中包含了引导文件、系统内核文件、系统初始化镜像文件等数据,/boot分区下所有文件丢失后,系统无法正常启动。
问题模拟
rm -fr /boot/*删除/boot下的所有文件
修复:
断电虚拟机后为此虚拟机添加光驱配置镜像—选择光驱启动系统----系统开启后选择排错修复----选择挽留系统—进入挽救界面----获得一个shell
重新安装grub2到系统硬盘/dev/vda上,从而恢复/dev/vda上的主引导记录MBR;将光驱挂载在/mnt上使用其中资源安装系统内核,安装完成会发现/boot下所需要的内核文件和初始化镜像文件等都会一并生成。
修复完成。
8、系统启动级别
0 关机
1 单用户
2 无图形网络模式
3 无图形网络模式
4 无图形网络模式
5 有图形网络模式
6 重启
系统默认启动级别为5,当改变系统默认启动级别时,系统会启动失败。
问题模拟
设定系统默认级别为6,系统会一直处于启动和重启死循环
修复:
在启动界面按e进入引导文件编辑模式。在内核加载选项选择输入5,Ctrl + x执行,启动系统。
修复完成
9、超级用户密码忘记
问题模拟
修复:
在系统启动界面选定系统版本后按 e 进入引导文件编辑模式;
在内核加载选项内容中删除 ro(read-only)之后的字符;
更改内核加载选项内容中的 ro 为 rw ,之后添加 rd.break 参数终止系统启动并 ctrl+x 进入单用户模式;
在单用户模式下更改密码:
chroot /sysroot ##切换到真实的系统环境
touch /.autorelabel ##当此文件存在时,selinux会重新初始化;建立此文件的目的是为了避免系统中的selinux使更改不生效