【Linux-云原生-笔记】系统引导修复(grub、bios、内核、系统初始化等)
一、系统启动流程
1、通电
启动所有的硬件,并为进入系统做准备
开始前检查所有的电源设备、确定供电设备正常、所有的线缆是否插紧、线缆是否有损坏
2、BIOS环境检测
BIOS会检测:
(1)检查硬件是否正常
(2)检查硬件是否插紧
3、磁盘引导阶段
这个阶段系统会先找到/boot分区,而如果此阶段出现问题,那么系统会处于黑屏并闪烁光标状态
我们可以模拟一下出现这种问题的情况
(1)模拟问题的命令:
dd if=/dev/zero of=/dev/sda bs=446 count=1
/dev/sda 是系统boot分区所在磁盘
注意“bs=”这一块后面的一定是446,千万不要写错了,写错了系统就起不来了
此命令标识用无限零字节覆盖/dev/sda上最前面的446个字节(mbr主引导记录,负责找到/boot)
然后输入reboot重启,就会进入这个界面:
(2)如何解决?
进入挽救模式:
之后会进入到这个界面,选择Troubleshooting
选择Rescue....进入挽救模式
等待些许时间,进入这个界面,输入1来选择continue
随后按enter获取shell
然后按照下面来执行命令:
chroot /mnt/sysroot
fdisk -l
grub2-install
- chroot /mnt/sysroot —— 从挽救模式的环境切换到系统环境
- fdisk -l —— 通过命令找出启动设备(*在那个设备上那个就是启动设备)
- grub2-install —— 启动设备(/dev/sda)
之后,输入两次exit,重回系统
exit
exit
等待系统重启,系统修复完毕
二、文件引导阶段
在文件引导阶段,系统会读取/boot/grub2/grub.cfg (自动引导文件),在此文件中指定系统系统过程中读 取什么文件,加载什么参数
1、如何修改grub参数(以修改时间为例)
vim /etc/default/grub
示例
更改为10,即为设定grub启动时等待时间为10秒
wq
然后生成新grub.cfg
grub2-mkconfig > /boot/grub2/grub.cfg
2、问题模拟
问题:当/boot/grub2/grub.cfg文件丢失,那么系统将无法完成自动启动
模拟问题前先用df命令查看一下自己的根分区(/)和boot分区(/boot)的路径,最好截个屏记住,待会要用
df
示例
- / —— 根分区
- /boot —— boot分区
重现问题:
rm -fr /boot/grub2/grub.cfg
示例
此文件如果被删除,并把系统重新启动,那么 出现如下界面:
出现grub界面后,我们手动引导进入系统:
(1)指定boot分区位置
set root=(hd0,msdos1)
示例
名词解释:
- 指定boot分区位置
- hdn 便是boot分区在那个硬盘上
- msdosn在那个分区
(2)指定内核文件
linux16 /vmlinuz-5.14.0-427.13.1.el9_4.x86_64 ro root=/dev/sda3 selinux=0
示例
initrd16 /initramfs-5.14.0-427.13.1.el9_4.x86_64.img
示例
红框处同样tab补齐,不要手打
(3)启动系统
boot
示例
不是reboot!不要写错了!reboot的话就又要重头开始搞了
这样搞完后就可以进入到系统了:
成功进入系统
这就是手动引导系统,从而进入系统
注意:以上步骤只能完成本次引导,系统重启后仍然需要手动引导
如需永久恢复,则:
grub2-mkconfig > /boot/grub2/grub.cfg
三、内核参数文件
cd /boot/loader/entries/
ls
能够查看到这两个文件:
一个是挽救内核参数,一个是常规内核参数信息
问题复现指令:
enter后reboot重启,又会进入这个grub界面
按照上面刚刚说过的方法,先手动引导进入系统(不再赘述)
进入系统,登录完后,输入这个
等待其恢复
恢复完后,我们查看一下我们删除的文件目录,看其恢复没
已恢复,完成
四、启动内核
1、问题模拟
rm -fr /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
示例
这时reboot会进入这个报错界面:
2、如何修复?
(1)关机,进入主机bios,让主机从光盘启动
关机
点击小三角,选择 打开电源时进入固件(bios)
进入bios后,选择boot,然后选择CD-ROM.....,再按+加号(shift+加号键),将其搞到最上面
F10保存,选择yes
(2)通过设置进入到rescue(挽救模式)
之后会进入到这个界面,选择Troubleshooting
选择Rescue....进入挽救模式
等待些许时间,进入这个界面,输入1来选择continue
随后按enter获取shell
然后按照下面来执行命令:
chroot /mnt/sysroot
mount /dev/cdrom /media
cd /media/BaseOS/Packages/
cp kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm /mnt
cd /mnt
ls
示例
可以看到文件kernel....已经复制到/mnt里
接着:
rpm2cpio kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm | cpio -id
cd lib/modules/5.14.0-427.13.1.el9_4.x86_64/
cp vmlinuz /boot/vmlinuz-$(uname -r)
示例
最后输入两次exit,进入系统
exit
exit
(3)修复完成后,将光盘启动改成硬盘启动
修复完成后需要把光盘启动切换至硬盘启动:
回到那个界面后,不用进入任何选项,选择小三角,关机,然后再选择从固件启动
继续选择boot,再按+加号(shift+加号键),将+Hard...搞到最上面
F10保存,选择yes
这样,就能成功重回系统了
五、系统初始化
1、问题重现
使用初始化环境开启系统所有开机启动服务
模拟问题的命令:
rm -fr /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img
reboot重启后又会进入这个界面:
2、如何解决?
这里的步骤和前面的大部分相同,所以就不重复赘述,只简短描述
(1)还是关机,进入bios,选择光盘引导进入挽救模式
(2)输入这些命令
chroot /mnt/sysroot
mount /dev/cdrom /media/
cd /media/BaseOS/Packages/
rpm -ivh kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm --force
示例
等待装好后,两次exit:
exit
exit
(3)设置启动顺序,把硬盘启动放在第一位
进入系统后,继续关机,进入bios ,选择硬盘启动放在最上面
F10退出保存,就能进入系统了