x86架构Centos7系统升级内核3.10--->4.17.11注意事项

x86架构Centos7系统升级内核3.10—>4.17.11

通过使用脚本还是源码编译升级都会遇见升级内核失败的情况

究其原因,系统内核升级失败无非就那么几种情况,这次碰见了就顺便写个教程,与君分享:

1.由于某些应用程序基于更高的内核架构开发,应用更高的内核特性,所以在部署的时候,需要从初始的3.10升级至更高的内核,但在升级的时候出现进入救援模式 “dracut#” “shell#”

2.升级正常步骤:
升级内核,首先安装高版本的内核,我这边更倾向于编译安装,可以自定义更多的选项,安装好后,有些教程可以要卸载内核,我这边建议可以先不删除,便于新内核进系统出错,再次进入旧内核维护系统

编译方式也放在这:
2.1下载源码
例如:
[root@centos7 ~]# uname -r
3.10.0-1127.19.1.el7.x86_64
查询得到的版本号为:3.10.0-1127.19.1.el7.x86_64
第一个组数字:3, 主版本号
第二个组数字:10, 次版本号,当前为稳定版本,一般这个数字为偶数表示稳定,奇数表示在开发版本,通常这样的不做生产使用。
第三个组数字:0, 修订版本号
第四个组数字:1127.19.1,表示发型版本的补丁版本

https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/
内核下载地址
查看内核的种类在 官网:The Linux Kernel Archives
• Prepatch:Prepatch 或 “RC” 内核是主要的内核预发行版本,主要针对内核开发人员和 Linux 爱好者。必须从源代码进行编译,并且通常包含必须在可以放入稳定版本之前进行测试的新功能。Prepatch 内核由 Linus Torvalds 维护和发布。
• Mainline:Mainline 主线树由 Linus Torvalds 维护。这个版本的内核会引入所有新功能。新的 Mainline 内核每 2-3 个月发布一次。
• Stable:每个主线内核被发布后,即被认为是“stable”。任何对 stable 内核的 BUG 修复都会从 Mainline 主线树中回溯并由指定的 stable 内核维护人员使用。 在下一个主线内核可用之前,通常只有几个 BUG 修复内核版本 - 除非它被指定为“longterm maintenance kernel(长期维护内核)”。stable 内核更新按需发布,通常每月 2-3 次。
• Longterm:通常会提供几个“longterm maintenance”内核版本,用于修复旧版内核的 BUG。这些内核只会修复重大 BUG,并且不会频繁发布版本。

步骤 1:检查已安装的内核版本
uname -rs,给出的结果为:Linux 3.10.0-1127.19.1.el7.x86_64
步骤 2:在 CentOS 7 中升级内核
CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。
在 CentOS 7 上启用 ELRepo 仓库,运行如下命令:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org#导入该源的秘钥
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm#启用该源仓库
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available#查看有哪些内核版本可供安装
输出如下:
[root@centos7 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
Available Packages
elrepo-release.noarch                                                      7.0-5.el7.elrepo                                              elrepo-kernel
kernel-lt.x86_64                                                           4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-devel.x86_64                                                     4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-doc.noarch                                                       4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-headers.x86_64                                                   4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-tools.x86_64                                                     4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-tools-libs.x86_64                                                4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                          4.4.238-1.el7.elrepo                                          elrepo-kernel
kernel-ml-devel.x86_64                                                     5.8.13-1.el7.elrepo                                           elrepo-kernel
kernel-ml-doc.noarch                                                       5.8.13-1.el7.elrepo                                           elrepo-kernel
kernel-ml-headers.x86_64                                                   5.8.13-1.el7.elrepo                                           elrepo-kernel
kernel-ml-tools.x86_64                                                     5.8.13-1.el7.elrepo                                           elrepo-kernel
kernel-ml-tools-libs.x86_64                                                5.8.13-1.el7.elrepo                                           elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                          5.8.13-1.el7.elrepo                                           elrepo-kernel
perf.x86_64                                                                5.8.13-1.el7.elrepo                                           elrepo-kernel
python-perf.x86_64      
开始安装: yum --enablerepo=elrepo-kernel install kernel-ml -y#安装的是主线版本,该版本比较激进,慎重选择。版本号5.8.13
yum --enablerepo=elrepo-kernel install kernel-lt -y #安装的长期稳定版本,稳定可靠,版本为4.4.238
两个yum命令选择一个安装。安装完毕后,重启机器,手动选择新安装的新版本哦!!!
步骤 3:设置 GRUB 默认的内核版本
为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:
打开并编辑 /etc/default/grub 并设置 GRUB_DEFAULT=0。意思是 GRUB 初始化页面的第一个内核将作为默认内核。
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved  #这里的saved改为0即可,重启后,默认就是你上次所选的版本了。
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
执行命令:grub2-mkconfig -o /boot/grub2/grub.cfg

reboot
##引导进入新内核

方法二 官网源码包编译安装

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.11.7.tar.xz
tar -zxvf linux-4.11.7.tar.xz
cd linux-4.11.7
## 环境准备
yum install gcc make ncurses-devel openssl-devel flex bison  elfutils-libelf-devel  -y
#make config(基于文本的最为传统的配置界面,不推荐使用) 
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) 
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
我这里选择使用 make menuconfig(上面的四个命令选择使用第二个)。
make menuconfig  #该命令会出现一个简陋的菜单,类似bios菜单,其中可以进行功能挑选,具体的功能太多太多,不能一一介绍,懒人办法-默认即可。选择save,选择ok即可。

make -j `nproc` && make modules_install && make install 
 #内核全开,编译

第一种方法简单,这是唯一优点。缺点是只能选择系统官方更新稳定的版本;第二种方法,编译,更为灵活,可以选自己需要的模块编译进去嘛,就是难度比较高,需要比较了解内核。

内核升级出现故障解决

故障案例:
系统内核从3.10—>4.11.7
重启进入新内核系统发现 系统加载进入了引导,有进度条,但在进度条最后卡慢,最终进入dracut#,此时你命令查看 dmesg 没有发现任何error信息
修复办法:当听说这件事的第一反应怀疑,新内核没有驱动的问题,当然它还没让我失望

reboot
# 重启进入旧内核
lsmod | grep mpt
# 查看旧内核中使用的硬盘一系列的驱动
# 查看内核引导中的内存初始化文件中是否存在此驱动,并与新内核相比较
lsinitrd -k 3.10.0-957.el7.x86_64 | grep mpt

lsinitrd -k 4.11.7-el7.el7.x86_64 | grep mpt

#查询5.3.6 initramfs的驱动,可以看到并没有输出,
#说明initramfs并没有把这个驱动打进去
修复:
vim  /etc/dracut.conf
找到下面这行,增加引号中的内容
add_drivers+="mpt3sas"

cd /boot
dracut -f /boot/initramfs-4.11.7.el7.x86_64.img 4.11.7.el7.x86_64

lsinitrd -k 4.11.7-el7.el7.x86_64 | grep mpt
再次查看是否生成,已经添加了驱动到内存初始化文件中,
已经添加成功即可重启再次进入新内核
重要的学名
"initramfs"通常指的就是“初始化RAM文件系统”(Initial RAM Filesystem)。这个机制被用来在系统启动初期加载一个临时的根文件系统到内存中,这个文件系统包含了一些必要的驱动程序和工具,使得内核能够访问磁盘上的实际根文件系统,完成启动过程
  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值