0.Linux系统引导过程:
1.通电
2.bios初始化
3.磁盘引导阶段
4.grub2文件引导程序
5.内核加载
6.系统初始化镜像
7.系统启动级别
8.超级用户密码
以下内容是针对各过程会出现的问题及提出的解决方案
1.通电
如果没有通电,根本就无法开机,所以需要去检查电源,没电买电就行了,这和系统本身没有关系
2.bios初始化
对硬件进行检测,初始化硬件时钟(内存、硬盘等硬件设备没插好,会发出蜂鸣声报警)
bios是一个写入到硬件(主板)上的一个软件程序,在开机时,计算机系统主动执行的第一个程序,bios会依据使用者的设定去取得能开机的硬盘,并且到该硬盘里面去读取第一个扇区的mbr位置
3.磁盘引导阶段
主引导记录(mbr):所在位置0磁道1扇区,硬盘容量446byte放置最基本的开机管理程序,开机管理程序目的是加载核心文件
mbr作用:记录grub2引导文件的位置,读取这个文件以后,这个文件里面记录了/boot分区的位置并且指定在启动时要读取的文件
当mbr数据丢失,系统会因为找不到启动分区而停止启动
如何知道mbr在系统哪块磁盘里面?
执行 fdisk -l 命令 ,* 在哪一个分区上,这个分区所在的设备上面就有mbr

问题模拟:
系统磁盘/dev/nvme0n1
dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 清空系统dev/nvme0n1上的mbr数据
恢复方式:
用光盘进入系统挽救模式 :
在系统安装界面选择Troubleshooting系统排错选项,进入Troubleshooting排错界面,选择系统挽救模式

进入挽救模式环境,如果想要还原根目录,需要将你的系统挂载到/mnt/sysimage目录下
显示四个选项:继续、只读挂载、跳到一个shell、退出重启,这里我们选择继续

执行chroot /mnt/sysimage命令,还原根目录内容,再执行grub2-install /dev/nvme0n1命令,恢复磁盘的文件引导程序,之后,执行两次exit命令退出,开启系统选择硬盘驱动系统就可以开启了


4.grub2文件引导
grub2引导文件分别在/boot/grub2/grub.cfg 、/boot/loader/entries/xxxxxxxxx.conf两个文件中
这两个文件里记录了系统启动过程中的一系列文件,开机时等待5秒,标题设定,
第一个做的事:设定你启动的根等于系统第一块硬盘的第一个分区(/boot分区),指定这个分区的目的是下一步要读取这个分区里的资源:内核镜像、系统初始化镜像,读取了这些文件以后,才能完成系统初始化过程
rhel8中:
grub2.cfg文件只指定了根等于系统第一块硬盘的第一个分区(/boot分区)
/boot/loader/entries/xxxxxxxxx.conf文件里有系统下一步启动要读取到的资源




模拟问题:
rm -fr /boot/loader/entries/*
修复:
kerne-install add 内核版本号 内核镜像
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
手动引导
set root='hd0,msdos1'
linux /vmlinuz-3.10.0-957.el7.x86_64 ro root=/dev/nvme0n1p3
initrd /initramfs-4.18.0-80.el8.x86_64.img
boot
删除系统启动时需要的grub2引导文件

重启系统,出现如下界面,需要手动引导
指定启动的根等于系统第一块硬盘的第一个分区(set root=‘hd0,msdos1’),
内核镜像:加载内核版本到根分区,根目录的设备名称和你系统中的一致,
系统初始化镜像,
开启(boot)

开启后,这次手动引导并没有从根本上解决问题,当你下次开启系统仍需要手动引导
执行kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz命令将需要加载的文件永久记忆在系统中
$(uname -r) 表示内核版本号
如果损毁了这两个文件后,没有重启,在命令行输入这条命令就可以恢复kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz
如果重启了,也可以用光盘驱动进入挽救模式环境下直接执行这条命令对grub2文件进行恢复
若是grub.cfg文件损毁,在开启后需要执行grub2-mkconifg > /boot/grub2/grub.cfg命令在系统中永久恢复
5.内核加载
内核加载所需要读取的文件:
/boot/vmlinuz-$(uname -r)
加载内核作用:
系统初始化硬件设备
只读挂载/设备,为下一步系统初始化做准备,因为/设备挂载后才可以读取里面的数据,才能去加载系统里面的服务,去对我们的服务进行初始化
问题出现:
rm -fr /boot/vmlinuz-$(uname -r) ## 系统会因找不到这个文件而引导不起来

恢复: 重装内核
用光盘驱动进入到挽救模式

chroot /mnt/sysimage ## 得到一个真实的/挂载
mount /dev/cdrom /mnt ##内核镜像载光盘,将光盘挂载到/mnt下,
cd /mnt/BaseOS/Packages ##进入到/mnt/就会有数据
rpm -ivh kernel-core-xxxxx.rpm --force ##安装内核镜像软件包
rhel8: mv /boot/vmlinuz-kernel-xxxxx /boot/vmlinuz-xxxxx ##企业8里可直接移动内核镜像到/boot分区

执行两次exit后,重启客户机就可以了
6.系统初始化镜像
文件路径/boot/initramfs-4.18.0-80.el8.x86_64.img
作用:
加载系统时钟
加载selinux
加载系统主机信息
加载/etc/fstab文件中磁盘挂载策略
加载磁盘配额
初始化系统程序开启开机启动服务
开启虚拟控制台
开启图形
问题出现: rm -fr /boot/initramfs-4.18.0-80.el8.x86_64.img

恢复:
进入挽救模式下,执行chroot /mnt/sysimage命令,得到一个真实的/挂载
再执行 mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 命令,恢复系统初始化镜像文件

退出后,使用硬盘驱动重新启动系统就可以了
7.系统启动级别
级别说明
0 关机
1 单用户
2 无图形网络模式
3 无图形网络模式
4 无图形网络模式
5 有图形网络模式
6 重启
问题出现:
systemctl set-default reboot.target ##系统在开机时无限重启

恢复:
在开机选择界面按进入到引导文件编辑模式
在内核加载选项最后加入启动级别5
ctrl+x启动
systemctl set-default graphical.target ## 系统在开机时开启图形

8.超级用户密码忘记
问题:超级用户密码忘记,无法登录
恢复:
1.在开机选择界面按进入到引导文件编辑模式
2.在内核加载选项最后删除到ro选项
3.更改ro---->rw (只读改为读写,如果你只读挂载 "/ ",你就更改不了)
4.加入rd.break参数(使系统初始化终止)终止系统启动,进入单用户模式
5.ctrl+x启动,之后就进入到单用户模式了
6.执行chroot /sysroot命令,切换到我们真实的shell,进入到超级用户模式(whoami)
7.更改超级用户密码:echo coffee| passwd --stdin root
如果selinux是开启状态,它不识别你的更改,这时需要建立一个文件/.autorelabel,重启selinux;如果selinux是关闭状态,就不用建立此文件
8.touch /.autorelabel ##当/.autorelabel文件存在selinux会重新初始化




Li_barroco
发布了20 篇原创文章 · 获赞 0 · 访问量 2110
私信
关注
标签:引导,修复,初始化,boot,系统,内核,文件,Linux,加载
来源: https://blog.csdn.net/weixin_45792518/article/details/104555193