升级 CentOS 内核参考资料 1 
升级 CentOS 内核参考资料 2 
通过 /proc 虚拟文件系统读取或配置内核 
Linux 内核官网 
CentOS 官网

1. 关于 Linux 内核

Linux 内核分两种:官方内核(通常是内核开发人员用)和各大 Linux 发行版内核(一般用户常用)。

1.1 官方内核

在使用 Docker 时,发现其对 Linux 内核版本的最低要求是 3.10(这也刚好是 CentOS 7.2 的内核版本),但是在这个版本上有部分功能无法实现。目前 Linux 内核已经发布到 4.X(可以随时在 Linux 内核官网 查看当前版本),为了使用最新版本的内核,只好在安装 CentOS 7 后对内核进行升级。

当然,内核也不能选最新的,防止有尚未发现的 BUG。而且为了减少以后停止维护带来的麻烦,最好安装长期支持版本。各个版本的支持时间在 这个页面 查看。每个版本可能有四种类型,概述如下:

  • 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,并且不会频繁发布版本。

Longterm release 的内核:

版本 维护人 发布日期 项目生命周期
4.14 Greg Kroah-Hartman 2017-11-12 Jan, 2020
4.9 Greg Kroah-Hartman 2016-12-11 Jan, 2019
4.4 Greg Kroah-Hartman 2016-01-10 Feb, 2022
4.1 Sasha Levin 2015-06-21 May, 2018
3.16 Ben Hutchings 2014-08-03 Apr, 2020
3.2 Ben Hutchings 2012-01-04 May, 2018

1.2 各大 Linux 发行版内核

一般来说,只有从 kernel.org 下载并编译安装的内核才是官方内核。 
大多数 Linux 发行版提供自行维护的内核,可以通过 yum 或 rpm 等包管理系统升级。这些内核可能不再和 Linux 内核官方开发维护人员有关系了。通过这个由各大 Linux 发行版支持的仓库升级内核,通常来说更简单可靠,但是可选择的内核版本也更少。

使用 uname -r 区分你用的是官方内核还是 Linux 发行版内核,横线后面有任何东西都表示这不是官方内核:

# uname -r
3.10.0-514.26.2.el7.x86_64
  • 1
  • 2

2. 查看当前的内核版本

2.1 概述

Linux 只表示内核。各大 Linux 发行版(RedHat、Ubuntu、CentOS 等)在内核基础上集成了其他的一系列软件,按照各自的版本规则发布。例如 CentOS 7.2 中,通过 uname -r 查看内核版本时,会看到 3.10.0-514.26.2.el7.x86_64,表示对应的 Linux 内核版本是 3.10。

2.2 常用的查看内核信息的命令

2.2.1 uname

打印指定的系统信息。不带参数时,默认使用 -s 参数。 
参数: 
-a, –all:按照下面的顺序打印所有信息,如果 -p 和 -i 未知时排除掉。 
-s, –kernel-name:打印内核名字,一般就是 Linux。 
-n, –nodename:打印网络节点的主机名。 
-r, –kernel-release:打印内核发行版的版本。常用。3.10.0-514.26.2.el7.x86_64 
-v, –kernel-version:打印内核的版本。#1 SMP Tue Jul 4 15:04:05 UTC 2017 
-m, –machine:打印机器硬件名。 
-p, –processor:打印处理器名字或“unknown”。 
-i, –hardware-platform:打印硬件平台或“unknown”。 
-o, –operating-system:打印操作系统。 
–help:显示这个帮助并退出。 
–version:显示这版本信息并退出。

示例:

# uname -r
3.10.0-514.26.2.el7.x86_64
# uname -a
Linux VM_139_74_centos 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2.2 /proc 虚拟文件系统

内核空间和用户空间通过 /proc 虚拟文件系统可以通信。 
/proc 目录中包含一些目录和虚拟文件,这些虚拟文件可以向用户呈现内核信息或者从用户空间向内核发送信息。 
常用文件:

  • cpuinfo:标识了处理器的类型和速度
  • pci:显示在 PCI 总线上找到的设备
  • modules:当前加载到内核中的模块
  • version:系统版本及内核版本

