文档章节

记一次centos 7内核升级事故

阿dai学长
 阿dai学长
发布于 01/24 19:29
字数 1166
阅读 2449
收藏 41

情景

公司做等保3测评,在进行系统漏洞检测时发现内核存在漏洞,需要进行升级。

名称版本
升级前内核CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
升级后内核CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)

正确操作过程

升级方法

升级方法很简单,找到对应版本的内核rpm包,然后直接使用yum或rpm进行安装即可,该过程中可能需要处理一些包之间的依赖问题。

$ yum install -y kernel-3.10.0-957.1.3.el7.x86_64.rpm kernel-headers-3.10.0-957.el7.x86_64.rpm kernel-tools-3.10.0-957.1.3.el7.x86_64.rpm kernel-tools-libs-3.10.0-957.1.3.el7.x86_64.rpm

生效新版本内核

安装完新版本内核之后一定要进行如下处理,不然就会和我一样在重启服务器的时候踩坑。

接下来操作的目的就是通过grub更改服务器启动时加载内核的版本!

  • 查看当前安装的系统内核

    $ rpm -qa kernel*
    kernel-3.10.0-957.1.3.el7.x86_64
    kernel-headers-3.10.0-957.el7.x86_64
    kernel-tools-3.10.0-957.1.3.el7.x86_64
    kernel-tools-libs-3.10.0-957.1.3.el7.x86_64
    
  • 查看当前系统默认启动的内核版本,结果可能有如下两种:

    $ grub2-editenv list
    # 结果1:无相关信息
    saved_entry=0
    
    # 结果2:当前运行的系统版本
    saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
    
  • 切换系统启动时默认内核版本:

    $ grub2-set-default 'CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)'
    
  • 然后可以顺利重启服务器了,重启后查看系统信息:

    $ uname -a
    或
    $ cat /proc/version   
    Linux version 3.10.0-957.1.3.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 29 14:49:43 UTC 2018
    

至此内核升级完成。

意外

既然有正确操作过程,有时候往往就会一不小心犯点错误。因为是第一次做内核升级,我就顺利的踩坑了。精彩过程请往下看:

重启

新版内核安装完成后需要服务器重启才生效。第一次操作,就当一个普通rpm包升级来处理的,安装完成后果断执行 init 6 重启服务器,结果悲催了,如下图:

20190124154832791453243.png

卡在这里不动了,看提示信息也没报错,直接回车,结果下面的场景出现了:

20190124154832797348980.png

找不到对应版本的内核!!!

WTF!!!

解决问题

认真分析一下,提示信息是说找不到”3.10.0-327.el7.x86_64“版本的内核,那既然如此,百度(google)吧!关键词”centos 7 内核升级重启找不到内核“ ,找到一下几篇文章:

看过第一篇和第二篇文档后大概了解了修复的原理,即修改内核启动顺序,第一篇中的重装原系统内核对于本次内核升级来说意义不大,第二篇倒是提醒我一个核心——linux系统一切皆文件!

既然可以在服务器宕机前通过grub命令行更改内核启动顺序,那么宕机后肯定可以通过救援模式进入grub修改或者其他办法。

问题复现

因为是第一次遇到这种问题,整好手头有虚拟机,于是就抱着试试看的心理复现了该错误场景,重启虚拟机来到内核选择界面:

20190124154832876030297.png

提示:"e" 编辑当前所选项目!反正是虚拟机,随便搞就是了,果断进入编辑状态:

20190124154832347583118.png

刚好有内核信息出现,内心窃喜,不如就试试在这里更改一下系统版本信息,再继续往下看:

20190124154832363032560.png

一口气全改了就是了,大不了重装系统了(前提当前服务器没部署特别重要的服务,不然的话还是要严谨些)。将上图中红框内的信息都改成新版本 “3.10.0-957.1.3.el7.x86_64” ,然后Ctrl-x,进入系统加载界面,瞬间内心如释重负。

等待系统启动完成,赶紧登陆检查一下状态,一切正常!!!

实践出真知!!!(PS:没事不要瞎搞,搞之前一定要好好学习!!!)

发篇文档装B!!!

© 著作权归作者所有

共有 人打赏支持
阿dai学长
粉丝 68
博文 225
码字总数 295497
作品 0
海淀
运维
私信 提问
加载中

评论(15)

阿dai学长
阿dai学长

引用来自“heike07”的评论

