一、故障情况
前段时间购买了oneprovider的服务器(8核/16g/2TX2 HHD/G口限速),价格非常的便宜,但是这服务商工单回复特别慢,而且没有VNC!然后装系统Centos7.9,但是内核是3.10的。不出意外的这类服务器要装BBR来缓解网络延迟,网速过慢问题,然后一键脚本开始怼进去了,重启选择新内核后,问题就出现了······不开机!因为没有VNC,所以也没有办法选择旧内核开机,摆在我面前的就两条路。1,重装系统 2,提交工单解决。但因为我有500g的数据已经在服务器上了,重装系统不可能。
这个时候看到了可以跟服务商申请impi权限,这样子基本上就可以控制服务器了~然后就是选择旧内核开机进系统,进系统后就开始处理。找了一堆资料终于发现了问题所在。
二,问题分析
其实这个问题很好解决,就是我购买的这款服务器的硬盘是SAS,不是常规的SATA硬盘,而Centos系统安装时默认安装了mpt2sas,升级了4.0以上的内核后使用的是mpt3sas,但在升级内核过程中没有将这一驱动正常打上,导致开机选择新内核后无法正常识别SAS硬盘,就导致无法开机。
三,解决办法
简单一句话就是让系统识别到对应的驱动即可~
首先查询已经安装的内核版本,记录下具体的名称
rpm -qa|grep kernel
然后查询3.10.0 initramfs的驱动
[root@localhost ~]# lsinitrd -k 3.10.0-957.el7.x86_64 | grep mpt[23]sas
drwxr-xr-x 2 root root 0 Nov 12 19:24 usr/lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/scsi/mpt3sas
-rw-r--r-- 1 root root 92972 Nov 9 2018 usr/lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/scsi/mpt3sas/mpt2sas.ko.xz
可以看到在3.10内核的时候是mpt2sas驱动,可是在5.x内核中看到新版的内核已经把mpt2sas升级为mpt3sas
[root@localhost ~]# ls /usr/lib/modules/5.3.6-1.el7.elrepo.x86_64/kernel/drivers/scsi/mpt3sas/mpt3sas.ko
/usr/lib/modules/5.3.6-1.el7.elrepo.x86_64/kernel/drivers/scsi/mpt3sas/mpt3sas.ko
查询5.3.6 initramfs的驱动,可以看到并没有输出,说明initramfs并没有把这个驱动打进去。
[root@localhost ~]# lsinitrd -k 5.3.6-1.el7.elrepo.x86_64 | grep mpt[23]sas
有两种解决办法。
第一种
修改 /etc/dracut.conf文件,增加字段
sed -i '/#add_drivers+=""/aadd_drivers+="mpt3sas"' /etc/dracut.conf
重新生成initramfs
cd /boot/
mv initramfs-5.3.6-1.el7.elrepo.x86_64.img{,.bak}
dracut -f /boot/initramfs-5.3.6-1.el7.elrepo.x86_64.img 5.3.6-1.el7.elrepo.x86_64
第二种
强制加载驱动
dracut --force --add-drivers mpt3sas --kver=5.3.6
以上方法二选一做下驱动的集成,然后做下面的检查:
lsinitrd -k 5.3.6-1.el7.elrepo.x86_64 | grep mpt[23]sas
输出正常以后就可以重启选择新内核了,一切正常~