一、系统的引导过程
1.1 过程

二、磁盘引导修复
2.1 问题复现
bash
# 创建问题环境,首先查看系统的启动硬盘
[root@master ~]# fdisk -l
Disk /dev/nvme0n1: 150 GiB, 161061273600 bytes, 314572800 sectors
Disk model: VMware Virtual NVMe Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xbad6a149
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 * 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n1p2 2099200 314572799 312473600 149G 8e Linux LVM
# 得知系统的启动硬盘为/dev/nvme0n1
Disk /dev/mapper/rhel_192-root: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rhel_192-swap: 2.01 GiB, 2160066560 bytes, 4218880 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rhel_192-home: 76.98 GiB, 82661343232 bytes, 161447936 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@master ~]# dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1
1+0 records in
1+0 records out
446 bytes copied, 0.000951019 s, 469 kB/s
[root@master ~]# reboot
# dd --数据复制与转换,此处是把/dev/zero文件复制到/dev/nvme0n1(相当于用全0文件覆盖启动硬盘)
# 覆盖的范围是 bs=446 ,只覆盖前446字节的区域,覆盖 "引导扇区"
# count=1 只覆盖一次
## 关闭 "ISO镜像启动时连接"
# 如果不关,系统启动后自动读取光盘里的内容,发现引导区错误,会提示"进入急救模式"或者"重装系统",这样就跳过了 "直接解决引导区错误" 的方法
2.2 现象

2.3解决方法
-
关机
-
插入光盘和其他设备修复
-
重启运行
选择Troubleshooting

选择 修复系统

bash
fdisk -l |less #查看系统的启动磁盘
grub2-install /dev/nvme0n1 #安装磁盘的引导程序

或者在重启的瞬间按f12(fn + f12)进入到如下界面设置解决

三、主引导文件修复
3.1 引导文件说明
bash
# "磁盘引导"过程中,出错了就可以用resue修复,这是硬件层面
# "文件引导"过程中,默认选择第一个引导标题,出错后可用第二个resue修复,这是软件层面
[root@master ~]# ll /boot/grub2/grub.cfg # 查看主引导文件
-rw-------. 1 root root 7024 Jan 14 12:20 /boot/grub2/grub.cfg
[root@master ~]# ll /boot/loader/entries/ #查看子引导文件
total 8
-rw-r--r--. 1 root root 500 Jan 14 12:20 b2462f6903f949e2a33f42108734f009-0-rescue.conf
-rw-r--r-- 1 root root 476 Jan 14 17:03 b2462f6903f949e2a33f42108734f009-5.14.0-570.12.1.el9_6.x86_64.conf
# 主引导文件和子引导文件的关系:
# 主引导文件像主函数,子引导文件是子函数。主函数调用子函数的配置段、内核,、启动参数等信息,主函数搭建菜单框架,子函数负责每个菜单的具体内容 ===》 模块化设计
子引导文件的标题


3.2 问题复现
bash
[root@master loader]# rm -rf /boot/grub2/grub.cfg #删除主配置文件
3.2.1 情况一(未重启)
bash
[root@master loader]# grub2-mkconfig > /boot/grub2/grub.cfg #重新生成主配置文件
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
3.2.2 情况二(已重启)
bash
[root@master loader]# df # 查看磁盘空间
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 890336 0 890336 0% /dev/shm
tmpfs 356136 7372 348764 3% /run
/dev/mapper/rhel_192-root 73334784 4995884 68338900 7% / # 记住 / 所在磁盘
/dev/nvme0n1p1 983040 373152 609888 38% /boot # 记住 /boot 所在磁盘
/dev/sr0 12462174 12462174 0 100% /mnt
/dev/mapper/rhel_192-home 80658432 604168 80054264 1% /home
tmpfs 178064 100 177964 1% /run/user/1000
bash
# 成功启动后也需要重新生成配置文件
[root@master loader]# grub2-mkconfig > /boot/grub2/grub.cfg #重新生成主配置文件
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
四、总结
-
不管是 MBR 坏了、还是 grub.cfg 删了 → 都能用镜像(ISO)进救援模式修复。
-
生产环境(服务器) - 镜像不是随时都有 - 关机、挂 ISO、重启、进救援 → 很麻烦、耗时间、业务会停 → 所以优先用系统内命令直接修复,不到万不得已不用 ISO。
-
个人电脑 / 虚拟机 - ISO 随便挂、随时能用 - 重启也无所谓 → 想用系统内修复就用系统内,想用 ISO 修复就用 ISO ,怎么方便怎么来。 你现在已经把整个引导修复的逻辑、场景、为什么要这么学全部搞通了。