收藏啦
😬 多多指教
h
heike07
收藏啦
阿dai学长
阿dai学长

引用来自“行之予之”的评论

平时不维护升级的吗?跨那么多版本升级,简直作死。
😆 No zuo No die
行之予之
平时不维护升级的吗?跨那么多版本升级,简直作死。
酸奶瓶盖儿
酸奶瓶盖儿

引用来自“酸奶瓶盖儿”的评论

用的阿里云,直接重装,环境就一个jre。省事儿!

引用来自“阿dai学长”的评论

物理机。。即便阿里云,n台机器部署着业务,重装系统,是不是想跑路了?
老项目的话就很麻烦,我们是微服务。相对来说,就简单多了。怎么搞都行!
阿dai学长
阿dai学长

引用来自“fzn0268”的评论

咋不事先在虚拟机演练一波
这次操作是在一台没有部署重要服务的机器,影响并不大。不过事先在虚拟机演练一波确实有必要,平时各种操作都会在虚拟机试运行。但是虚拟机和线上物理机环境不同,实施过程中仍然会有很多差异,这次就踩坑了,还好自己把坑填上
阿dai学长
阿dai学长

引用来自“MGL_TECH”的评论

centos的话不想大版本升级的话 yum update 不就可以吗 ?

引用来自“神马和浮云”的评论

可能是因为内核版本是自己指定安装的, 并不是通过update来升级的, 所以需要手动选择启动内核
使用update升级是简单,但是公司用的本地yum源,装系统都是用的指定系统镜像,update不好使了。。。
阿dai学长
阿dai学长

引用来自“xiaoaiwhc1”的评论

直接rpm 安装,然后不要替换掉老的内核,这样即使出现你说的情况也容易解决。一切就绪后手工删除老的内核
嗯嗯,是的。第一次操作有点小失误,重启前设定一下默认系统也就不会出现这问题了,文中已补充
阿dai学长
阿dai学长

引用来自“酸奶瓶盖儿”的评论

用的阿里云,直接重装,环境就一个jre。省事儿!
物理机。。即便阿里云,n台机器部署着业务,重装系统,是不是想跑路了?
云帮每周问答集锦(11.07-11.13)

Q: 云帮社区版的定位是什么? A: 中小企业CI/CD平台,生产环境的应用管理平台。云帮不是拉近开发和运维的距离,而是让开发和运维做他们本来应该做的事情。开发对程序和业务负责,运维对资源...

好雨云帮
2016/11/17
57
1
linux是否可以升级内核?

如果之前已经部署了软件和应用就需要慎重,因为升级可能导致不支持老硬件,有些编译安装的软件需要重新编译 如果是全新安装的系统,可以yum update 你也可以跳过内核升级(大概30M左右),y...

爬墙
2016/04/13
9
0
CentOS7 更换内核

#使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核 [root@bigapp-slave27 ~]# cat /boot/grub2/grub.cfg |grep menuentry if [ x"${feature_menuentry_id}" = xy ]; then men......

Neo_robot
2018/01/01
0
0
“脏牛(Dirty Cow)”漏洞】CVE-2016-5195:Linux 内核本地提权漏洞 通告及修复

漏洞编号:CVE-2016-5195 漏洞名称:脏牛(Dirty COW) 风险等级:高危 漏洞危害: 黑客可以通过远程入侵获取低权限用户后,在服务器本次利用该漏洞在全版本Linux系统上实现本地提权,从而获...

simyang
2016/11/15
0
0
docker安装指南

实验需求:Docker值得关注的特性: o 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。 o 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。 o 网络隔离...

余梦似海
2017/04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

转--C++ operator关键字(重载操作符)

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算...

天王盖地虎626
12分钟前
0
0
工作流题目

1. 当 创建流程审批系统时,我们需要 具备 哪些 功能? 答:(1) 流程管理 (2) 流程发起 (3) 流程 审批 (4) 流程 查询

杨凯123
38分钟前
2
0
每个 JavaScript 工程师都应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。 本篇文章是参照 @leonardomso 创立,英文版项目地址在这里。 ...

前端小攻略
46分钟前
1
0
使用keepalived实现nginx的高可用

概述 是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群 10.10.10...

bboysoulcn
今天
3
0
Mysql索引机制B+Tree

1、问题引入 有一个用户表,为了查询的效率,需要基于id去构建索引。构建索引我们需要考虑两个方面的问题,1个是查询的效率,1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上...

万山红遍
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部