一、问题描述
某次云主机因计费问题,导致批量重启,重启后发现某台云主机竟进入紧急救援模式(emergency模式),如下所示:
二、原因及处理
1)原因:加载根分区失败,导致无法读取引导区所在磁盘上的正确位置,报错root文件系统没有挂载或者系统缺少os-release文件,造成initrd-switch-root.service服务启动失败。比如:kernel启动参数,系统启动参数中没有包含“root=”,造成系统启动过程中无法挂载root文件系统;比如虽然有参数,但参数不正确或参数指向不正确,指向非根分区,依然无法读取到启动grub文件;/boot/grub2/grubenv环境变量文件被损坏;磁盘/分区的UUID冲突,导致启动时加载了非root分区;
#查看日志
vi /run/initramfs/rdsosreport.txt #查看rdsosreport.txt日志,或
journalctl -xe
#查看GRUB引导区环境变量
grub2-editenv list #如下
saved_entry=6752e052c66d4923aeeb3f42f123175e-4.18.0-348.7.1.el8_5.x86_64 #当前设置的默认启动项为ID为"6752e052c66d4923aeeb3f42f123175e-4.18.0-348.7.1.el8_5.x86_64"的内核镜像
kernelopts=root=/dev/mapper/cl-root ro crashkernel=auto console=ttyS1,115200n8 printk.time=1 pci=hpiosize=0 ignore_loglevel resume=/dev/mapper/cl-swap iommu=pt rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet memmap=32G$0x2050000000,1M$0x100000 #内核启动参数包括根文件系统、内核日志打印级别、PCI总线相关设置、睡眠唤醒等配置。
boot_success=0 #最近一次引导成功的标志位,0表示引导失败。
boot_indeterminate=0 #未知引导状态的标志位,0表示已确定引导状态。
#查看启动参数:menuentry就是启动的入口
cat /boot/grub2/grub.cfg| grep menuentry
#判断是BIOS还是UEFI启动
ls /sys/firmware/efi #如果该命令返回了目录列表,则说明系统是使用UEFI引导的。如果该命令返回“No such file or directory”或类似的错误信息,则说明系统是使用BIOS引导的
#GRUB(GNU GRand Unified Bootloader)相关文件
/boot/grub2/grub.cfg #GRUB的主配置文件,用于定义引导菜单的内容和样式。
/boot/grub2/grub2-efi.cfg# GRUB的EFI版配置文件,用于定义UEFI系统的引导菜单。
/boot/grub2/grubenv #GRUB的环境变量文件,用于存储一些系统配置信息,例如默认引导项、超时时间等。GRUB 会将选择的启动项的编号存储在 next_entry 变量中。然后,当计算机重新启动时,GRUB 将自动加载该变量,并使用 set default="${next_entry}" 命令将默认启动项设置为该变量所存储的启动项编号;不建议直接修改 /boot/grub2/grubenv 文件中的内容,对该文件任意破坏都将导致OS的无法启动。
#如果grubenv文件损坏,可创建一个
grub2-editenv /boot/grub2/grubenv create #创建一个空的grubenv文件
grub2-editenv /boot/efi/EFI/实际系统路径/grubenv create #UEFI引导下
ln -sf /boot/efi/EFI/实际系统路径/grubenv /boot/grub2/grubenv
#重新生产引导配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/实际系统路径/grub.cfg #UEFI引导下
2)现场属于UUID冲突导致的分区启动加载错误导致的;可在grub启动菜单ctrl+X进行多次重启,有概率切换到正确的磁盘上;否则,云控制台可临时卸载数据盘;处理如下
#1)重新进入系统后,重新挂载数据盘,检查数据盘UUID
#2)对数据盘冲突的UUID重新生成
uuidgen | xargs xfs_admin /dev/sdc1 -U #xfs文件系统
uuidgen | xargs tune2fs /dev/sda2 -U #ext的
#3)完成后重启即可。