CentOS7 升级内核到 4.4 以上版本时无法重启

  • 原创
  • Madman
  • /
  • 2018-12-04 16:54
  • /
  • 0
  • 49 次阅读

Synopsis: CentOS 7.3 从内核 3.10.0 升级到 4.14.40 后,重启不了,原因是 Linux 内核 4.4.x 版本之后,dracut 命令生成的 initramfs 默认不会自动加载 mpt3sas 驱动模块,导致内核 vmlinuz 无法加载它的 rootfs(根文件系统),因为识别不了系统盘(两块 SAS 系统盘接在 LSI 2308 HBA 卡上,创建 RAID 1),没有对应的驱动程序

1. 现象描述

使用 CentOS-7-x86_64-DVD-1611.iso 原版 ISO 光盘安装到 CentOS-7.3 后,默认的 Linux内核 版本是 3.10.0-514.el7.x86_64

下载并安装以下两个 RPM 包,从而升级内核到 4.14.40

  • kernel-4.14.40-1.x86_64.rpm
  • kernel-headers-4.14.40-1.x86_64.rpm

重启系统,等了半天系统没启动成功,发现一直卡在进度条。按 ESC 键查看详细信息如下:

0 按 ESC 查看详情

既然能显示 GRUB2 的引导菜单(都到进度条了,肯定过了引导菜单),说明 MBRGRUB2 没有问题,那么问题应该是 initramfs 中没有系统盘的驱动程序(需要 mpt2sas),导致内核 vmlinuz 无法加载它的 rootfs(根文件系统)。不能使用 单用户模式,因为进不去,systemd不可能启动起来,自然进不了单用户模式,那只能使用安装光盘的 救援模式

2. 问题解决

2.1 救援模式

我们需要利用原版 ISO 光盘所提供的 Rescure a CentOS Linux system(救援模式)来重建 initramfs

插入光盘后,设置 Boot Sequence(启动顺序),选择从光盘启动:

1 进入救援模式 - 设置启动项

选择 Troubleshooting(故障排除)

2 进入救援模式 - 选择故障排除

选择 Rescure a CentOS Linux system

3 进入救援模式 - 选择救援一个Linux系统

输入数字 1,即选择 1) Continue

4 进入救援模式 - 输入数字1并回车

Enter 回车键:

5 进入救援模式 - 回车确认

此时,已经进入救援模式了,并显示命令行 Shell:

6 进入救援模式 - 已进入救援模式命令行

2.2 重建 initramfs

升级前的内核 3.10.0-514.el7.x86_64 对应的 initramfsmpt2sas 驱动程序,从另一台服务器查看的信息如下:

[root@CentOS ~]# lsinitrd -k 3.10.0-514.el7.x86_64 | grep 'mpt[23]sas'
drwxr-xr-x   2 root     root            0 Apr 17 12:05 usr/lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/scsi/mpt2sas
-rw-r--r--   1 root     root       337793 Nov 20  2015 usr/lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/scsi/mpt2sas/mpt2sas.ko

而内核升级到 4.14.40 后,默认只提供 mpt3sas 驱动程序,同时它具有别名 mpt2sas,所以可以驱动这两种硬件:

[root@CentOS ~]# ls -l /lib/modules/4.14.40/kernel/drivers/scsi/mpt3sas/mpt3sas.ko 
-rw-r--r-- 1 root root 499342 May 17  2018 /lib/modules/4.14.40/kernel/drivers/scsi/mpt3sas/mpt3sas.ko
[root@CentOS ~]# modinfo mpt3sas
filename:       /lib/modules/4.14.40/kernel/drivers/scsi/mpt3sas/mpt3sas.ko
alias:          mpt2sas
version:        15.100.00.00
license:        GPL
description:    LSI MPT Fusion SAS 3.0 Device Driver
author:         Avago Technologies <MPT-FusionLinux.pdl@avagotech.com>
srcversion:     4761D49B0235966ABB4ED3C
...
depends:        scsi_transport_sas,raid_class
retpoline:      Y
intree:         Y
name:           mpt3sas
vermagic:       4.14.40 SMP mod_unload modversions 
...

但是,initramfs-4.14.40.img 中默认没有加载这个驱动,才导致内核无法加载它的 rootfs(根文件系统)

[root@CentOS ~]# lsinitrd -k 4.14.40 | grep 'mpt[23]sas'
[root@CentOS ~]# 

(1) chroot

在救援模式中,切换根目录到原CentOS系统的根目录:

sh-4.2# chroot /mnt/sysimage
bash-4.2# 

(2) add kernel module

使用 dracut 命令加载 mpt3sas 驱动程序到 initramfs 中:

bash-4.2# dracut --force --add-drivers mpt3sas --kver=4.14.40

确保新生成的 initramfs 中包含了 mpt3sas 驱动模块:

bash-4.2# lsinitrd -k 4.14.40 | grep 'mpt[23]sas'
Arguments: --force --add-drivers 'mpt3sas' --kver '4.14.40'
drwxr-xr-x   2 root     root            0 Dec  4  2018 usr/lib/modules/4.14.40/kernel/drivers/scsi/mpt3sas
-rw-r--r--   1 root     root       499342 May 17  2018 usr/lib/modules/4.14.40/kernel/drivers/scsi/mpt3sas/mpt3sas.ko

退出 chroot,然后重启:

bash-4.2# exit
sh-4.2# reboot

注意: 将 BIOS 中启动顺序修改回来,从系统盘启动!

应该能正常进入 CentOS 系统了,并且查看内核版本,也是升级后的版本

未经允许不得转载: LIFE & SHARE - 王颜公子 » CentOS7 升级内核到 4.4 以上版本时无法重启

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录