RHCA扩展

一、系统的引导过程

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解决方法

  1. 关机

  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

四、总结

  1. 不管是 MBR 坏了、还是 grub.cfg 删了 → 都能用镜像(ISO)进救援模式修复

  2. 生产环境(服务器) - 镜像不是随时都有 - 关机、挂 ISO、重启、进救援 → 很麻烦、耗时间、业务会停 → 所以优先用系统内命令直接修复,不到万不得已不用 ISO。

  3. 个人电脑 / 虚拟机 - ISO 随便挂、随时能用 - 重启也无所谓 → 想用系统内修复就用系统内,想用 ISO 修复就用 ISO ,怎么方便怎么来。 你现在已经把整个引导修复的逻辑、场景、为什么要这么学全部搞通了。

相关推荐
STDD2 分钟前
Glances:跨平台系统资源监控,浏览器实时查看服务器状态
运维·服务器
好好风格14 分钟前
宝塔面板 HTTPS 端口证书不生效排查记录
linux·运维·nginx
Forget_855037 分钟前
HCIA——计算机网络诞生与发展
服务器·网络·计算机网络
xiaoshuaishuai81 小时前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
用户2367829801681 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux
zzipeng1 小时前
Linux LCD驱动
linux·运维·服务器
思麟呀1 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows
浮生若城1 小时前
Linux库制作与原理(2):理解链接与加载
linux·运维·服务器
Cat_Rocky1 小时前
Gitlab安装与配置
linux·运维·gitlab
志栋智能2 小时前
超自动化巡检:降低运维总成本(TCO)的有效路径
大数据·运维·网络·人工智能·自动化