Red Hat Enterprise Linux 系统启动过程的运行流程:
1、通电
2、bios初始化
3、磁盘引导
4、grub2文件引导
5、内核加载
6、系统初始化镜像
7、系统启动级别
8、用户账号密码登录
如果我们在系统启动过程中这些引导程序出现问题,那我们如何去应对和修复这些问题,下面针对每一个模块来进行分析和问题演练。
通电
这个模块是最简单的,系统启动最开始,如果没有通电根本无法开机,所以如果开机都无法开启就先去检查电源是否正常。
bios初始化
- 对硬件检测
- 初始化硬件时钟
这个阶段就是检测我们的主机的硬件设备,如磁盘、内存条、显卡等设备,如果有问题就会发出警报声。
进入bios模式可以在开机一开始按 [Esc] 键进入,或者在VMware虚拟机启动选项里选择打开电源时进入固件。
磁盘引导
Master Boot Record
主引导记录(MBR,Master Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
它所在的位置是磁盘的0磁道1扇区的446个字节,它的作用是记录grub2引导文件的位置。
当MBR数据丢失时系统会因为找不到启动分区而停止启动
命令:fdisk -l ,可以列出我们的磁盘信息
可以看到,我的系统磁盘是/dev/sda ,而我们的启动程序是在/dev/sda1里,磁盘每个人的主机硬件是不一样的,所以要根据具体查看的信息确认。
问题模拟:
将 /dev/sda里的446个字节信息我们抹除掉,
dd if=/dev/zero of=/dev/sda bs=446 count=1
这是数据截取方式,这里我们将sda里的446个字节数据替换掉。
然后重启看出现的情况是什么
根据我们开机时进入bios的几个启动方式
第一项Removable Devices移动设备,显然我们没有;
第二项硬盘启动,根据我们刚才的操作现在系统已经找不到启动扇区了,无法启动;
第三项光驱启动,显然我们没有接入光驱;
第四项网络加载,所以现在系统会去自动寻找网络资源,可以看到上面显示的DHCP,获取动态网络。
解决方法:
- 用光驱接入光盘进入系统抢救模式
首先进入光盘镜像选择Troubleshooting排错故障
然后在Troubleshooting模式里选择Rescue a Red Hat Enterprise Linux system(抢救rhel系统)
进入抢救模式后,这四个选项:继续、只读挂载、跳过到shell、退出重启,当然我们要选择continue第一个
选完后加载完,让使用 [ENTER] 键进去shell
- 修复/dev/sda 磁盘
根据这里的提示我们看到你的系统被挂载到/mnt/sysimage,如果想要还原根目录执行命令:chroot /mnt/sysimage,后面还有完成后执行“exit” 退出shell 并重启系统
执行完后得到的信息就和之前的系统信息一样了
再执行命令:grub2-install /dev/sda ,恢复我们磁盘的引导文件,完成 exit 退出重启系统
exit需要执行两次退出,重启后系统就恢复正常了
grub2文件引导
文件路径:
- rhel7中:/boot/grub2/grub.cfg
- rhel8中:将文件的内容划分开
/boot/grub2/grub.cfg
/boot/loader/entries/xxxxxxxxx.conf
这两个文件里的内容分别时对两个标题的分别设定
grub2文件引导的作用:指定/boot位置,指定系统启动时加载文件成名。
问题模拟:
删除grub2文件,造成无grub2文件引导的情况:
rhel7:/boot/grub2/grub.cfg
rhel8:/boot/grub2/grub.cfg
/boot/loader/entries/xxxxxxxxx.conf
重启后系统进入如下界面,这种情况可以用两种方式进入系统,用系统光盘进入抢救模式或手动引导加载。
解决方法:
- 手动引导
在启动系统进入的界面输入如下指令
set root=‘hd0,msdos1’ (hd0=系统的第一块硬盘,msdos1=第一个分区,如果你的系统放置的位置不一样就要自己记住再写)
linux16 /vmlinuz-4.18.0-80.el8.x86_64 ro root=/dev/sda2 (加载内核版本到根分区,我的根分区是在sda2里)
initrd16 /initramfs-4.18.0-80.el8.x86_64.img (加载系统内核镜像)
boot (执行完上面的,输入boot进入系统)
手动引导并不能永久记忆在系统中,重启还是需要再引导, - 系统中安装
如果我们损坏了/boot/grub2/grub.cfg或/boot/loader/entries/xxxxxxxxx.conf文件,系统没有重启时可以执行如下命令,如果重启了可以用光盘驱动进入抢救模式,恢复挂载后再执行。
rhel7:
[root@localhost ~]# grub2-mkconifg > /boot/grub2/grub.cfg
rhel8:
[root@localhost ~]# kerne-install add 内核版本号 内核镜像
例:[root@localhost ~]# kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
[root@localhost ~]# grub2-mkconifg > /boot/grub2/grub.cfg
$(uname -r) = 内核版本号的指代命令,因为使用命令“uname -r”可以查看内核版本。
执行完后再查看就可以看到文件已经被恢复好了。
内核加载
内核路径:/boot/vmlinuz-4.18.0-80.el8.x86_64
加载内核作用:系统初始化硬件设备,只读挂载 “/” 设备
问题模拟:
删除内核文件:rm -fr /boot/vmlinuz-4.18.0-80.el8.x86_64
重启就会出现报错,找不到内核
解决方法:
重装内核
使用光驱启动进入抢救模式
还是先执行:chroot /mnt/sysimage
挂载驱动到 mount /dev/cdrom /mnt ,进入:cd /mnt/BaseOS/Packages
重新安装内核:rpm -ivh kernel-xxxxx.rpm --force ,因为默认是安装过的,所以用 --force 参数强制重新安装
在rhel8中内核的安装包是不一样的 “kernel-core-xxxx.rpm”
到这里在就完成重装了,“exit” 退出切换bios的启动顺序,重新启动。
系统初始化镜像
系统初始化镜像路径:/boot/initramfs-4.18.0-80.el8.x86_64.img
作用:
加载系统时钟
加载selinux
加载系统主机信息
加载/etc/fstab文件中磁盘挂在策略
加载磁盘配额
初始化系统程序开启开机启动服务
开启虚拟控制台
开启图形
问题模拟:
删除系统初始化镜像文件:rm -fr /boot/initramfs-xxxxx.img
报错找不到镜像文件
解决方法:
使用光驱启动进入抢救模式
在shell中mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
到这里在就完成重装了,“exit” 退出切换bios的启动顺序,重新启动。
系统启动级别
级别 | 说明 |
---|---|
0 | 关机 |
1 | 单用户 |
2 | 无图形网络模式 |
3 | 无图形网络模式 |
4 | 无图形网络模式 |
5 | 有图形网络模式 |
6 | 重启 |
问题模拟:
在/etc/systemd/system目录里的内容包括初始化系统程序开启开机启动服务,是否开启图形这些内容,而文件default.target 就是链接到 /lib/systemd/system/graphical.target 开机启动图形
如果这个文件链接出问题,比如链接到poweroff.target或reboot.target,那开机时就是又关机或无限重启
例: systemctl set-default reboot.target
删除之前的default.target链接,创建一个新的链接。
然后重启后系统就会不停的重启
解决方法:
在开机选择界面按进入到引导文件编辑模式,在内核加载选项最后加入启动级别5 ,按[ctrl]+[x]执行
在内核加载选项最后加入启动级别5 (有图形网络模式),按[ctrl]+[x]执行
然后登陆进系统例执行命令:systemctl set-default graphical.target ,修改错误的链接
再重启就恢复正常了。
超级用户密码忘记
如果忘记超级用户密码,无法登录超级用户。
解决方法:
- 在开机选择界面按进入到引导文件编辑模式
- 在内核加载选项最后删除到ro选项,更改ro---->rw,ro=只读,rw=读写
- 加入rd.break参数终止系统启动进入单用户模式,ctrl+x启动
- 进入单用户模式后,执行命令:chroot /sysroot ,进入系统shell,成为超级用户身份
- 更改超级用户密码:echo hehe | passwd --stdin root
- 如果系统的selinux功能是开启的,需要建立一个文件:touch /.autorelabel ##当/.autorelabel ,文件存在会selinux会重新初始化,建立完后执行 exit 启动系统
启动后使用新密码可以登录超级用户。