示例:

# cat /proc/version
Linux version 3.10.0-514.26.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Jul 4 15:04:05 UTC 2017
  • 1
  • 2

3. 备份数据

4. 升级内核

记得首先更新仓库:

yum -y update
  • 1

-y 选项可以在每次需要确认时,自动使用 yes,节省时间。

4.1 启用 ELRepo 仓库

ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。 
ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。

启用 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
  • 1
  • 2

4.2 查看可用的系统内核包:

可以看到,只有 4.4 和 4.15 两个版本可以使用:

# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: fastestmirror, langpacks
elrepo-kernel | 2.9 kB 00:00:00
elrepo-kernel/primary_db | 1.7 MB 00:00:02
Determining fastest mirrors
* elrepo-kernel: elrepo.org
Available Packages
kernel-lt.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-devel.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-doc.noarch 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-headers.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-tools.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs-devel.x86_64 4.4.118-1.el7.elrepo elrepo-kernel
kernel-ml.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-doc.noarch 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-headers.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-tools.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs-devel.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
perf.x86_64 4.15.6-1.el7.elrepo elrepo-kernel
python-perf.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4.3 安装最新内核:

# yum --enablerepo=elrepo-kernel install kernel-ml
  • 1

--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换。

5. 设置 grub2

内核安装好后,需要设置为默认启动选项并重启后才会生效

5.1 查看系统上的所有可以内核:

# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.15.6-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-f9d400c5e1e8c3a8209e990d887d4ac1) 7 (Core)
  • 1
  • 2
  • 3
  • 4
  • 5

5.2 设置 grub2

我的机器上存在 4 个内核(腾讯云的机器,不知道后面两个干嘛的),我们要使用 4.15 这个版本,可以通过 grub2-set-default 0 命令或编辑 /etc/default/grub 文件来设置。

1. 通过 grub2-set-default 0 命令设置:

其中 0 来自上一步的 awk 命令:

sudo grub2-set-default 0
  • 1

2. 编辑 /etc/default/grub 文件

设置 GRUB_DEFAULT=0,表示使用上一步的 awk 命令显示的编号为 0 的内核作为默认内核:

# vi /etc/default/grub

> GRUB_TIMEOUT=5
> GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
> GRUB_DEFAULT=0
> GRUB_DISABLE_SUBMENU=true
> GRUB_TERMINAL_OUTPUT="console"
> GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0 console=tty0 panic=5"
> GRUB_DISABLE_RECOVERY="true"
> GRUB_TERMINAL="serial console"
> GRUB_TERMINAL_OUTPUT="serial console"
> GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.3 生成 grub 配置文件并重启

下一步,通过 gurb2-mkconfig 命令创建 grub2 的配置文件,然后重启:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
  • 1
  • 2

5.4 验证

通过 uname -r 查看,可以发现已经生效了。

# uname -r
4.15.6-1.el7.elrepo.x86_64
  • 1
  • 2

6. 删除旧内核(可选)

内核有两种删除方式:通过 yum remove 命令或通过 yum-utils 工具。

6.1 通过 yum remove 命令

查看系统中全部的内核:

# rpm -qa | grep kernel
kernel-tools-libs-3.10.0-514.26.2.el7.x86_64
kernel-ml-4.15.6-1.el7.elrepo.x86_64
kernel-3.10.0-327.el7.x86_64
kernel-tools-3.10.0-514.26.2.el7.x86_64
kernel-headers-3.10.0-514.26.2.el7.x86_64
kernel-3.10.0-514.26.2.el7.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

删除旧内核的 RPM 包

yum remove kernel-tools-libs-3.10.0-514.26.2.el7.x86_64 kernel-3.10.0-327.el7.x86_64 kernel-tools-3.10.0-514.26.2.el7.x86_64 kernel-headers-3.10.0-514.26.2.el7.x86_64 kernel-3.10.0-514.26.2.el7.x86_64
  • 1

6.2 通过 yum-utils 工具

如果安装的内核不多于 3 个,yum-utils 工具不会删除任何一个。只有在安装的内核大于 3 个时,才会自动删除旧内核。

6.2.1 安装

yum install yum-utils
  • 1

6.2.2 删除

package-cleanup --oldkernels
 

CentOS 7 升级内核的更多相关文章

  1. CentOS在线升级内核

    升级内核需要使用 elrepo 的yum 源首先我们导入 elrepo 的key  rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ...

  2. 关闭centos自动升级内核

    八.关闭Centos自动更新chkconfig --list yum-updatesd  #显示当前系统状态yum-updatesd    0:关闭  1:关闭  2:启用  3:启用  4:启用  ...

  3. CentOS 6 - 升级内核

    有的时候,需要升级Linux内核,今天我就是在CentOS 6中升级内核,在没有升级内核之前,我的CentOS 6只有2.6.32这一个内核,也是默认启动的内核.下面就开始一步步操作升级内核了! 一, ...

  4. CENTOS 7 升级内核版本(附带升级脚本)

    写在前面的话 对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时 ...

  5. CentOS 7 升级内核版本

    1.查看当前内核版本 $ uname -r 3.10.0-514.el7.x86_64 $ uname -a Linux k8s-master 3.10.0-514.el7.x86_64 #1 SMP ...

  6. CentOS Linux 升级内核步骤和方法(转)

    当前系统为CentOS Linux release 6.0 (Final),内核版本为2.6.32-71.el6.i686.由于最近内核出现最新的漏洞(linux kernel 又爆内存提权漏洞,2. ...

  7. Centos 7升级内核

    检查当前 CentOS 系统内核版本 uname -sr 在 CentOS 7 上启用 ELRepo 仓库 rpm --import https://www.elrepo.org/RPM-GPG-KE ...

  8. CentOS 7 升级内核 Kernel

    安装kernel 首先安装elrepo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.e ...

  9. CentOS 6.5 升级内核到 3.10.28

    本文适用于CentOS 6.4, CentOS 6.5,亲测可行,估计也适用于其他Linux发行版. 1. 准备工作 1.1 下载源码包 Linux内核版本有两种:稳定版和开发版 ,Linux内核版本 ...

随机推荐

  1. [转]ssh和SSH服务(包含隧道内容)

    本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...

  2. HTML5手机页面里面如何把长按复制避免

    在写HTML5手机页面的时候,有时候会写到一些标签是需要用户长按然后放开的 但是微信里面长按就会出现复制,大大影响了用户体验,那么如何可以避免呢? 我也是最近写到这样的页面,总结了一部分,大家可以作为 ...

  3. Spring Boot 2.0 整合 FreeMarker 模板引擎

    本篇博文将和大家一起使用Spring Boot 2.0 和FreeMarker 模板引擎整合实战. 1. 创建新的项目 2. 填写项目配置信息 3. 勾选web 模块 4. 勾选freemarker模 ...

  4. kali2016.1 基本配置

    更新源 修改 /etc/apt/sources.list  #kali官方源 deb http://http.kali.org/kali kali-rolling main non-free cont ...

  5. 《软件测试自动化之道》读书笔记 之 XML测试

    <软件测试自动化之道>读书笔记 之 XML测试 2014-10-07 待测程序测试程序  通过XmlTextReader解析XML  通过XmlDocument解析XML  通过XmlPa ...

  6. sql server 获取动态sql输出结果

    不带输出结果 我们一般会这样写 例子:一个输出6位递增号码结果 ALTER proc GetCode ), ) as declare @sqlstring nvarchar(max) set @sql ...

  7. Java知多少(79)哈希表及其应用

    哈希表也称为散列表,是用来存储群体对象的集合类结构. 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系.当要查找一个对象时,只能以某种顺 ...

  8. Ubuntu 设置NAT共享网络(命令行方法)

    本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用.我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth ...

  9. Ubuntu下在Apache中运行Keystone

    最近一次从Github上更新Keystone的代码后,发现原来bin/keystone-all和bin/keystone-manage都不见了,取而代之的是keystone/cmd/目录下的all.p ...

  10. centos7目录统计之du命令

    CentOS下du查看计算目录大小的命令 用法实例: [root@localhost local]# du -hs smgpdfd 3.3G    smgpdfd [root@localhost lo ...