一、概述

     在数据中心基础环境中,Linux系统使用很普遍,但是有时候会遇到应用程序需要运行在高版本的内核上或者有时候系统自身要求需要升级内核,我们要综合考虑升级内核的风险。

二、升级内核的方法

1、查看操作系统内核版本

[root@localhost ~]# uname -r
3.10.0-1062.4.1.el7.x86_64

2、安装ELRepo到CentOS,下载key,并进行安装

最好从官方网站获取最新版本(官网地址:http://elrepo.org/tiki/tiki-index.php)。

[root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@localhost ~]# yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
已加载插件:fastestmirror, langpacks
elrepo-release-7.el7.elrepo.noarch.rpm                              | 8.5 kB  00:00:00
正在检查 /var/tmp/yum-root-LAFBfB/elrepo-release-7.el7.elrepo.noarch.rpm: elrepo-release-7.0-4.el7.elrepo.noarch
/var/tmp/yum-root-LAFBfB/elrepo-release-7.el7.elrepo.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 elrepo-release.noarch.0.7.0-4.el7.elrepo 将被 安装
--> 解决依赖关系完成
base/7/x86_64                                                       | 3.6 kB  00:00:00
extras/7/x86_64                                                     | 2.9 kB  00:00:00
extras/7/x86_64/primary_db                                          | 165 kB  00:00:00
updates/7/x86_64                                                    | 2.9 kB  00:00:00
updates/7/x86_64/primary_db                                         | 7.6 MB  00:00:01

依赖关系解决

===========================================================================================
 Package          架构     版本                源                                     大小
===========================================================================================
正在安装:
 elrepo-release   noarch   7.0-4.el7.elrepo    /elrepo-release-7.el7.elrepo.noarch   5.0 k

事务概要
===========================================================================================
安装  1 软件包

总计:5.0 k
安装大小:5.0 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
  正在安装    : elrepo-release-7.0-4.el7.elrepo.noarch                                                                                    1/1
  验证中      : elrepo-release-7.0-4.el7.elrepo.noarch                                                                                    1/1

已安装:
  elrepo-release.noarch 0:7.0-4.el7.elrepo

完毕!

3、查看内核列表,可以看到各个现有版本。

[root@localhost ~]#  yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
 * elrepo-kernel: hkg.mirror.rackspace.com
elrepo-kernel                                                                                                                                   | 2.9 kB  00:00:00
elrepo-kernel/primary_db                                                                                                                        | 1.9 MB  00:00:01
可安装的软件包
kernel-lt.x86_64                                                                   4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-devel.x86_64                                                             4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-doc.noarch                                                               4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-headers.x86_64                                                           4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-tools.x86_64                                                             4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-tools-libs.x86_64                                                        4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                                  4.4.220-1.el7.elrepo                                                   elrepo-kernel
kernel-ml.x86_64                                                                   5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-devel.x86_64                                                             5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-doc.noarch                                                               5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-headers.x86_64                                                           5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-tools.x86_64                                                             5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-tools-libs.x86_64                                                        5.6.7-1.el7.elrepo                                                     elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                                  5.6.7-1.el7.elrepo                                                     elrepo-kernel
perf.x86_64                                                                        5.6.7-1.el7.elrepo                                                     elrepo-kernel
python-perf.x86_64

4、安装需要的kernel版本,这里安装kernel-kt

内核版本介绍:

1)、lt:longterm的缩写:长期维护版;
2)、ml:mainline的缩写:最新稳定版;

[root@localhost boot]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * elrepo-kernel: hkg.mirror.rackspace.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel-ml.x86_64.0.5.6.7-1.el7.elrepo 将被 安装
---> 软件包 kernel-ml-devel.x86_64.0.5.6.7-1.el7.elrepo 将被 安装
--> 解决依赖关系完成

依赖关系解决

=============================================================================================================================================
 Package                            架构                      版本                                    源                                大小
=============================================================================================================================================
正在安装:
 kernel-ml                          x86_64                    5.6.7-1.el7.elrepo                      elrepo-kernel                     49 M
 kernel-ml-devel                    x86_64                    5.6.7-1.el7.elrepo                      elrepo-kernel                     13 M

事务概要
=============================================================================================================================================
安装  2 软件包

总计:62 M
安装大小:272 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64                                                                                1/2
  正在安装    : kernel-ml-5.6.7-1.el7.elrepo.x86_64                                                                                      2/2
  验证中      : kernel-ml-5.6.7-1.el7.elrepo.x86_64                                                                                      1/2
  验证中      : kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64                                                                                2/2

已安装:
  kernel-ml.x86_64 0:5.6.7-1.el7.elrepo                              kernel-ml-devel.x86_64 0:5.6.7-1.el7.elrepo

完毕!

5、查看系统上面可以使用的内核

[root@localhost boot]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.6.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-3d09bf01bc1d401eac8c018ab645a715) 7 (Core)

6、设置新的内核为grub2的默认版本

1)修改启动顺序默认值

方法一:命令直接设置

[root@localhost ~]# grub2-set-default 0

方法二:修改/etc/default/grub 文件

..........................................
设置 GRUB_DEFAULT=0,通过上面查询显示的编号为 0 的内核作为默认内核:
[root@node01 ~]# 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 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
...........................................

2)生产grub 配置文件  

[root@localhost boot]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.6.7-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.6.7-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1062.4.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.4.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64
Found linux image: /boot/vmlinuz-0-rescue-3d09bf01bc1d401eac8c018ab645a715
Found initrd image: /boot/initramfs-0-rescue-3d09bf01bc1d401eac8c018ab645a715.img
done

7、重新启动

[root@localhost boot]# reboot
[root@localhost ~]# uname -r
5.6.7-1.el7.elrepo.x86_64

8、删除旧内核版本 

[root@localhost ~]# rpm -qa | grep kernel
abrt-addon-kerneloops-2.1.11-55.el7.centos.x86_64
kernel-3.10.0-1062.4.1.el7.x86_64
kernel-ml-5.6.7-1.el7.elrepo.x86_64
kernel-debug-devel-3.10.0-1062.4.1.el7.x86_64
kernel-3.10.0-862.el7.x86_64
kernel-tools-libs-3.10.0-1062.4.1.el7.x86_64
kernel-tools-3.10.0-1062.4.1.el7.x86_64
kernel-headers-3.10.0-1062.4.1.el7.x86_64
kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64

1)方法一:使用yum remove 删除旧版本RPM包

[root@localhost ~]# yum remove kernel-3.10.0-1062.4.1.el7.x86_64 kernel-3.10.0-862.el7.x86_64 kernel-tools-3.10.0-1062.4.1.el7.x86_64 kernel-headers-3.10.0-1062.4.1.el7.x86_64
已加载插件:fastestmirror, langpacks
正在解决依赖关系
--> 正在检查事务
---> 软件包 kernel.x86_64.0.3.10.0-862.el7 将被 删除

2)方法二: yum-utils 工具

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

[root@localhost ~]# yum install yum-utils     //安装工具
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: hkg.mirror.rackspace.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 yum-utils-1.1.31-52.el7.noarch 已安装并且是最新版本
无须任何处理
[root@localhost ~]# package-cleanup --oldkernels    //删除旧版本
已加载插件:fastestmirror, langpacks
No old kernels to remove

 

-----------------------------------------------------------书山有路勤为径,学海无涯苦作舟-------------------------------------------------------------