本意是想进入Centos7 BIOS关闭CPU超线程,使用IPMI重启服务器。结果踩进一大坑。
挂盘重启第一次顺利进入系统,且 mount-a
没有问题。
然后因为不熟悉按哪一个键进入BIOS,错过了几次,所以连续重启了几次。
发现后面系统进不去了,提示:
输入root密码并没有什么反应,提示认证错误,无法进入紧急模式。
网上说法一大堆,基本无用处。
一般重启进不了系统都是磁盘、或者磁盘挂载的问题。但是我重启之前使用mount -a挂载并没有报错,所以我认为我挂的那24块SSD盘是没有问题的,但是很奇怪,难道是重启过程中磁盘硬件坏啦或者分区损坏了,这种可能性是小概率事件,并且不可能如此凑巧。
既然无法进入紧急模式,那就没法查看系统, 即使怀疑是磁盘问题也需要进入系统查看配置文件或者fsck修复。
所以尝试进入单用户模式救火,至少单用户模式是可以敲一些简单的命令。
在引导选择需要启动的Kernel ,修改为以下配置:
ctrl+x
启动, chroot /sysroot
改变目录即可执行命令。
进入系统后首先 mount-a
看看有没有问题,发现无报错。再执行 fsck/
发现不能执行。 vim /etc/fstab
发现该文件并没有写错。又没了头绪。后面尝试强制让Linux启动不进入救援模式,没有成功,然后看到这个启动内核日志就两行
想到尝试修改其启动的时候日志级别,让其日志显示更为详细。
于是再次进入引导页面,将 rhgb quiet
这一项删除,并增加 loglevel=7
,也就是不以静默模式启动,打印详细日志。
并让其进入单用户模式。
Before
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_geeklab-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_geeklab/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rd_LVM_LV=vg_geeklab/lv_root rhgb quiet console=ttyS0
initrd /initramfs-2.6.32-431.el6.x86_64.img
After
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 rw root=/dev/mapper/vg_geeklab-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_geeklab/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rd_LVM_LV=vg_geeklab/lv_root console=ttyS0 loglevel=7 init=/sysroot/bin/sh
initrd /initramfs-2.6.32-431.el6.x86_64.img
ctrl+x
保持启动,发现日志打印了一堆 /ssd/ssd1、2、3...mount erro
的报错,忘记截图了,都是我之前挂载的ssd,在黑暗中发现光了。
进入单用户模式,发现/etc/fstab文件可以编辑,惊喜,于是将之前写入的ssd挂载信息全部删除, reboot
。
系统正常了!!!
然后我再次使用之前挂载磁盘的脚本挂载了一次ssd,并多次检查文件有无写错, mount-a
有无问题,发现均正常。然后我再次点击了重启按钮,发现系统正常进入了。脚本和操作都没有变过,这次无异常。
离大谱!!
然后我再次重启进入bios修改cpu超线程配置,以下配置(不同厂商主板可能不一样)
报错重启发现也正常启动。但发现下面的报错还在:
难受。原来纠结了我这么久的报错居然不是重点。
重点是打印出来的那个 mount error
报错。
虽然这次最后还不知道为什么明明我挂载没有问题还是出现启动无法进入系统,但是经过这一次踩坑,对Linux的BIOS和grub算是熟悉了很多,以后有什么问题基本不怕了。挺开心的。
附挂载脚本:
#!/bin/bash
# Time: 2022-02-09
# Version:V1.0
dir=(`echo /ssd/ssd{0..23}`)
disk=(`echo nvme{0..23}n1`)
#disk=(nvme5n1)
for d in ${disk[*]}
do
echo -----------Begin mount $d---------------
parted /dev/$d mklabel gpt
parted /dev/$d mkpart primary 0% 100%
sleep 5
mkfs.ext4 /dev/${d}p1
sleep 2
uid=`blkid /dev/${d}p1 |awk '{print $2}'`
num=`echo $d |awk -F'n' '{print $2}' | awk -F'e' '{print $2}' `
echo "$uid /ssd/ssd$num ext4 defaults 0 0" >>/etc/fstab
mount -a
if [ $? -eq 0 ];then
echo "$d mounted ok.... "
fi
done
参考: